Selaa lähdekoodia

資金流方面的一些小調整。

skyfffire 1 vuosi sitten
vanhempi
commit
82db3a79e7
1 muutettua tiedostoa jossa 11 lisäystä ja 4 poistoa
  1. 11 4
      strategy/src/avellaneda_stoikov.rs

+ 11 - 4
strategy/src/avellaneda_stoikov.rs

@@ -56,6 +56,7 @@ pub struct AvellanedaStoikov {
 impl AvellanedaStoikov {
     // 时间窗口大小(微秒)
     const MAX_TIME_RANGE_MICROS: i64 = 3 * 60_000_000;
+    const TRADE_TIME_RANGE_MICROS: i64 = 2 * 60_000_000;
     // const ONE_MILLION: Decimal = dec!(1_000_000);
     // const TWENTY_THOUSAND: Decimal = dec!(20_000);
     const IRA: Decimal = dec!(1);
@@ -64,9 +65,9 @@ impl AvellanedaStoikov {
         let avellaneda_stoikov = Self {
             // 分别给与的长度
             depth_vec: FixedTimeRangeDeque::new(Self::MAX_TIME_RANGE_MICROS),
-            trade_vec: FixedTimeRangeDeque::new(Self::MAX_TIME_RANGE_MICROS),
             spread_vec: FixedTimeRangeDeque::new(Self::MAX_TIME_RANGE_MICROS),
-            flow_ratio_vec: FixedTimeRangeDeque::new(Self::MAX_TIME_RANGE_MICROS),
+            trade_vec: FixedTimeRangeDeque::new(Self::TRADE_TIME_RANGE_MICROS),
+            flow_ratio_vec: FixedTimeRangeDeque::new(Self::TRADE_TIME_RANGE_MICROS),
 
             mid_price: Default::default(),
             ask_price: Default::default(),
@@ -171,8 +172,14 @@ impl AvellanedaStoikov {
 
             if trade_iter.price > prev_trade_iter.price {
                 self.flow_in_value += trade_iter.value;
-            } else {
+            } else if trade_iter.price < prev_trade_iter.price {
                 self.flow_out_value += trade_iter.value;
+            } else {
+                if trade_iter.size > Decimal::ZERO {
+                    self.flow_in_value += trade_iter.value;
+                } else {
+                    self.flow_out_value += trade_iter.value;
+                }
             }
         }
 
@@ -284,7 +291,7 @@ impl AvellanedaStoikov {
     pub fn update_flow_ratio(&mut self) {
         if self.trade_vec.len() > 200 {
             // let prev_flow_ratio = self.flow_ratio;
-            self.flow_ratio = dec!(3.7) * (self.flow_in_value - self.flow_out_value) / (self.flow_out_value + self.flow_in_value);
+            self.flow_ratio = (self.flow_in_value - self.flow_out_value) / (self.flow_out_value + self.flow_in_value);
             self.flow_ratio_vec.push_back(self.flow_ratio);
 
             // self.flow_ratio_diff = if !prev_flow_ratio.is_zero() {