Jelajahi Sumber

修复行情过慢导致的定价异常问题。

skyffire 9 bulan lalu
induk
melakukan
ae43c47832
1 mengubah file dengan 6 tambahan dan 20 penghapusan
  1. 6 20
      strategy/src/predictor.rs

+ 6 - 20
strategy/src/predictor.rs

@@ -18,7 +18,7 @@ use crate::utils;
 pub struct Predictor {
     pub depth_vec: Vec<Depth>,                                                  // 深度队列
     pub record_vec: VecDeque<Record>,                                           // 蜡烛队列
-    pub spread_vec: FixedTimeRangeDeque<Decimal>,                               // 价差队列
+    pub spread_vec: VecDeque<Decimal>,                                          // 价差队列
     pub trade_price_long_vec: FixedTimeRangeDeque<Decimal>,
     pub trade_233_vec: FixedTimeRangeDeque<Trade>,
     pub trade_0_vec: FixedTimeRangeDeque<Trade>,
@@ -131,7 +131,7 @@ impl Predictor {
             trade_price_long_vec: FixedTimeRangeDeque::new(Self::TRADE_LONG_RANGE_MICROS),
             trade_233_vec: FixedTimeRangeDeque::new(Self::TRADE_SHORT_RANGE_MICROS),
             trade_0_vec: FixedTimeRangeDeque::new(Self::TRADE_SHORT_RANGE_MICROS),
-            spread_vec: FixedTimeRangeDeque::new(Self::TRADE_LONG_RANGE_MICROS),
+            spread_vec: VecDeque::new(),
             mid_price: Default::default(),
             fair_price: Default::default(),
             ask_price: Default::default(),
@@ -309,27 +309,13 @@ impl Predictor {
             spread_abs.rescale(5);
 
             self.spread_vec.push_back(spread_abs);
+            if self.spread_vec.len() > 1000 {
+                self.spread_vec.pop_front();
+            }
 
-            let opt_abs_value = if self.spread_vec.len() > 10 {
-                // 转换为 Vec 并排序
-                let mut vec: Vec<_> = self.spread_vec.deque.iter().cloned().collect();
-                vec.sort();
-
-                // 获取前排位置的索引
-                let index = (vec.len() * 98) / 100;
-
-                vec.get(index).unwrap().clone()
-            } else {
-                self.spread_vec.deque.iter().max().unwrap().clone()
-            };
-
+            let opt_abs_value = self.spread_vec.iter().max().unwrap().clone();
 
-            let prev_open = self.params.open.clone();
             self.params.open = max(max(self.params.min_open, dec!(0.0006)), opt_abs_value);
-
-            if self.params.open != prev_open {
-                info!("open: {} -> {}", prev_open, self.params.open);
-            }
         }
     }