Browse Source

修复一些订单重置bug

skyffire 10 months ago
parent
commit
5940ee1517
1 changed files with 10 additions and 6 deletions
  1. 10 6
      strategy/src/predictor.rs

+ 10 - 6
strategy/src/predictor.rs

@@ -53,6 +53,7 @@ pub struct Predictor {
 
     pub mid_price_time_vec: FixedTimeRangeDeque<Decimal>,                       // 中间价格队列,
     pub fair_price_time_vec: FixedTimeRangeDeque<Decimal>,                      // 公平价格队列,
+    pub fair_price_long_time_vec: FixedTimeRangeDeque<Decimal>,                 // 公平价格队列,
     pub fair_price_vec: Vec<Decimal>,                                           // 公平价格列表,0表示做市所,1表示参考所
     pub fair_price: Decimal,                                                    // 公平价格
     pub fair_price_ema_short: Decimal,                                          // 公平价格_ema
@@ -85,7 +86,7 @@ impl Predictor {
     // 时间窗口大小(微秒)
     // const MAX_TIME_RANGE_MICROS: i64 = 3 * 60_000_000;
     const TIME_DIFF_RANGE_MICROS: i64 = 15 * 60_000_000;
-    const TRADE_LONG_RANGE_MICROS: i64 = 60_000_000;
+    const TRADE_LONG_RANGE_MICROS: i64 = 5 * 60_000_000;
     // const SPREAD_RANGE_MICROS: i64 = 15 * 60_000_000;
     const TRADE_SHORT_RANGE_MICROS: i64 = 2 * 60_000_000;
     // const ONE_MILLION: Decimal = dec!(1_000_000);
@@ -167,6 +168,7 @@ impl Predictor {
             bid_delta: Default::default(),
 
             fair_price_time_vec: FixedTimeRangeDeque::new((params.second_observation_time.to_f64().unwrap() * 1_000_000f64).to_i64().unwrap()),
+            fair_price_long_time_vec: FixedTimeRangeDeque::new(Self::TRADE_LONG_RANGE_MICROS),
             mid_price_time_vec: FixedTimeRangeDeque::new((params.second_observation_time.to_f64().unwrap() * 1_000_000f64).to_i64().unwrap()),
             fair_price: Default::default(),
             fair_price_ema_short: Default::default(),
@@ -385,16 +387,18 @@ impl Predictor {
 
             let mut fair_rate = Self::get_real_rate(&self.fair_price_time_vec);
             fair_rate.rescale(8);
+            let mut fair_long_rate = Self::get_real_rate(&self.fair_price_long_time_vec);
+            fair_long_rate.rescale(8);
             let mut mid_rate = Self::get_real_rate(&self.mid_price_time_vec);
             mid_rate.rescale(8);
 
             // 重置开仓焦点,条件1
             if !self.fair_rate_focus_open.is_zero() {
-                if self.fair_rate_focus_open > Decimal::ZERO && self.spread_ema_1000 < Decimal::ZERO {
+                if self.fair_rate_focus_open < Decimal::ZERO && self.spread_ema_1000 < Decimal::ZERO {
                     self.fair_rate_focus_open = Decimal::ZERO;
                 }
 
-                if self.fair_rate_focus_open < Decimal::ZERO && self.spread_ema_1000 > Decimal::ZERO {
+                if self.fair_rate_focus_open > Decimal::ZERO && self.spread_ema_1000 > Decimal::ZERO {
                     self.fair_rate_focus_open = Decimal::ZERO;
                 }
             }
@@ -406,11 +410,11 @@ impl Predictor {
             if !self.mid_price_focus_open.is_zero() {
                 let focus_rate = (self.mid_price - self.mid_price_focus_open) / self.mid_price_focus_open;
 
-                if self.fair_rate_focus_open > Decimal::ZERO && focus_rate < Decimal::NEGATIVE_ONE * self.params.open_activate / dec!(3) {
+                if self.fair_rate_focus_open < Decimal::ZERO && focus_rate < Decimal::NEGATIVE_ONE * self.params.open_activate / dec!(3) {
                     self.fair_rate_focus_open = Decimal::ZERO;
                 }
 
-                if self.fair_rate_focus_open < Decimal::ZERO && focus_rate > self.params.open_activate / dec!(3) {
+                if self.fair_rate_focus_open > Decimal::ZERO && focus_rate > self.params.open_activate / dec!(3) {
                     self.fair_rate_focus_open = Decimal::ZERO;
                 }
             }
@@ -704,7 +708,7 @@ impl Predictor {
         };
         // let sigma_square = self.error_rate;
 
-        let gamma = self.fair_rate_focus_open;
+        let gamma = Self::get_real_rate(&self.fair_price_long_time_vec);
         let kappa = self.fair_rate_focus_close;
 
         let flow_ratio = Decimal::ZERO;