Ver código fonte

止损加了限时,但是还没有解决到bug。以后有机会再查了。

skyffire 1 ano atrás
pai
commit
e41e446a33
1 arquivos alterados com 19 adições e 1 exclusões
  1. 19 1
      strategy/src/strategy.rs

+ 19 - 1
strategy/src/strategy.rs

@@ -28,6 +28,8 @@ pub struct Strategy {
     pub _check_local_orders_time: i64,                              // 上次查单时间
     pub _check_local_orders_interval: i64,                          // 查单间距,原文是秒级,这里改成毫秒级
     pub in_cancel: HashMap<String, i64>,                            // 撤单队列
+    pub in_po_cancel: HashMap<String, i64>,                         // 撤销止损单对列
+    pub cancel_po_inerval: i64,                                     // 取消止损单发出后的等待时延
     pub cancel_wait_interval: i64,                                  // 取消等待时延
     pub in_check: HashMap<String, i64>,                             // 查单队列
     pub check_wait_interval: i64,                                   // 检测时延
@@ -128,7 +130,9 @@ impl Strategy {
             request_over_log_time: 0,
             _print_interval: 5 * 1000,
             in_cancel: Default::default(),
-            cancel_wait_interval: (0.2 * 1000f64).to_i64().unwrap(),
+            in_po_cancel: Default::default(),
+            cancel_po_inerval: 2000,
+            cancel_wait_interval: 200,
             in_check: Default::default(),
             check_wait_interval: 10 * 1000,
             _check_local_orders_time: 0,
@@ -1241,8 +1245,15 @@ impl Strategy {
                     continue
                 }
 
+                // 刚发出止损指令的订单,就不慌再发止损指令了
+                if self.in_po_cancel.contains_key(id.as_str())
+                    && self.local_time - self.in_po_cancel.get(id.as_str()).unwrap() < self.cancel_po_inerval {
+                    continue
+                }
+
                 // 如果在取消的订单存在对应的止损单
                 command.cancel_price_order.insert(id.clone(), local_price_orders[id].clone());
+                self.in_po_cancel.insert(id.clone(), self.local_time);
             }
         }
 
@@ -1257,9 +1268,16 @@ impl Strategy {
                 }
             }
 
+            // 刚发出止损指令的订单,就不慌再发止损指令了
+            if self.in_po_cancel.contains_key(id_x.as_str())
+                && self.local_time - self.in_po_cancel.get(id_x.as_str()).unwrap() < self.cancel_po_inerval {
+                continue
+            }
+
             // 如果本地订单不存在这个止损单,说明此止损单不合法
             if !is_exists {
                 command.cancel_price_order.insert(id_x.clone(), local_price_orders[id_x].clone());
+                self.in_po_cancel.insert(id_x.clone(), self.local_time);
             }
         }
     }