|
|
@@ -103,6 +103,9 @@ pub struct Strategy {
|
|
|
pub post_side: i64, // 交易方向
|
|
|
pub trade_vol_24h_w: Decimal, // 24小时成交额(单位:万)
|
|
|
pub grid: Decimal, // 网格数量
|
|
|
+
|
|
|
+ // 订单流相关
|
|
|
+ pub side: String, // 当前主动性方向
|
|
|
}
|
|
|
|
|
|
impl Strategy {
|
|
|
@@ -194,6 +197,7 @@ impl Strategy {
|
|
|
post_side: 0,
|
|
|
trade_vol_24h_w: Default::default(),
|
|
|
grid: Decimal::from(params.grid),
|
|
|
+ side: "normal".to_string(),
|
|
|
};
|
|
|
|
|
|
// 交易名字
|
|
|
@@ -340,6 +344,8 @@ impl Strategy {
|
|
|
// debug!(?max_pos_rate, ?self.max_pos_rate);
|
|
|
}
|
|
|
|
|
|
+ self.side = trader_msg.side.clone();
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -413,7 +419,7 @@ impl Strategy {
|
|
|
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.post_side, self.ref_name[self.ref_index], self.maker_mode).as_str());
|
|
|
+ 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!("[挂单列表,共{:?}单, ", o_num).as_str());
|
|
|
for (_, order) in &self.local_orders {
|
|
|
let mut order_value = order.amount * self.mp;
|
|
|
@@ -587,8 +593,10 @@ impl Strategy {
|
|
|
|
|
|
// 判断是否在本地挂单表中
|
|
|
if let Some(order) = order_some {
|
|
|
- // 如果订单创建时间大于100ms,才能有撤单操作
|
|
|
- if self.local_time - order.create_time < 100 {
|
|
|
+ let is_side_equals = (order.side == "kk" && self.side == "short") || (order.side == "kd" && self.side == "long");
|
|
|
+
|
|
|
+ // 如果订单创建时间大于100ms,或有相反方向订单,才能有撤单操作
|
|
|
+ if is_side_equals || self.local_time - order.create_time < 100 {
|
|
|
need_limit_cancel = false;
|
|
|
}
|
|
|
}
|
|
|
@@ -1000,19 +1008,21 @@ impl Strategy {
|
|
|
// 开多订单处理
|
|
|
if order.side == "kd".to_string() {
|
|
|
// 在价格范围内时不处理
|
|
|
- if order.price <= long_upper && order.price >= long_lower {
|
|
|
+ if order.price <= long_upper && order.price >= long_lower && self.side == "long".to_string() {
|
|
|
continue
|
|
|
}
|
|
|
// debug!(?key, ?order.price, ?long_upper, ?long_lower);
|
|
|
+ info!("kd-{}-{}", self.side, key);
|
|
|
command.cancel.insert(key.clone(), value.clone());
|
|
|
}
|
|
|
|
|
|
// 开空订单处理
|
|
|
if order.side == "kk".to_string() {
|
|
|
// 在价格范围内时不处理
|
|
|
- if order.price >= short_lower && order.price <= short_upper {
|
|
|
+ if order.price >= short_lower && order.price <= short_upper && self.side == "short".to_string() {
|
|
|
continue
|
|
|
}
|
|
|
+ info!("kk-{}-{}", self.side, key);
|
|
|
// debug!(?key, ?order.price, ?short_lower, ?short_upper);
|
|
|
command.cancel.insert(key.clone(), value.clone());
|
|
|
}
|
|
|
@@ -1120,7 +1130,7 @@ impl Strategy {
|
|
|
|
|
|
// debug!(?self.post_side);
|
|
|
// 挂多单
|
|
|
- if self.post_side >= 0 {
|
|
|
+ if self.post_side >= 0 && self.side == "long".to_string() {
|
|
|
// debug!(?buy_price_list);
|
|
|
if buy_price_list.len() == 0 {
|
|
|
let mut target_buy_price = (long_upper + long_lower) * dec!(0.5);
|
|
|
@@ -1147,7 +1157,7 @@ impl Strategy {
|
|
|
}
|
|
|
}
|
|
|
// 挂空单
|
|
|
- if self.post_side <= 0 {
|
|
|
+ if self.post_side <= 0 && self.side == "short".to_string() {
|
|
|
// debug!(?sell_price_list);
|
|
|
if sell_price_list.len() == 0 {
|
|
|
let mut target_sell_price = (short_lower + short_upper) * dec!(0.5);
|
|
|
@@ -1225,8 +1235,7 @@ impl Strategy {
|
|
|
self._refresh_request_limit(); // 刷新频率限制
|
|
|
self._update_request_num(&mut command); // 统计刷新频率
|
|
|
|
|
|
-
|
|
|
- if command.limits_open.len() > 0 || command.limits_close.len() > 0{
|
|
|
+ if command.limits_open.len() > 0 || command.limits_close.len() > 0 {
|
|
|
let time = chrono::Utc::now().timestamp_millis();
|
|
|
let name = self.params.account_name.clone();
|
|
|
// 参考卖价
|
|
|
@@ -1242,7 +1251,6 @@ impl Strategy {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-
|
|
|
return command;
|
|
|
}
|
|
|
}
|