ソースを参照

对比两个版本的拟合

skyffire 9 ヶ月 前
コミット
d62c034631
1 ファイル変更18 行追加13 行削除
  1. 18 13
      strategy/src/predictor.rs

+ 18 - 13
strategy/src/predictor.rs

@@ -58,7 +58,8 @@ pub struct Predictor {
     pub prev_insert_time: Decimal,
     pub prev_save_time: Decimal,
     pub init_time: Decimal,
-    pub nihe_time: Decimal,
+    pub fitting_delay: Decimal,
+    pub prev_fitting_time: Decimal,
 
     pub params: Params,
 
@@ -164,7 +165,8 @@ impl Predictor {
             prev_save_time: Decimal::from(Utc::now().timestamp_millis()),
             init_time: Decimal::from(Utc::now().timestamp_millis()),
 
-            nihe_time: Default::default(),
+            fitting_delay: Default::default(),
+            prev_fitting_time: Default::default(),
             params,
 
             debug_sender: tx,
@@ -197,15 +199,18 @@ impl Predictor {
                     self.prices[mid_index][1].pop_front();
                 }
 
-                // 拟合
-                let prev = Utc::now().timestamp_millis();
-                if let Some((k, b)) = self.linear_least_squares(mid_index).await {
-                    self.ks[mid_index] = k;
-                    self.bs[mid_index] = b;
+                // 拟合,60s拟合一次
+                let before_fitting = Utc::now().timestamp_millis();
+                if Decimal::from(before_fitting) - self.prev_fitting_time > dec!(60_000) {
+                    if let Some((k, b)) = self.linear_least_squares(mid_index).await {
+                        self.ks[mid_index] = k;
+                        self.bs[mid_index] = b;
 
-                    self.nihe_time = Decimal::from(Utc::now().timestamp_millis() - prev);
-                } else {
-                    return;
+                        self.fitting_delay = Decimal::from(Utc::now().timestamp_millis() - before_fitting);
+                        self.prev_fitting_time = Decimal::from(before_fitting)
+                    } else {
+                        return;
+                    }
                 }
             }
         } else {
@@ -480,8 +485,8 @@ impl Predictor {
         let total_amount_1: Decimal = self.trade_0_vec.deque.iter().map(|trade| trade.value).sum();
 
         let spread = Self::DONT_VIEW;
-        let spread_min = (self.fair_price - self.mid_price) / self.mid_price;
-        let spread_max = self.params.open;
+        let spread_max = self.bs[0];
+        let spread_min = self.ks[0];
         // let spread = self.price_times_avg;
         // let spread_max = self.fair_price_vec[1] / self.fair_price_vec[0];
         // let spread_min = self.fair_price / self.mid_price;
@@ -495,7 +500,7 @@ impl Predictor {
         };
 
         let gamma = self.balance;
-        let kappa = self.nihe_time;
+        let kappa = self.fitting_delay;
 
         let flow_ratio = Decimal::ZERO;