|
|
@@ -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();
|
|
|
// // 参考卖价
|