浏览代码

低频撤单已经合并到主分支。

skyffire 1 年之前
父节点
当前提交
6be09d1708
共有 1 个文件被更改,包括 18 次插入6 次删除
  1. 18 6
      strategy/src/strategy.rs

+ 18 - 6
strategy/src/strategy.rs

@@ -105,8 +105,9 @@ pub struct Strategy {
     pub trade_vol_24h_w: Decimal,                                   // 24小时成交额(单位:万)
     pub grid: Decimal,                                              // 网格数量
 
-    // 订单流相关
-    pub side: String,                                               // 当前主动性方向
+    // 速度限制,至少0.5秒才取消订单
+    pub prev_place_order_timestamp: i64,                            // 上次挂单的时间
+    pub min_cancel_interval_mills: i64,                             // 至少要挂这么久才允许撤销
 }
 
 impl Strategy {
@@ -198,7 +199,8 @@ impl Strategy {
             post_side: 0,
             trade_vol_24h_w: Default::default(),
             grid: Decimal::from(params.grid),
-            side: "normal".to_string(),
+            prev_place_order_timestamp: 0,
+            min_cancel_interval_mills: 500,
         };
 
         // 交易名字
@@ -417,8 +419,8 @@ impl Strategy {
         msg.push_str(format!("[推算利润 {:?}, 盈亏 {:?}%, 做多杠杆 {:?}%, 做多浮盈 {:?}%, 做空杠杆 {:?}%, 做空浮盈 {:?}%], ",
                              self.local_profit, self.profit, long_pos_leverage, self.long_pos_bias, short_pos_leverage, self.short_pos_bias).as_str());
         msg.push_str(format!("[请求 {:?}, 上限{:?}次/10秒], ", self._req_num_per_window, self.limit_order_requests_num).as_str());
-        msg.push_str(format!("[当前参数, 开仓 {:?}, 平仓 {:?}, 方向 {:?}, 参考 {:?}, 模式 {:?}], ",
-                             self.trade_open_dist, self.trade_close_dist, self.side, self.ref_name[self.ref_index], self.maker_mode).as_str());
+        msg.push_str(format!("[当前参数, 开仓 {:?}, 平仓 {:?}, 参考 {:?}, 模式 {:?}], ",
+                             self.trade_open_dist, self.trade_close_dist, self.ref_name[self.ref_index], self.maker_mode).as_str());
         msg.push_str(format!("[挂单列表,共{:?}单, ", o_num).as_str());
         for (_, order) in &self.local_orders {
             let mut order_value = order.amount * self.mp;
@@ -510,7 +512,7 @@ impl Strategy {
         // debug!(?mode, ?buy_start, ?sell_start, ?mp);
 
         // 开仓相关
-        avoid = min(dec!(0.001), open * dec!(0.05));
+        avoid = min(dec!(0.002), open * dec!(0.1));
         // 持仓偏移
         let buy_shift = Decimal::ONE + pos_rate[0] * grid;
         let sell_shift = Decimal::ONE + pos_rate[1] * grid;
@@ -1022,6 +1024,11 @@ impl Strategy {
     // 生成取消订单的指令
     // #[instrument(skip(self, command), level="TRACE")]
     pub fn _cancel_open(&self, command: &mut OrderCommand, local_orders: &HashMap<String, OrderInfo>) {
+        // 强制性时间间隔
+        if self.prev_place_order_timestamp + self.min_cancel_interval_mills > Utc::now().timestamp_millis() {
+            return;
+        }
+
         // debug!(?command);
         // 挂单范围
         let long_upper = self.open_dist[0];
@@ -1280,6 +1287,11 @@ impl Strategy {
         self._refresh_request_limit();                              // 刷新频率限制
         self._update_request_num(&mut command);                     // 统计刷新频率
 
+        // 如果提交了订单,则更新最后提交时间
+        if command.limits_open.len() != 0 {
+            self.prev_place_order_timestamp = Utc::now().timestamp_millis();
+        }
+
         // if command.limits_open.len() != 0 || command.limits_close.len() != 0 {
         //     let name = self.params.account_name.clone();
         //     // 参考卖价