浏览代码

让fp更强。

skyffire 8 月之前
父节点
当前提交
aaa9eb40d4
共有 1 个文件被更改,包括 12 次插入14 次删除
  1. 12 14
      strategy/src/predictor.rs

+ 12 - 14
strategy/src/predictor.rs

@@ -26,7 +26,7 @@ pub struct Predictor {
     pub trend_short_rate: Decimal,
     pub fair_rate: Decimal,
 
-    pub prices: Vec<Vec<VecDeque<Decimal>>>,                                    // [[[做市所], [参考所0]], ...]
+    pub prices: Vec<Vec<FixedTimeRangeDeque<Decimal>>>,                         // [[[做市所], [参考所0]], ...]
     pub ks: Vec<Decimal>,
     pub bs: Vec<Decimal>,
 
@@ -152,7 +152,7 @@ impl Predictor {
             price_avg_times_vec: vec![Decimal::ZERO; params.ref_exchange.len()],
             price_avg_times_long_vec: vec![Decimal::ZERO; params.ref_exchange.len()],
 
-            prices: vec![vec![VecDeque::new(); 2]; params.ref_exchange.len()],
+            prices: vec![vec![FixedTimeRangeDeque::new(600_000_000); 2]; params.ref_exchange.len()],
             ks: vec![Decimal::ZERO; params.ref_exchange.len()],
             bs: vec![Decimal::ZERO; params.ref_exchange.len()],
             prev_fitting_time_vec: vec![Decimal::ZERO; params.ref_exchange.len()],
@@ -263,12 +263,6 @@ impl Predictor {
                 self.prices[mid_index][0].push_back(self.mid_price);
                 self.prices[mid_index][1].push_back(mp.clone());
 
-                // 长度限制
-                if self.prices[mid_index][0].len() > 10000 {
-                    self.prices[mid_index][0].pop_front();
-                    self.prices[mid_index][1].pop_front();
-                }
-
                 // 拟合,60s拟合一次
                 let before_fitting = Utc::now().timestamp_millis();
                 if Decimal::from(before_fitting) - self.prev_fitting_time_vec[mid_index] > dec!(60_000) || self.prices[mid_index][0].len() < 1000 {
@@ -395,7 +389,11 @@ impl Predictor {
             .filter(|&&value| value != Decimal::new(0, 0)) // 过滤掉0
             .count();
         if fair_price_count != 0 {
-            self.fair_price = fair_price_sum / Decimal::from(fair_price_count);
+            self.fair_price = if self.fair_price.is_zero() {
+                fair_price_sum / Decimal::from(fair_price_count)
+            } else {
+                dec!(0.99) + self.fair_price + dec!(0.01) * fair_price_sum / Decimal::from(fair_price_count)
+            };
 
             self.fair_price_short_vec.push_back(self.fair_price);
 
@@ -453,14 +451,14 @@ impl Predictor {
         let is_open_long = self.inventory.is_zero()
             && self.fair_price > self.mid_price * (Decimal::ONE + self.params.open)
             && self.trend_long_rate < dec!(-0.005)
-            && self.trend_short_rate < dec!(-0.0005)
-            && self.fair_rate > dec!(0.0005)
+            && self.trend_short_rate < Decimal::ZERO
+            && self.fair_rate > Decimal::ZERO
         ;
         let is_open_short = self.inventory.is_zero()
             && self.fair_price < self.mid_price * (Decimal::ONE - self.params.open)
             && self.trend_long_rate > dec!(0.005)
-            && self.trend_short_rate > dec!(0.0005)
-            && self.fair_rate < dec!(-0.0005)
+            && self.trend_short_rate > Decimal::ZERO
+            && self.fair_rate < Decimal::ZERO
         ;
 
         // 使信号有一定持续性
@@ -576,7 +574,7 @@ impl Predictor {
         let mut sum_xy = Decimal::zero();
 
         // 遍历VecDeque中的元素
-        for (xi, yi) in x.iter().zip(y.iter()) {
+        for (xi, yi) in x.deque.iter().zip(y.deque.iter()) {
             sum_x += xi;
             sum_y += yi;
             let xi_sq = xi * xi;