Преглед на файлове

Merge remote-tracking branch 'origin/avellaneda_stoikov_s1' into avellaneda_stoikov_s1

gepangpang преди 1 година
родител
ревизия
a1ee5e1419
променени са 1 файла, в които са добавени 46 реда и са изтрити 49 реда
  1. 46 49
      strategy/src/strategy.rs

+ 46 - 49
strategy/src/strategy.rs

@@ -826,35 +826,32 @@ impl Strategy {
     pub fn _cancel_open(&self, command: &mut OrderCommand, local_orders: &HashMap<String, OrderInfo>) {
         // debug!(?command);
         // 挂单范围
-        // let long_upper = self.open_dist[0];
-        // let long_lower = self.open_dist[1];
-        // let short_lower = self.open_dist[2];
-        // let short_upper = self.open_dist[3];
+        let long_upper = self.open_dist[0];
+        let long_lower = self.open_dist[1];
+        let short_lower = self.open_dist[2];
+        let short_upper = self.open_dist[3];
 
         for order_client_id in local_orders.keys() {
             let order = local_orders.get(order_client_id).unwrap();
             let key = format!("Cancel{}", *order_client_id);
             let value = vec![order.client_id.clone(), order.order_id.clone()];
 
-            if self.local_time - order.local_time > 100 {
+            // 开多订单处理
+            if order.side == "kd".to_string() {
+                // 在价格范围内时不处理
+                if (order.price <= long_upper && order.price >= long_lower) || self.local_time - order.local_time <= 100 {
+                    continue
+                }
+                // debug!(?key, ?order.price, ?long_upper, ?long_lower);
+                command.cancel.insert(key, value);
+            } else if order.side == "kk".to_string() { // 开空订单处理
+                // 在价格范围内时不处理
+                if (order.price >= short_lower && order.price <= short_upper) || self.local_time - order.local_time <= 100 {
+                    continue
+                }
+                // debug!(?key, ?order.price, ?short_lower, ?short_upper);
                 command.cancel.insert(key, value);
             }
-            // // 开多订单处理
-            // if order.side == "kd".to_string() {
-            //     // 在价格范围内时不处理
-            //     if order.price <= long_upper && order.price >= long_lower {
-            //         continue
-            //     }
-            //     // debug!(?key, ?order.price, ?long_upper, ?long_lower);
-            //     command.cancel.insert(key, value);
-            // } else if order.side == "kk".to_string() { // 开空订单处理
-            //     // 在价格范围内时不处理
-            //     if order.price >= short_lower && order.price <= short_upper {
-            //         continue
-            //     }
-            //     // debug!(?key, ?order.price, ?short_lower, ?short_upper);
-            //     command.cancel.insert(key, value);
-            // }
         }
     }
 
@@ -956,22 +953,22 @@ 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 = if predictor.inventory >= dec!(3) {
-                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, 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!(3) {
-            //         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)
-            //     }
+            // let amount = if predictor.inventory <= dec!(-3) {
+            //     utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), 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)
+            //     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!(3) {
+                    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)
+            };
 
 
             // 下单价值判定
@@ -997,22 +994,22 @@ 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 = if predictor.inventory >= dec!(3) {
-                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, target_sell_price, self.step_size)
-            };
-            // let amount = if predictor.inventory > Decimal::ZERO {
-            //     if predictor.level >= dec!(3) {
-            //         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)
+            // let amount = if predictor.inventory >= dec!(3) {
+            //     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 + Decimal::ONE), target_sell_price, self.step_size)
-            //     // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
+            //     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!(3) {
+                    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;