Sfoglia il codice sorgente

修复一些距离的bug。

skyfffire 1 anno fa
parent
commit
ff39ac2d09
1 ha cambiato i file con 16 aggiunte e 23 eliminazioni
  1. 16 23
      strategy/src/avellaneda_stoikov.rs

+ 16 - 23
strategy/src/avellaneda_stoikov.rs

@@ -103,23 +103,14 @@ impl AvellanedaStoikov {
         avellaneda_stoikov
     }
 
-    // // 更新最大市场冲击
-    // pub fn update_spread_max(&mut self) {
-    //     self.spread_max = if let Some(&max_value) = self.spread_vec.deque.iter().max() {
-    //         max_value
-    //     } else {
-    //         Decimal::NEGATIVE_ONE
-    //     };
-    // }
-    //
-    // // 更新最小市场冲击
-    // pub fn update_spread_min(&mut self) {
-    //     self.spread_min = if let Some(&min_value) = self.spread_vec.deque.iter().min() {
-    //         min_value
-    //     } else {
-    //         Decimal::NEGATIVE_ONE
-    //     };
-    // }
+    // 更新最大市场冲击
+    pub fn update_spread_max(&mut self) {
+        self.spread_max = if let Some(&max_value) = self.spread_vec.deque.iter().max() {
+            max_value
+        } else {
+            Decimal::NEGATIVE_ONE
+        };
+    }
 
     pub fn update_spread(&mut self) {
         let prev_depth_0 = &self.depth_vec[0];
@@ -128,9 +119,11 @@ impl AvellanedaStoikov {
         }
 
         let prev_mid_price = (prev_depth_0.asks[0].price + prev_depth_0.bids[0].price) / Decimal::TWO;
-        let now = (prev_mid_price - self.mid_price).abs();
-        if !now.is_zero() {
-            self.spread = now * dec!(0.01) + self.spread * dec!(0.99)
+        let now_spread = (prev_mid_price - self.mid_price).abs();
+        if !now_spread.is_zero() {
+            self.spread = now_spread;
+            self.spread_vec.push_back(self.spread);
+            self.update_spread_max();
         }
     }
 
@@ -215,7 +208,7 @@ impl AvellanedaStoikov {
     }
 
     pub fn update_sigma_square(&mut self) {
-        self.sigma_square = self.spread;
+        self.sigma_square = self.spread_max;
         self.sigma_square.rescale(10);
     }
 
@@ -258,12 +251,12 @@ impl AvellanedaStoikov {
         self.optimal_ask_price = if self.ask_delta == Decimal::NEGATIVE_ONE {
             self.ref_price
         } else {
-            max(self.ref_price + self.ask_delta, self.ask_price)
+            max(self.ref_price + self.ask_delta, self.bid_price)
         };
         self.optimal_bid_price = if self.bid_delta == Decimal::NEGATIVE_ONE {
             self.ref_price
         } else {
-            min(self.ref_price - self.bid_delta, self.bid_price)
+            min(self.ref_price - self.bid_delta, self.ask_price)
         };
     }