Sfoglia il codice sorgente

观察最近10分钟内的涨跌幅

skyffire 9 mesi fa
parent
commit
a15b020617
1 ha cambiato i file con 15 aggiunte e 4 eliminazioni
  1. 15 4
      strategy/src/predictor.rs

+ 15 - 4
strategy/src/predictor.rs

@@ -21,6 +21,7 @@ pub struct Predictor {
     pub depth_vec: Vec<Depth>,                                                  // 深度队列
     pub spread_vec: Vec<Decimal>,                                               // 价差队列
     pub record_vec: VecDeque<Record>,                                           // 蜡烛队列
+    pub trade_price_long_vec: FixedTimeRangeDeque<Decimal>,                     // 交易队列
 
     pub mid_price: Decimal,                                                     // 中间价
     pub fair_price: Decimal,
@@ -66,7 +67,7 @@ impl Predictor {
     // 时间窗口大小(微秒)
     // const MAX_TIME_RANGE_MICROS: i64 = 3 * 60_000_000;
     // const TIME_DIFF_RANGE_MICROS: i64 = 15 * 60_000_000;
-    // const TRADE_LONG_RANGE_MICROS: i64 = 60_000_000;
+    const TRADE_LONG_RANGE_MICROS: i64 = 10 * 60_000_000;
     // const SPREAD_RANGE_MICROS: i64 = 15 * 60_000_000;
     // const TRADE_SHORT_RANGE_MICROS: i64 = 2 * 60_000_000;
     // const ONE_MILLION: Decimal = dec!(1_000_000);
@@ -128,6 +129,7 @@ impl Predictor {
 
             record_vec: VecDeque::new(),
 
+            trade_price_long_vec: FixedTimeRangeDeque::new(Self::TRADE_LONG_RANGE_MICROS),
             mid_price: Default::default(),
             fair_price: Default::default(),
             ask_price: Default::default(),
@@ -189,6 +191,8 @@ impl Predictor {
     pub async fn on_trade(&mut self, trade: &Trade, _index: usize) {
         self.last_price = trade.price;
 
+        self.trade_price_long_vec.push_back(trade.price);
+
         // self.processor().await;
     }
 
@@ -404,9 +408,16 @@ impl Predictor {
         let last_price = Self::DONT_VIEW;
         let fair_price = self.fair_price;
 
-        let spread = self.signal;
-        let spread_min = self.fair_price_vec[0] / self.mid_price - self.price_avg_times_vec[0];
-        let spread_max = self.fair_price_vec[0] / self.mid_price - self.price_avg_times_long_vec[0];
+        let spread = if self.trade_price_long_vec.len() > 1 {
+            let front = self.trade_price_long_vec.deque.front().unwrap();
+            let back = self.trade_price_long_vec.deque.back().unwrap();
+
+            (back / front) - Decimal::ONE
+        } else {
+            Decimal::ZERO
+        };
+        let spread_min = Self::DONT_VIEW;
+        let spread_max = Self::DONT_VIEW;
         // 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;