Procházet zdrojové kódy

資金流、平倉距離調整。

skyfffire před 1 rokem
rodič
revize
abd6e54f3c
1 změnil soubory, kde provedl 17 přidání a 12 odebrání
  1. 17 12
      strategy/src/avellaneda_stoikov.rs

+ 17 - 12
strategy/src/avellaneda_stoikov.rs

@@ -160,19 +160,26 @@ impl AvellanedaStoikov {
         self.trade_vec.push_back(trade.clone());
         self.flow_in_value = Decimal::ZERO;
         self.flow_out_value = Decimal::ZERO;
-        for trade_iter in self.trade_vec.deque.iter() {
-            if trade_iter.size > Decimal::ZERO {
+        for (index, trade_iter) in self.trade_vec.deque.iter().enumerate() {
+            if index == 0 {
+                continue
+            }
+            let prev_trade_iter = self.trade_vec.get(index - 1).unwrap();
+
+            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;
+                }
             }
         }
 
-        if self.last_price != trade.price {
-            self.last_price = trade.price;
-        } else {
-            self.last_price = Decimal::ZERO;
-        }
+        self.last_price = trade.price;
         self.update_spread();
         self.processor().await;
     }
@@ -246,11 +253,9 @@ impl AvellanedaStoikov {
             }
 
             if self.ratio_edge > Decimal::ZERO {
-                self.ask_delta = self.ask_delta - self.ratio_edge.abs() * (dec!(1.618) - self.t_diff);
-                self.bid_delta = self.bid_delta + self.ratio_edge.abs() * dec!(25);
+                self.bid_delta = self.bid_delta + self.ratio_edge.abs() * dec!(25) * self.t_diff;
             } else if self.ratio_edge < Decimal::ZERO {
-                self.ask_delta = self.ask_delta + self.ratio_edge.abs() * dec!(25);
-                self.bid_delta = self.bid_delta - self.ratio_edge.abs() * (dec!(1.618) - self.t_diff);
+                self.ask_delta = self.ask_delta + self.ratio_edge.abs() * dec!(25) * self.t_diff;
             }
 
             if self.init_delta_plus.is_zero() {