|
|
@@ -57,6 +57,7 @@ pub struct Predictor {
|
|
|
pub fair_price: Decimal, // 预定价格
|
|
|
pub fair_price_when_ordering: Decimal, // 下单时的预定价格
|
|
|
pub price_times_avg: Decimal, // 公平所与做市所的价格倍率的平均值
|
|
|
+ pub is_regressed: bool, // 做市所的价格是否已经回归
|
|
|
|
|
|
pub cci_arc: Arc<Mutex<CentralControlInfo>>, // 中控信息
|
|
|
|
|
|
@@ -163,6 +164,7 @@ impl Predictor {
|
|
|
fair_price_when_ordering: Default::default(),
|
|
|
|
|
|
price_times_avg: Default::default(),
|
|
|
+ is_regressed: false,
|
|
|
cci_arc,
|
|
|
|
|
|
is_ready: false,
|
|
|
@@ -371,6 +373,7 @@ impl Predictor {
|
|
|
if prev_inventory != self.inventory && prev_inventory.is_zero() {
|
|
|
self.prev_trade_time = Utc::now().timestamp_micros();
|
|
|
self.close_price = self.fair_price_when_ordering;
|
|
|
+ self.is_regressed = false;
|
|
|
}
|
|
|
|
|
|
self.update_level().await;
|
|
|
@@ -436,6 +439,13 @@ impl Predictor {
|
|
|
let fair_price_part1 = (self.fair_price_vec[1] / self.price_times_avg) * dec!(0.8);
|
|
|
self.fair_price = fair_price_part0 + fair_price_part1;
|
|
|
}
|
|
|
+
|
|
|
+ // 判断价格是否回归
|
|
|
+ if !self.is_regressed && self.inventory > Decimal::ZERO && self.fair_price < self.mid_price {
|
|
|
+ self.is_regressed = true
|
|
|
+ } else if !self.is_regressed && self.inventory < Decimal::ZERO && self.fair_price > self.mid_price {
|
|
|
+ self.is_regressed = true
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
pub fn update_delta(&mut self) {
|
|
|
@@ -630,7 +640,7 @@ impl Predictor {
|
|
|
let optimal_bid_price = self.optimal_bid_price;
|
|
|
|
|
|
let inventory = self.inventory;
|
|
|
- let sigma_square = self.error_rate;
|
|
|
+ let sigma_square = if self.is_regressed { Decimal::ONE } else { Decimal::ZERO };
|
|
|
let gamma = now - self.last_update_time;
|
|
|
let kappa = self.fair_price / self.mid_price;
|
|
|
|