فهرست منبع

ratio_flow update

skyfffire 1 سال پیش
والد
کامیت
b5da1ebb89
1فایلهای تغییر یافته به همراه19 افزوده شده و 17 حذف شده
  1. 19 17
      strategy/src/avellaneda_stoikov.rs

+ 19 - 17
strategy/src/avellaneda_stoikov.rs

@@ -242,26 +242,26 @@ impl AvellanedaStoikov {
 
         if !self.flow_ratio_long.is_zero() {
             if self.flow_ratio_long < Decimal::ZERO {
-                if self.flow_ratio_short > Decimal::ZERO {
-                    self.ask_delta -= self.base_delta;
-                    self.bid_delta += self.base_delta;
+                if self.flow_ratio_short > Decimal::ZERO || self.inventory > Decimal::ZERO {
+                    self.ask_delta -= self.base_delta * (self.flow_ratio_short.abs() * Decimal::PI);
+                    self.bid_delta += self.base_delta * (self.flow_ratio_short.abs() * Decimal::PI);
                 } else if self.flow_ratio_short < Decimal::ZERO && self.inventory < Decimal::ZERO {
-                    self.ask_delta += self.base_delta;
-                    self.bid_delta -= self.base_delta;
+                    self.ask_delta += self.base_delta * (self.flow_ratio_short.abs() * Decimal::PI);
+                    self.bid_delta -= self.base_delta * (self.flow_ratio_short.abs() * Decimal::PI);
                 } else {
-                    self.ask_delta += self.base_delta;
-                    self.bid_delta += self.base_delta;
+                    self.ask_delta += self.base_delta * dec!(2);
+                    self.bid_delta += self.base_delta * dec!(2);
                 }
             } else if self.flow_ratio_long > Decimal::ZERO {
                 if self.flow_ratio_short > Decimal::ZERO && self.inventory > Decimal::ZERO {
-                    self.ask_delta -= self.base_delta;
-                    self.bid_delta += self.base_delta;
-                } else if self.flow_ratio_short < Decimal::ZERO {
-                    self.ask_delta += self.base_delta;
-                    self.bid_delta -= self.base_delta;
+                    self.ask_delta -= self.base_delta * (self.flow_ratio_short.abs() * Decimal::PI);
+                    self.bid_delta += self.base_delta * (self.flow_ratio_short.abs() * Decimal::PI);
+                } else if self.flow_ratio_short < Decimal::ZERO || self.inventory < Decimal::ZERO {
+                    self.ask_delta += self.base_delta * (self.flow_ratio_short.abs() * Decimal::PI);
+                    self.bid_delta -= self.base_delta * (self.flow_ratio_short.abs() * Decimal::PI);
                 } else {
-                    self.ask_delta += self.base_delta;
-                    self.bid_delta += self.base_delta;
+                    self.ask_delta += self.base_delta * dec!(2);
+                    self.bid_delta += self.base_delta * dec!(2);
                 }
             }
         } else {
@@ -288,7 +288,7 @@ impl AvellanedaStoikov {
         }
     }
 
-    fn calc_flow_ratio(prev_flow_ratio: &Decimal, min_volume: &Decimal, trades: &mut FixedTimeRangeDeque<Trade>) -> Decimal {
+    fn calc_flow_ratio(_prev_flow_ratio: &Decimal, min_volume: &Decimal, trades: &mut FixedTimeRangeDeque<Trade>) -> Decimal {
         // 使用EMA來更新資金流,確保平滑性
         // let a = Decimal::TWO / dec!(50);
 
@@ -302,9 +302,11 @@ impl AvellanedaStoikov {
             let prev_trade_iter = trades.deque.get(index - 1).unwrap();
             let trade = trade_iter;
             if trade.price > prev_trade_iter.price {
-                flow_in_value += trade.value;
+                // flow_in_value += Decimal::ONE * (prev_trade_iter.price - trade.price).abs();
+                flow_in_value += Decimal::ONE;
             } else if trade.price < prev_trade_iter.price {
-                flow_out_value += trade.value;
+                // flow_out_value += Decimal::ONE * (prev_trade_iter.price - trade.price).abs();
+                flow_out_value += Decimal::ONE;
             } else {
                 // if trade.size > Decimal::ZERO {
                 //     flow_in_value += trade.value;