Pārlūkot izejas kodu

v1.1.3: 趋势模式

skyffire 9 mēneši atpakaļ
vecāks
revīzija
b4641ac292
1 mainītis faili ar 13 papildinājumiem un 21 dzēšanām
  1. 13 21
      strategy/src/predictor.rs

+ 13 - 21
strategy/src/predictor.rs

@@ -260,10 +260,11 @@ impl Predictor {
             }
 
             self.spread_vec[i] = fair_price_std - self.mid_price;
-            self.signal = self.signal +  self.spread_vec[i];
+            // 以最远的那个为基准点
+            if self.spread_vec[i].abs() > self.signal.abs() {
+                self.signal = self.spread_vec[i];
+            }
         }
-        self.signal = self.signal / self.params.min_spread;
-        self.signal.rescale(0);
     }
 
     pub fn update_delta(&mut self) {
@@ -280,37 +281,28 @@ impl Predictor {
         let is_close_long = self.inventory > Decimal::ZERO;
         let is_close_short = self.inventory < Decimal::ZERO;
 
+        self.bid_delta = dec!(-2);
+        self.ask_delta = dec!(-2);
+        self.optimal_bid_price = Self::DONT_VIEW;
+        self.optimal_ask_price = Self::DONT_VIEW;
+
         if is_close_long {
             self.ask_delta = dec!(0);
-            self.bid_delta = dec!(-2);
 
             self.optimal_ask_price = self.mid_price + self.mid_price * self.params.close;
-            self.optimal_bid_price = Self::DONT_VIEW;
         } else if is_close_short {
             self.bid_delta = dec!(0);
-            self.ask_delta = dec!(-2);
 
             self.optimal_bid_price = self.mid_price - self.mid_price * self.params.close;
-            self.optimal_ask_price = Self::DONT_VIEW;
         } else {
-            if self.signal > Decimal::ZERO {
+            if self.signal > self.params.min_spread {
                 self.bid_delta = dec!(0);
-                self.ask_delta = dec!(-2);
-
-                self.optimal_bid_price = self.mid_price - self.mid_price * self.params.open;
-                self.optimal_ask_price = Self::DONT_VIEW;
-            } else if self.signal < Decimal::ZERO {
-                self.ask_delta = dec!(0);
-                self.bid_delta = dec!(-2);
 
-                self.optimal_ask_price = self.mid_price + self.mid_price * self.params.open;
-                self.optimal_bid_price = Self::DONT_VIEW;
-            } else {
-                self.bid_delta = dec!(0);
+                self.optimal_bid_price = self.mid_price + self.mid_price * (self.signal - self.params.min_spread);
+            } else if self.signal < -self.params.min_spread {
                 self.ask_delta = dec!(0);
 
-                self.optimal_bid_price = self.mid_price - self.mid_price * self.params.open;
-                self.optimal_ask_price = self.mid_price + self.mid_price * self.params.open;
+                self.optimal_ask_price = self.mid_price + self.mid_price * (self.signal + self.params.min_spread);
             }
         }