Explorar el Código

使用depth统计spread

skyfffire hace 11 meses
padre
commit
e8707c8947
Se han modificado 1 ficheros con 49 adiciones y 56 borrados
  1. 49 56
      strategy/src/avellaneda_stoikov.rs

+ 49 - 56
strategy/src/avellaneda_stoikov.rs

@@ -141,72 +141,65 @@ impl AvellanedaStoikov {
         } else {
             Decimal::NEGATIVE_ONE
         };
-        self.spread_long_max = if let Some(&max_value) = self.spread_long_vec.iter().max() {
-            max_value
-        } else {
-            Decimal::NEGATIVE_ONE
-        };
-        self.spread_short_max = if let Some(&max_value) = self.spread_short_vec.iter().max() {
-            max_value
-        } else {
-            Decimal::NEGATIVE_ONE
-        };
+        // self.spread_long_max = if let Some(&max_value) = self.spread_long_vec.iter().max() {
+        //     max_value
+        // } else {
+        //     Decimal::NEGATIVE_ONE
+        // };
+        // self.spread_short_max = if let Some(&max_value) = self.spread_short_vec.iter().max() {
+        //     max_value
+        // } else {
+        //     Decimal::NEGATIVE_ONE
+        // };
     }
 
     // 更新最佳市场冲击
-    pub fn update_spread_best(&mut self) {
-        self.spread_best = self.spread_max;
-        let mut max_count = 0usize;
+    // pub fn update_spread_best(&mut self) {
+    //     self.spread_best = self.spread_max;
+    //     let mut max_count = 0usize;
+    //
+    //     for (spread, count) in self.spread_count_map.iter() {
+    //         // info!(?spread, ?count);
+    //
+    //         if *count < max_count {
+    //             continue
+    //         }
+    //
+    //         self.spread_best = *spread;
+    //         max_count = *count;
+    //     }
+    //     // info!("======================")
+    // }
 
-        for (spread, count) in self.spread_count_map.iter() {
-            // info!(?spread, ?count);
+    pub fn update_spread(&mut self) {
+        // if self.trade_long_vec.len() > 0 {
+        let prev_depth_0 = &self.depth_vec[0];
+        if prev_depth_0.time.is_zero() {
+            return;
+        }
 
-            if *count < max_count {
-                continue
-            }
+        let prev_mid_price = (prev_depth_0.asks[0].price + prev_depth_0.bids[0].price) / Decimal::TWO;
+        let now_spread = (prev_mid_price - self.mid_price).abs();
 
-            self.spread_best = *spread;
-            max_count = *count;
-        }
-        // info!("======================")
-    }
+        if !now_spread.is_zero() {
+            self.spread = now_spread;
+            self.spread_vec.push(self.spread);
+            // if last_trade_price > first_trade_price {
+            //     self.spread_long_vec.push(self.spread);
+            // } else {
+            //     self.spread_short_vec.push(self.spread);
+            // }
+            self.spread_count_map.insert(self.spread, self.spread_count_map.get(&self.spread).unwrap_or(&0) + 1);
 
-    pub fn update_spread(&mut self) {
-        if self.trade_long_vec.len() > 0 {
-            //
-            let last_trade = self.trade_long_vec.get(self.trade_long_vec.len() - 1).unwrap();
-            let last_trade_price = last_trade.price;
-            let last_trade_time = last_trade.time;
-
-            let mut first_trade_price = last_trade.price;
-            for trade in self.trade_long_vec.deque.iter().rev() {
-                if last_trade_time - trade.time > Decimal::TEN {
-                    break;
-                }
-
-                first_trade_price = trade.price;
+            if self.spread_vec.len() > 2_000 {
+                let pop_value = self.spread_vec.remove(0);
+                self.spread_count_map.insert(pop_value, self.spread_count_map.get(&pop_value).unwrap() - 1);
             }
 
-            let now_spread = (last_trade_price - first_trade_price).abs();
-            if !now_spread.is_zero() {
-                self.spread = now_spread;
-                self.spread_vec.push(self.spread);
-                if last_trade_price > first_trade_price {
-                    self.spread_long_vec.push(self.spread);
-                } else {
-                    self.spread_short_vec.push(self.spread);
-                }
-                self.spread_count_map.insert(self.spread, self.spread_count_map.get(&self.spread).unwrap_or(&0) + 1);
-
-                if self.spread_vec.len() > 2_000 {
-                    let pop_value = self.spread_vec.remove(0);
-                    self.spread_count_map.insert(pop_value, self.spread_count_map.get(&pop_value).unwrap() - 1);
-                }
-
-                self.update_spread_max();
-                self.update_spread_best();
-            }
+            self.update_spread_max();
+            // self.update_spread_best();
         }
+        // }
     }
 
     pub async fn on_depth(&mut self, depth: &Depth, index: usize) {