skyffire 9 hónapja
szülő
commit
4ecd41461a
1 módosított fájl, 33 hozzáadás és 23 törlés
  1. 33 23
      strategy/src/predictor.rs

+ 33 - 23
strategy/src/predictor.rs

@@ -269,6 +269,35 @@ impl Predictor {
 
     // side, pk,pd从HashMap移除,kd,kk添加到HashMap
     pub async fn on_order(&mut self, side: String, amount: Decimal) {
+        let prev_inventory = self.inventory;
+        self.inventory = match side.as_str() {
+            "kk" => {
+                self.inventory - Decimal::ONE
+            }
+            "pd" => {
+                self.inventory - Decimal::ONE
+            }
+            "kd" => {
+                self.inventory + Decimal::ONE
+            }
+            "pk" => {
+                self.inventory + Decimal::ONE
+            }
+            &_ => {
+                panic!("不认识的order方向:{}", side);
+            }
+        };
+
+        // 重置一些计算
+        if prev_inventory != self.inventory && self.inventory.is_zero() {
+            self.profit_point_vec.clear();
+            self.profit_point = Decimal::ZERO;
+            self.profit_point_ema = Decimal::ZERO;
+
+            self.prev_trade_force_order_value = Decimal::ZERO;
+            self.prev_trade_price = Decimal::ZERO;
+        }
+
         if side == "kk" || side == "kd" {
             let now = Decimal::from(Utc::now().timestamp_millis());
 
@@ -313,28 +342,8 @@ impl Predictor {
             return;
         }
 
-        let prev_inventory = self.inventory;
         self.pos_amount = pos_amount.clone();
         self.pos_avg_price = pos_avg_price.clone();
-        self.inventory = (pos_amount / (self.one_grid_order_value / self.mid_price)).round();
-        // 小于1但不为0的情况,需要平完
-        if self.inventory.is_zero() && !pos_amount.is_zero() {
-            self.inventory = if pos_amount > &Decimal::ZERO {
-                Decimal::ONE
-            } else {
-                Decimal::NEGATIVE_ONE
-            };
-        }
-
-        // 重置一些计算
-        if prev_inventory != self.inventory && self.inventory.is_zero() {
-            self.profit_point_vec.clear();
-            self.profit_point = Decimal::ZERO;
-            self.profit_point_ema = Decimal::ZERO;
-
-            self.prev_trade_force_order_value = Decimal::ZERO;
-            self.prev_trade_price = Decimal::ZERO;
-        }
 
         self.update_level().await;
         self.processor(true).await;
@@ -441,14 +450,15 @@ impl Predictor {
             }
         }
 
-        // 可能是接针
         let is_open_long = self.force_order_value < -self.params.open
-            && self.mid_price < self.prev_trade_price * dec!(0.999)
+            && (self.mid_price < self.prev_trade_price * dec!(0.999) || self.prev_trade_price.is_zero())
             && self.inventory < self.params.grid
+            && now - self.prev_trade_time > dec!(30)
             && self.bid_delta == dec!(-2);
         let is_open_short = self.force_order_value > self.params.open
-            && self.mid_price > self.prev_trade_price * dec!(1.001)
+            && (self.mid_price > self.prev_trade_price * dec!(1.001) || self.prev_trade_price.is_zero())
             && self.inventory > -self.params.grid
+            && now - self.prev_trade_time > dec!(30)
             && self.ask_delta == dec!(-2);
 
         if is_open_long {