Explorar el Código

是否回归的图像

skyfffire hace 11 meses
padre
commit
5ca38cc0de
Se han modificado 1 ficheros con 11 adiciones y 1 borrados
  1. 11 1
      strategy/src/predictor.rs

+ 11 - 1
strategy/src/predictor.rs

@@ -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;