Browse Source

delta升级。

skyffire 1 year ago
parent
commit
b744c1ca36
1 changed files with 10 additions and 9 deletions
  1. 10 9
      strategy/src/avellaneda_stoikov.rs

+ 10 - 9
strategy/src/avellaneda_stoikov.rs

@@ -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
             }