|
|
@@ -953,12 +953,15 @@ 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 = 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)
|
|
|
- // } else {
|
|
|
- // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
|
|
|
- // };
|
|
|
+ // let amount = 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)
|
|
|
+ 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)
|
|
|
+ };
|
|
|
+
|
|
|
|
|
|
// 下单价值判定
|
|
|
let amount_value = amount * target_buy_price;
|
|
|
@@ -977,18 +980,20 @@ impl Strategy {
|
|
|
info!("下单价值太小,要求:{},但是价格:{}, 数量:{}", self.min_amount_value, target_buy_price, amount);
|
|
|
}
|
|
|
}
|
|
|
- // 挂空单, TODO 如果下单之后没有收到仓位,岂不是会连续下几单?
|
|
|
+ // 挂空单
|
|
|
if self.post_side <= 0 && sell_value == Decimal::ZERO && predictor.optimal_ask_price > predictor.mid_price {
|
|
|
let mut target_sell_price = predictor.optimal_ask_price;
|
|
|
// 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 = utils::get_amount_by_min_amount_value(self.min_amount_value, target_sell_price, self.step_size);
|
|
|
- // let amount = if predictor.inventory > Decimal::ZERO {
|
|
|
- // utils::fix_amount(self.step_size * predictor.inventory.abs(), self.step_size)
|
|
|
- // } else {
|
|
|
- // utils::fix_amount(self.step_size * (predictor.level + Decimal::ONE), self.step_size)
|
|
|
- // };
|
|
|
+ // let amount = utils::get_amount_by_min_amount_value(self.min_amount_value, target_sell_price, self.step_size);
|
|
|
+ let amount = if predictor.inventory > Decimal::ZERO {
|
|
|
+ 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;
|