Преглед изворни кода

昨晚能賺錢的版本+馬丁

skyfffire пре 1 година
родитељ
комит
b43fa62b1e
2 измењених фајлова са 37 додато и 39 уклоњено
  1. 13 15
      strategy/src/avellaneda_stoikov.rs
  2. 24 24
      strategy/src/strategy.rs

+ 13 - 15
strategy/src/avellaneda_stoikov.rs

@@ -200,7 +200,7 @@ impl AvellanedaStoikov {
         // };
         // self.gamma.rescale(8);
 
-        self.gamma = dec!(0.732) * Self::IRA;
+        self.gamma = dec!(1) * Self::IRA;
     }
 
     pub fn update_kappa(&mut self) {
@@ -240,30 +240,28 @@ impl AvellanedaStoikov {
             self.ask_delta += pos_edge;
         }
 
-        let risk_factor = dec!(1.372);
-
         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.flow_ratio_short.abs() * risk_factor);
-                    self.bid_delta += self.base_delta * (self.flow_ratio_short.abs() * risk_factor);
+                    self.ask_delta -= self.base_delta * (self.flow_ratio_short.abs());
+                    self.bid_delta += self.base_delta * (self.flow_ratio_short.abs());
                 } else if self.flow_ratio_short < Decimal::ZERO && self.inventory < Decimal::ZERO {
-                    self.ask_delta += self.base_delta * (self.flow_ratio_short.abs() * risk_factor);
-                    self.bid_delta -= self.base_delta * (self.flow_ratio_short.abs() * risk_factor);
+                    self.ask_delta += self.base_delta * (self.flow_ratio_short.abs());
+                    self.bid_delta -= self.base_delta * (self.flow_ratio_short.abs());
                 } else {
-                    self.ask_delta += self.base_delta * risk_factor;
-                    self.bid_delta += self.base_delta * risk_factor * Decimal::TWO;
+                    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.flow_ratio_short.abs() * risk_factor);
-                    self.bid_delta += self.base_delta * (self.flow_ratio_short.abs() * risk_factor);
+                    self.ask_delta -= self.base_delta * (self.flow_ratio_short.abs());
+                    self.bid_delta += self.base_delta * (self.flow_ratio_short.abs());
                 } else if self.flow_ratio_short < Decimal::ZERO {
-                    self.ask_delta += self.base_delta * (self.flow_ratio_short.abs() * risk_factor);
-                    self.bid_delta -= self.base_delta * (self.flow_ratio_short.abs() * risk_factor);
+                    self.ask_delta += self.base_delta * (self.flow_ratio_short.abs());
+                    self.bid_delta -= self.base_delta * (self.flow_ratio_short.abs());
                 } else {
-                    self.ask_delta += self.base_delta * risk_factor * Decimal::TWO;
-                    self.bid_delta += self.base_delta * risk_factor;
+                    self.ask_delta += self.base_delta * dec!(2);
+                    self.bid_delta += self.base_delta * dec!(2);
                 }
             }
         } else {

+ 24 - 24
strategy/src/strategy.rs

@@ -956,18 +956,18 @@ impl Strategy {
             let mut target_buy_price = predictor.optimal_bid_price;
             // target_buy_price = utils::clip(target_buy_price, self.bp * dec!(0.97), self.ap * dec!(1.0005));
             target_buy_price = utils::fix_price(target_buy_price, self.tick_size);
-            let amount = utils::get_amount_by_min_amount_value(self.min_amount_value, target_buy_price, self.step_size);
-            // let amount = if predictor.inventory < Decimal::ZERO {
-            //     // utils::fix_amount(self.step_size * predictor.inventory.abs(), self.step_size)
-            //     if predictor.level >= dec!(4) {
-            //         utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_buy_price, self.step_size)
-            //     } else {
-            //         utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.level, target_buy_price, self.step_size)
-            //     }
-            // } else {
-            //     // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
-            //     utils::get_amount_by_min_amount_value(self.min_amount_value * (predictor.level + Decimal::ONE), target_buy_price, self.step_size)
-            // };
+            // let amount = utils::get_amount_by_min_amount_value(self.min_amount_value, target_buy_price, self.step_size);
+            let amount = if predictor.inventory < Decimal::ZERO {
+                // utils::fix_amount(self.step_size * predictor.inventory.abs(), self.step_size)
+                if predictor.level >= dec!(4) {
+                    utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_buy_price, self.step_size)
+                } else {
+                    utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.level, target_buy_price, self.step_size)
+                }
+            } else {
+                // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
+                utils::get_amount_by_min_amount_value(self.min_amount_value * (predictor.level + Decimal::ONE), target_buy_price, self.step_size)
+            };
 
 
             // 下单价值判定
@@ -993,18 +993,18 @@ impl Strategy {
             // target_sell_price = utils::clip(target_sell_price, self.bp * dec!(0.9995), self.ap * dec!(1.03));
             // 取消大小限制
             target_sell_price = utils::fix_price(target_sell_price, self.tick_size);
-            let amount = utils::get_amount_by_min_amount_value(self.min_amount_value, target_sell_price, self.step_size);
-            // let amount = if predictor.inventory > Decimal::ZERO {
-            //     if predictor.level >= dec!(4) {
-            //         utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_sell_price, self.step_size)
-            //     } else {
-            //         utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.level, target_sell_price, self.step_size)
-            //     }
-            //     // utils::fix_amount(self.step_size * predictor.inventory.abs(), self.step_size)
-            // } else {
-            //     utils::get_amount_by_min_amount_value(self.min_amount_value * (predictor.level + Decimal::ONE), target_sell_price, self.step_size)
-            //     // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
-            // };
+            // let amount = utils::get_amount_by_min_amount_value(self.min_amount_value, target_sell_price, self.step_size);
+            let amount = if predictor.inventory > Decimal::ZERO {
+                if predictor.level >= dec!(4) {
+                    utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_sell_price, self.step_size)
+                } else {
+                    utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.level, target_sell_price, self.step_size)
+                }
+                // utils::fix_amount(self.step_size * predictor.inventory.abs(), self.step_size)
+            } else {
+                utils::get_amount_by_min_amount_value(self.min_amount_value * (predictor.level + Decimal::ONE), target_sell_price, self.step_size)
+                // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
+            };
 
             // 下单价值不能太大,也不能太小
             let amount_value = amount * target_sell_price;