|
|
@@ -335,11 +335,14 @@ impl Predictor {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- pub async fn update_delta(&mut self) {
|
|
|
+ pub async fn update_delta(&mut self) -> bool {
|
|
|
if self.mid_price.is_zero() {
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
+ let prev_bid_delta = self.bid_delta;
|
|
|
+ let prev_ask_delta = self.ask_delta;
|
|
|
+
|
|
|
let is_close_long = self.inventory > Decimal::ZERO && (self.fair_price < self.mid_price * (Decimal::ONE + self.params.close));
|
|
|
let is_close_short = self.inventory < Decimal::ZERO && (self.fair_price > self.mid_price * (Decimal::ONE - self.params.close));
|
|
|
|
|
|
@@ -376,6 +379,8 @@ impl Predictor {
|
|
|
|
|
|
self.optimal_ask_price.rescale(self.mid_price.scale());
|
|
|
self.optimal_bid_price.rescale(self.mid_price.scale());
|
|
|
+
|
|
|
+ prev_ask_delta != self.ask_delta || prev_bid_delta != self.bid_delta
|
|
|
}
|
|
|
|
|
|
pub fn check_ready(&mut self) {
|
|
|
@@ -453,7 +458,7 @@ impl Predictor {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- self.update_delta().await;
|
|
|
+ let is_delta_changed = self.update_delta().await;
|
|
|
|
|
|
// let cci_arc = self.cci_arc.clone();
|
|
|
let now = data_time;
|
|
|
@@ -489,11 +494,11 @@ impl Predictor {
|
|
|
|
|
|
let flow_ratio = Decimal::ZERO;
|
|
|
|
|
|
- let need_append = now - self.prev_insert_time > dec!(100);
|
|
|
- if !need_append && !is_hard_update {
|
|
|
+ let is_time_over_update = now - self.prev_insert_time > dec!(500);
|
|
|
+ if !is_time_over_update && !is_hard_update && !is_delta_changed {
|
|
|
return;
|
|
|
}
|
|
|
- if !is_hard_update {
|
|
|
+ if is_time_over_update {
|
|
|
self.prev_insert_time = Decimal::from(Utc::now().timestamp_millis())
|
|
|
}
|
|
|
let pos_avg_price = self.pos_avg_price;
|