Explorar o código

测试谨慎买入与谨慎卖出。

skyffire hai 1 ano
pai
achega
e23fea74a2
Modificáronse 1 ficheiros con 34 adicións e 5 borrados
  1. 34 5
      strategy/src/avellaneda_stoikov.rs

+ 34 - 5
strategy/src/avellaneda_stoikov.rs

@@ -301,12 +301,41 @@ impl AvellanedaStoikov {
                     self.bid_delta += self.sigma_square.abs() * dec!(10);
                 }
             } else {
+                // 正向资金流时做逆转
                 if self.ratio_edge > Decimal::ZERO {
-                    self.ask_delta -= self.sigma_square.abs() * (Decimal::TWO - self.t_diff);
-                    self.bid_delta += self.sigma_square.abs() * dec!(5);
-                } else if self.ratio_edge < Decimal::ZERO {
-                    self.ask_delta += self.sigma_square.abs() * dec!(5);
-                    self.bid_delta -= self.sigma_square.abs() * (Decimal::TWO - self.t_diff);
+                    // 持仓为正时尽快平多
+                    if self.inventory > Decimal::ZERO {
+                        self.ask_delta -= self.sigma_square.abs() * (Decimal::TWO - self.t_diff);
+                        self.bid_delta += self.sigma_square.abs() * dec!(5);
+                    }
+                    // 谨慎卖空,必须要100时才能卖出
+                    else if self.money_flow_index == Decimal::ONE_HUNDRED {
+                        self.ask_delta -= self.sigma_square.abs() * (Decimal::TWO - self.t_diff);
+                        self.bid_delta += self.sigma_square.abs() * dec!(5);
+                    }
+                    // 不是100谨慎操作
+                    else {
+                        self.ask_delta += self.sigma_square.abs() * dec!(5);
+                        self.bid_delta += self.sigma_square.abs() * dec!(5);
+                    }
+                }
+                // 负资金流时做逆转
+                else if self.ratio_edge < Decimal::ZERO {
+                    // 持仓为负时尽快平空
+                    if self.inventory < Decimal::ZERO {
+                        self.ask_delta += self.sigma_square.abs() * dec!(5);
+                        self.bid_delta -= self.sigma_square.abs() * (Decimal::TWO - self.t_diff);
+                    }
+                    // 谨慎买多,必须要0时才能买入
+                    else if self.money_flow_index == Decimal::ZERO {
+                        self.ask_delta += self.sigma_square.abs() * dec!(5);
+                        self.bid_delta -= self.sigma_square.abs() * (Decimal::TWO - self.t_diff);
+                    }
+                    // 不是0时谨慎操作
+                    else {
+                        self.ask_delta += self.sigma_square.abs() * dec!(5);
+                        self.bid_delta += self.sigma_square.abs() * dec!(5);
+                    }
                 } else {
                     self.ask_delta += self.sigma_square.abs() * dec!(5);
                     self.bid_delta += self.sigma_square.abs() * dec!(5);