|
|
@@ -269,6 +269,35 @@ impl Predictor {
|
|
|
|
|
|
// side, pk,pd从HashMap移除,kd,kk添加到HashMap
|
|
|
pub async fn on_order(&mut self, side: String, amount: Decimal) {
|
|
|
+ let prev_inventory = self.inventory;
|
|
|
+ self.inventory = match side.as_str() {
|
|
|
+ "kk" => {
|
|
|
+ self.inventory - Decimal::ONE
|
|
|
+ }
|
|
|
+ "pd" => {
|
|
|
+ self.inventory - Decimal::ONE
|
|
|
+ }
|
|
|
+ "kd" => {
|
|
|
+ self.inventory + Decimal::ONE
|
|
|
+ }
|
|
|
+ "pk" => {
|
|
|
+ self.inventory + Decimal::ONE
|
|
|
+ }
|
|
|
+ &_ => {
|
|
|
+ panic!("不认识的order方向:{}", side);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ // 重置一些计算
|
|
|
+ if prev_inventory != self.inventory && self.inventory.is_zero() {
|
|
|
+ self.profit_point_vec.clear();
|
|
|
+ self.profit_point = Decimal::ZERO;
|
|
|
+ self.profit_point_ema = Decimal::ZERO;
|
|
|
+
|
|
|
+ self.prev_trade_force_order_value = Decimal::ZERO;
|
|
|
+ self.prev_trade_price = Decimal::ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
if side == "kk" || side == "kd" {
|
|
|
let now = Decimal::from(Utc::now().timestamp_millis());
|
|
|
|
|
|
@@ -313,28 +342,8 @@ impl Predictor {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- let prev_inventory = self.inventory;
|
|
|
self.pos_amount = pos_amount.clone();
|
|
|
self.pos_avg_price = pos_avg_price.clone();
|
|
|
- self.inventory = (pos_amount / (self.one_grid_order_value / self.mid_price)).round();
|
|
|
- // 小于1但不为0的情况,需要平完
|
|
|
- if self.inventory.is_zero() && !pos_amount.is_zero() {
|
|
|
- self.inventory = if pos_amount > &Decimal::ZERO {
|
|
|
- Decimal::ONE
|
|
|
- } else {
|
|
|
- Decimal::NEGATIVE_ONE
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
- // 重置一些计算
|
|
|
- if prev_inventory != self.inventory && self.inventory.is_zero() {
|
|
|
- self.profit_point_vec.clear();
|
|
|
- self.profit_point = Decimal::ZERO;
|
|
|
- self.profit_point_ema = Decimal::ZERO;
|
|
|
-
|
|
|
- self.prev_trade_force_order_value = Decimal::ZERO;
|
|
|
- self.prev_trade_price = Decimal::ZERO;
|
|
|
- }
|
|
|
|
|
|
self.update_level().await;
|
|
|
self.processor(true).await;
|
|
|
@@ -441,14 +450,15 @@ impl Predictor {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 可能是接针
|
|
|
let is_open_long = self.force_order_value < -self.params.open
|
|
|
- && self.mid_price < self.prev_trade_price * dec!(0.999)
|
|
|
+ && (self.mid_price < self.prev_trade_price * dec!(0.999) || self.prev_trade_price.is_zero())
|
|
|
&& self.inventory < self.params.grid
|
|
|
+ && now - self.prev_trade_time > dec!(30)
|
|
|
&& self.bid_delta == dec!(-2);
|
|
|
let is_open_short = self.force_order_value > self.params.open
|
|
|
- && self.mid_price > self.prev_trade_price * dec!(1.001)
|
|
|
+ && (self.mid_price > self.prev_trade_price * dec!(1.001) || self.prev_trade_price.is_zero())
|
|
|
&& self.inventory > -self.params.grid
|
|
|
+ && now - self.prev_trade_time > dec!(30)
|
|
|
&& self.ask_delta == dec!(-2);
|
|
|
|
|
|
if is_open_long {
|