|
|
@@ -229,8 +229,18 @@ impl Predictor {
|
|
|
self.mid_price_time_vec.push_back(self.mid_price);
|
|
|
self.mid_price_long_time_vec.push_back(self.mid_price);
|
|
|
self.mid_price_trend_time_vec.push_back(self.mid_price);
|
|
|
- let (rate, _, _) = Self::get_real_rate(&self.mid_price_trend_time_vec);
|
|
|
- self.mid_price_trend_rate = rate;
|
|
|
+ self.mid_price_trend_rate = if self.mid_price_trend_time_vec.len() > 1 {
|
|
|
+ let first = self.mid_price_trend_time_vec.deque.front().unwrap();
|
|
|
+ let last = self.mid_price_trend_time_vec.deque.back().unwrap();
|
|
|
+
|
|
|
+ let mut rst = (last - first) / first;
|
|
|
+
|
|
|
+ rst.rescale(8);
|
|
|
+
|
|
|
+ rst
|
|
|
+ } else {
|
|
|
+ Decimal::ZERO
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
self.update_fair_price(depth, index).await;
|
|
|
@@ -282,7 +292,9 @@ impl Predictor {
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
- self.force_order_value = force_order.value.clone();
|
|
|
+ if force_order.value.abs() > self.force_order_value || self.force_order_value * force_order.value < Decimal::ZERO {
|
|
|
+ self.force_order_value = force_order.value;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
pub async fn update_level(&mut self) {
|
|
|
@@ -314,12 +326,12 @@ impl Predictor {
|
|
|
|
|
|
if prev_inventory != self.inventory && prev_inventory.is_zero() {
|
|
|
self.prev_trade_time = Utc::now().timestamp_micros();
|
|
|
- self.force_order_value = Decimal::ZERO;
|
|
|
}
|
|
|
|
|
|
// 重置fair数据,用于重新计算幅度
|
|
|
if prev_inventory != self.inventory {
|
|
|
self.fair_price_time_vec.deque.clear();
|
|
|
+ self.force_order_value = Decimal::ZERO;
|
|
|
}
|
|
|
|
|
|
// 重置资金流计算
|
|
|
@@ -442,8 +454,8 @@ impl Predictor {
|
|
|
// let is_open_long = self.spread_sma_1000 - self.spread_sma > self.params.open && self.fair_price > self.mid_price;
|
|
|
// let is_open_short = self.spread_sma_1000 - self.spread_sma < self.params.open * Decimal::NEGATIVE_ONE && self.fair_price < self.mid_price;
|
|
|
// 可能是接针
|
|
|
- let is_open_long = self.mid_price_trend_rate < Decimal::ZERO && self.force_order_value < -self.params.open;
|
|
|
- let is_open_short = self.mid_price_trend_rate > Decimal::ZERO && self.force_order_value > self.params.open;
|
|
|
+ let is_open_long = self.mid_price_trend_rate < Decimal::ZERO && self.force_order_value < -self.params.open && self.inventory.is_zero();
|
|
|
+ let is_open_short = self.mid_price_trend_rate > Decimal::ZERO && self.force_order_value > self.params.open && self.inventory.is_zero();
|
|
|
let is_close_long = self.inventory > Decimal::ZERO && self.mid_price_trend_rate > Decimal::ZERO;
|
|
|
let is_close_short = self.inventory < Decimal::ZERO && self.mid_price_trend_rate < Decimal::ZERO;
|
|
|
|
|
|
@@ -555,18 +567,18 @@ impl Predictor {
|
|
|
let fair_price = Self::DONT_VIEW;
|
|
|
|
|
|
let spread = self.mid_price_trend_rate;
|
|
|
- let spread_max = self.fair_price_vec[1] / self.fair_price_vec[0];
|
|
|
- let spread_min = self.fair_price / self.mid_price;
|
|
|
+ let spread_max = Decimal::ZERO;
|
|
|
+ let spread_min = Self::DONT_VIEW;
|
|
|
|
|
|
let optimal_ask_price = self.optimal_ask_price;
|
|
|
let optimal_bid_price = self.optimal_bid_price;
|
|
|
|
|
|
let inventory = self.inventory;
|
|
|
|
|
|
- let sigma_square: Decimal = self.force_order_value;
|
|
|
+ let sigma_square = self.trades_volume_short;
|
|
|
// let sigma_square = self.error_rate;
|
|
|
|
|
|
- let gamma = self.trades_volume_short;
|
|
|
+ let gamma = self.force_order_value;
|
|
|
let kappa = Decimal::ZERO;
|
|
|
|
|
|
let flow_ratio = Decimal::ZERO;
|