|
|
@@ -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);
|
|
|
}
|
|
|
}
|
|
|
}
|