Browse Source

spread还是使用trades计算的市场冲击

skyfffire 1 year ago
parent
commit
f289d7749c
1 changed files with 27 additions and 17 deletions
  1. 27 17
      strategy/src/avellaneda_stoikov.rs

+ 27 - 17
strategy/src/avellaneda_stoikov.rs

@@ -135,25 +135,35 @@ impl AvellanedaStoikov {
     }
 
     pub fn update_spread(&mut self) {
-        let prev_depth_0 = &self.depth_vec[0];
-        if prev_depth_0.time.is_zero() {
-            return;
-        }
+        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;
+            }
 
-        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();
-        if !now_spread.is_zero() {
-            self.spread = now_spread;
-            self.spread_vec.push(self.spread);
-            self.spread_count_map.insert(self.spread, self.spread_count_map.get(&self.spread).unwrap_or(&0) + 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);
+                self.spread_count_map.insert(self.spread, self.spread_count_map.get(&self.spread).unwrap_or(&0) + 1);
 
-            if self.spread_vec.len() > 1_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);
-            }
+                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();
+            }
         }
     }
 
@@ -239,7 +249,7 @@ impl AvellanedaStoikov {
     }
 
     pub fn update_sigma_square(&mut self) {
-        self.sigma_square = self.spread_max * dec!(0.7);
+        self.sigma_square = self.spread_max;
         self.sigma_square.rescale(10);
     }