|
|
@@ -55,6 +55,7 @@ pub struct AvellanedaStoikov {
|
|
|
impl AvellanedaStoikov {
|
|
|
// 时间窗口大小(微秒)
|
|
|
const MAX_TIME_RANGE_MICROS: i64 = 3 * 60_000_000;
|
|
|
+ const SPREAD_TIME_RANGE_MICROS: i64 = 20 * 60_000_000;
|
|
|
const RECORD_RANGE_MICROS: i64 = 4 * 60_000_000;
|
|
|
const TRADE_LONG_RANGE_MICROS: i64 = 3 * 60_000_000;
|
|
|
const TRADE_SHORT_RANGE_MICROS: i64 = 20_000_000;
|
|
|
@@ -66,7 +67,7 @@ impl AvellanedaStoikov {
|
|
|
let avellaneda_stoikov = Self {
|
|
|
// 分别给与的长度
|
|
|
depth_vec: FixedTimeRangeDeque::new(Self::MAX_TIME_RANGE_MICROS),
|
|
|
- spread_vec: FixedTimeRangeDeque::new(Self::MAX_TIME_RANGE_MICROS),
|
|
|
+ spread_vec: FixedTimeRangeDeque::new(Self::SPREAD_TIME_RANGE_MICROS),
|
|
|
trade_long_vec: FixedTimeRangeDeque::new(Self::TRADE_LONG_RANGE_MICROS),
|
|
|
trade_short_vec: FixedTimeRangeDeque::new(Self::TRADE_SHORT_RANGE_MICROS),
|
|
|
record_vec: FixedTimeRangeDeque::new(Self::RECORD_RANGE_MICROS),
|
|
|
@@ -251,14 +252,6 @@ impl AvellanedaStoikov {
|
|
|
self.bid_delta = self.base_delta;
|
|
|
self.ask_delta = self.base_delta;
|
|
|
|
|
|
- if self.inventory > Decimal::ZERO {
|
|
|
- self.bid_delta += pos_edge;
|
|
|
- self.ask_delta -= pos_edge;
|
|
|
- } else if self.inventory < Decimal::ZERO {
|
|
|
- self.bid_delta -= pos_edge;
|
|
|
- self.ask_delta += pos_edge;
|
|
|
- }
|
|
|
-
|
|
|
if self.flow_ratio_long > Decimal::ZERO {
|
|
|
self.ask_delta = self.ask_delta + self.ratio_edge;
|
|
|
self.bid_delta = self.bid_delta - self.ratio_edge;
|
|
|
@@ -267,6 +260,14 @@ impl AvellanedaStoikov {
|
|
|
self.bid_delta = self.bid_delta + self.ratio_edge;
|
|
|
}
|
|
|
|
|
|
+ if self.inventory > Decimal::ZERO {
|
|
|
+ self.bid_delta += pos_edge;
|
|
|
+ self.ask_delta = Decimal::ZERO;
|
|
|
+ } else if self.inventory < Decimal::ZERO {
|
|
|
+ self.ask_delta += pos_edge;
|
|
|
+ self.bid_delta = Decimal::ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
if self.init_delta_plus.is_zero() {
|
|
|
self.init_delta_plus = (self.bid_delta + self.ask_delta) / Decimal::TWO
|
|
|
}
|