|
|
@@ -826,35 +826,32 @@ impl Strategy {
|
|
|
pub fn _cancel_open(&self, command: &mut OrderCommand, local_orders: &HashMap<String, OrderInfo>) {
|
|
|
// debug!(?command);
|
|
|
// 挂单范围
|
|
|
- // let long_upper = self.open_dist[0];
|
|
|
- // let long_lower = self.open_dist[1];
|
|
|
- // let short_lower = self.open_dist[2];
|
|
|
- // let short_upper = self.open_dist[3];
|
|
|
+ let long_upper = self.open_dist[0];
|
|
|
+ let long_lower = self.open_dist[1];
|
|
|
+ let short_lower = self.open_dist[2];
|
|
|
+ let short_upper = self.open_dist[3];
|
|
|
|
|
|
for order_client_id in local_orders.keys() {
|
|
|
let order = local_orders.get(order_client_id).unwrap();
|
|
|
let key = format!("Cancel{}", *order_client_id);
|
|
|
let value = vec![order.client_id.clone(), order.order_id.clone()];
|
|
|
|
|
|
- if self.local_time - order.local_time > 100 {
|
|
|
+ // 开多订单处理
|
|
|
+ if order.side == "kd".to_string() {
|
|
|
+ // 在价格范围内时不处理
|
|
|
+ if (order.price <= long_upper && order.price >= long_lower) || self.local_time - order.local_time <= 100 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // debug!(?key, ?order.price, ?long_upper, ?long_lower);
|
|
|
+ command.cancel.insert(key, value);
|
|
|
+ } else if order.side == "kk".to_string() { // 开空订单处理
|
|
|
+ // 在价格范围内时不处理
|
|
|
+ if (order.price >= short_lower && order.price <= short_upper) || self.local_time - order.local_time <= 100 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // debug!(?key, ?order.price, ?short_lower, ?short_upper);
|
|
|
command.cancel.insert(key, value);
|
|
|
}
|
|
|
- // // 开多订单处理
|
|
|
- // if order.side == "kd".to_string() {
|
|
|
- // // 在价格范围内时不处理
|
|
|
- // if order.price <= long_upper && order.price >= long_lower {
|
|
|
- // continue
|
|
|
- // }
|
|
|
- // // debug!(?key, ?order.price, ?long_upper, ?long_lower);
|
|
|
- // command.cancel.insert(key, value);
|
|
|
- // } else if order.side == "kk".to_string() { // 开空订单处理
|
|
|
- // // 在价格范围内时不处理
|
|
|
- // if order.price >= short_lower && order.price <= short_upper {
|
|
|
- // continue
|
|
|
- // }
|
|
|
- // // debug!(?key, ?order.price, ?short_lower, ?short_upper);
|
|
|
- // command.cancel.insert(key, value);
|
|
|
- // }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -956,22 +953,22 @@ impl Strategy {
|
|
|
let mut target_buy_price = predictor.optimal_bid_price;
|
|
|
// target_buy_price = utils::clip(target_buy_price, self.bp * dec!(0.97), self.ap * dec!(1.0005));
|
|
|
target_buy_price = utils::fix_price(target_buy_price, self.tick_size);
|
|
|
- let amount = if predictor.inventory >= dec!(3) {
|
|
|
- utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_buy_price, self.step_size)
|
|
|
- } else {
|
|
|
- utils::get_amount_by_min_amount_value(self.min_amount_value, target_buy_price, self.step_size)
|
|
|
- };
|
|
|
- // let amount = if predictor.inventory < Decimal::ZERO {
|
|
|
- // // utils::fix_amount(self.step_size * predictor.inventory.abs(), self.step_size)
|
|
|
- // if predictor.level >= dec!(3) {
|
|
|
- // utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_buy_price, self.step_size)
|
|
|
- // } else {
|
|
|
- // utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.level, target_buy_price, self.step_size)
|
|
|
- // }
|
|
|
+ // let amount = if predictor.inventory <= dec!(-3) {
|
|
|
+ // utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_buy_price, self.step_size)
|
|
|
// } else {
|
|
|
- // // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
|
|
|
- // utils::get_amount_by_min_amount_value(self.min_amount_value * (predictor.level + Decimal::ONE), target_buy_price, self.step_size)
|
|
|
+ // utils::get_amount_by_min_amount_value(self.min_amount_value, target_buy_price, self.step_size)
|
|
|
// };
|
|
|
+ let amount = if predictor.inventory < Decimal::ZERO {
|
|
|
+ // utils::fix_amount(self.step_size * predictor.inventory.abs(), self.step_size)
|
|
|
+ if predictor.level >= dec!(3) {
|
|
|
+ utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_buy_price, self.step_size)
|
|
|
+ } else {
|
|
|
+ utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.level, target_buy_price, self.step_size)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
|
|
|
+ utils::get_amount_by_min_amount_value(self.min_amount_value * (predictor.level + Decimal::ONE), target_buy_price, self.step_size)
|
|
|
+ };
|
|
|
|
|
|
|
|
|
// 下单价值判定
|
|
|
@@ -997,22 +994,22 @@ impl Strategy {
|
|
|
// target_sell_price = utils::clip(target_sell_price, self.bp * dec!(0.9995), self.ap * dec!(1.03));
|
|
|
// 取消大小限制
|
|
|
target_sell_price = utils::fix_price(target_sell_price, self.tick_size);
|
|
|
- let amount = if predictor.inventory >= dec!(3) {
|
|
|
- utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_sell_price, self.step_size)
|
|
|
- } else {
|
|
|
- utils::get_amount_by_min_amount_value(self.min_amount_value, target_sell_price, self.step_size)
|
|
|
- };
|
|
|
- // let amount = if predictor.inventory > Decimal::ZERO {
|
|
|
- // if predictor.level >= dec!(3) {
|
|
|
- // utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_sell_price, self.step_size)
|
|
|
- // } else {
|
|
|
- // utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.level, target_sell_price, self.step_size)
|
|
|
- // }
|
|
|
- // // utils::fix_amount(self.step_size * predictor.inventory.abs(), self.step_size)
|
|
|
+ // let amount = if predictor.inventory >= dec!(3) {
|
|
|
+ // utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_sell_price, self.step_size)
|
|
|
// } else {
|
|
|
- // utils::get_amount_by_min_amount_value(self.min_amount_value * (predictor.level + Decimal::ONE), target_sell_price, self.step_size)
|
|
|
- // // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
|
|
|
+ // utils::get_amount_by_min_amount_value(self.min_amount_value, target_sell_price, self.step_size)
|
|
|
// };
|
|
|
+ let amount = if predictor.inventory > Decimal::ZERO {
|
|
|
+ if predictor.level >= dec!(3) {
|
|
|
+ utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.inventory.abs(), target_sell_price, self.step_size)
|
|
|
+ } else {
|
|
|
+ utils::get_amount_by_min_amount_value(self.min_amount_value * predictor.level, target_sell_price, self.step_size)
|
|
|
+ }
|
|
|
+ // utils::fix_amount(self.step_size * predictor.inventory.abs(), self.step_size)
|
|
|
+ } else {
|
|
|
+ utils::get_amount_by_min_amount_value(self.min_amount_value * (predictor.level + Decimal::ONE), target_sell_price, self.step_size)
|
|
|
+ // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
|
|
|
+ };
|
|
|
|
|
|
// 下单价值不能太大,也不能太小
|
|
|
let amount_value = amount * target_sell_price;
|