Forráskód Böngészése

开单观测要具有突然性

skyfffire 10 hónapja
szülő
commit
d4b38d182c
1 módosított fájl, 27 hozzáadás és 26 törlés
  1. 27 26
      strategy/src/predictor.rs

+ 27 - 26
strategy/src/predictor.rs

@@ -46,7 +46,7 @@ pub struct Predictor {
     pub bid_delta: Decimal,                                                     // δb
 
     pub mid_price_time_vec: FixedTimeRangeDeque<Decimal>,                       // 中间价格队列,100ms以内的所有中间价格
-    pub fair_price_time_vec: FixedTimeRangeDeque<Decimal>,                      // 公平价格队列,100ms以内的所有公平价格
+    pub fair_price_time_vec: FixedTimeRangeDeque<Decimal>,                      // 公平价格队列,50ms以内的所有公平价格
     pub spread_sma_1000_time_vec: FixedTimeRangeDeque<Decimal>,                 // spread队列,100ms以内的所有spread_sma_1000
     pub fair_price_vec: Vec<Decimal>,                                           // 公平价格列表,0表示做市所,1表示参考所
     pub fair_price: Decimal,                                                    // 预定价格
@@ -155,7 +155,7 @@ impl Predictor {
             ask_delta: Default::default(),
             bid_delta: Default::default(),
 
-            fair_price_time_vec: FixedTimeRangeDeque::new(100_000),
+            fair_price_time_vec: FixedTimeRangeDeque::new(50_000),
             mid_price_time_vec: FixedTimeRangeDeque::new(100_000),
             spread_sma_1000_time_vec: FixedTimeRangeDeque::new(500_000),
             fair_price: Default::default(),
@@ -324,21 +324,21 @@ impl Predictor {
             }
 
             // 更新程序关注的变化幅度焦点
-            if self.fair_rate_focus.is_zero() && self.spread_sma_1000_time_vec.len() > 1 {
-                let last_spread_sma = self.spread_sma_1000_time_vec.deque.iter().last().unwrap();
-                let first_spread_sma = self.spread_sma_1000_time_vec.deque[0];
-                let mut rate = last_spread_sma - first_spread_sma;
+            if self.fair_rate_focus.is_zero() {
+                let last_fair_price = self.fair_price_time_vec.deque.iter().last().unwrap();
+                let first_fair_price = self.fair_price_time_vec.deque[0];
+                let mut rate = (last_fair_price - first_fair_price) / first_fair_price;
                 rate.rescale(8);
 
                 // 只有有强度的rate才有资格被称为针
                 if rate.abs() > self.params.open {
                     // 向上涨,并且fair下穿mid,视为观测阶段开始
-                    if rate > Decimal::ZERO {
+                    if rate > Decimal::ZERO && self.mid_price > self.fair_price {
                         self.fair_rate_focus = rate;
                     }
 
                     // 向下跌,并且fair上穿mid,视为观测阶段开始
-                    if rate < Decimal::ZERO {
+                    if rate < Decimal::ZERO && self.mid_price < self.fair_price {
                         self.fair_rate_focus = rate;
                     }
                 }
@@ -437,19 +437,23 @@ impl Predictor {
 
             // self.bid_delta = self.mid_price * self.params.close;
         } else if is_open_long {
-            let is_open_long_market = self.spread_sma_1000 - self.spread_sma > self.params.open_market;
-            self.bid_delta = if is_open_long_market {
-                dec!(-1)
-            } else {
-                dec!(0)
-            };
+            // let is_open_long_market = self.spread_sma_1000 - self.spread_sma > self.params.open_market;
+            // self.bid_delta = if is_open_long_market {
+            //     dec!(-1)
+            // } else {
+            //     dec!(0)
+            // };
+
+            self.bid_delta = dec!(0)
         } else if is_open_short {
-            let is_open_short_market = self.spread_sma_1000 - self.spread_sma < self.params.open_market * Decimal::NEGATIVE_ONE;
-            self.ask_delta = if is_open_short_market {
-                dec!(-1)
-            } else {
-                dec!(0)
-            }
+            // let is_open_short_market = self.spread_sma_1000 - self.spread_sma < self.params.open_market * Decimal::NEGATIVE_ONE;
+            // self.ask_delta = if is_open_short_market {
+            //     dec!(-1)
+            // } else {
+            //     dec!(0)
+            // }
+
+            self.ask_delta = dec!(0)
         }
     }
 
@@ -538,12 +542,9 @@ impl Predictor {
         let bid_price = self.bid_price;
         let last_price = self.last_price;
 
-
-        let last_spread_sma = self.spread_sma_1000_time_vec.deque.iter().last().unwrap();
-        let first_spread_sma = self.spread_sma_1000_time_vec.deque[0];
-        let spread = self.spread_sma_1000;
-        let spread_max = last_spread_sma - first_spread_sma;
-        let spread_min = Self::UN_VIEW;
+        let spread = self.spread_sma;
+        let spread_max = self.spread_sma_2000;
+        let spread_min = self.spread_sma_1000;
         // 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;