Explorar o código

一些系数的调整。

skyffire hai 1 ano
pai
achega
3e74fbcb3b
Modificáronse 1 ficheiros con 14 adicións e 10 borrados
  1. 14 10
      strategy/src/avellaneda_stoikov.rs

+ 14 - 10
strategy/src/avellaneda_stoikov.rs

@@ -52,7 +52,7 @@ pub struct AvellanedaStoikov {
 
 impl AvellanedaStoikov {
     // 时间窗口大小(微秒)
-    const MAX_TIME_RANGE_MICROS: i64 = 1 * 60_000_000;
+    const MAX_TIME_RANGE_MICROS: i64 = 3 * 60_000_000;
     // const ONE_MILLION: Decimal = dec!(1_000_000);
     // const TWENTY_THOUSAND: Decimal = dec!(20_000);
     const IRA: Decimal = dec!(1);
@@ -233,7 +233,7 @@ impl AvellanedaStoikov {
 
     pub fn update_delta(&mut self) {
         if self.gamma != Decimal::ZERO {
-            self.base_delta = (Decimal::ONE / self.gamma) * (Decimal::ONE + self.gamma / self.kappa).ln() * dec!(0.732);
+            self.base_delta = (Decimal::ONE / self.gamma) * (Decimal::ONE + self.gamma / self.kappa).ln() * dec!(0.618);
             self.ratio_edge = (self.flow_ratio * self.base_delta) * Decimal::TWO;
 
             self.bid_delta = self.base_delta;
@@ -242,11 +242,11 @@ impl AvellanedaStoikov {
             if self.inventory > Decimal::ZERO {
                 let pos_edge = ((Decimal::ONE + Decimal::TWO * self.inventory) / Decimal::TWO) * (self.gamma * self.sigma_square) * self.t_diff;
 
-                self.bid_delta += pos_edge * dec!(0.5);
+                self.bid_delta += pos_edge;
             } else if self.inventory < Decimal::ZERO {
                 let pos_edge = ((Decimal::ONE - Decimal::TWO * self.inventory) / Decimal::TWO) * (self.gamma * self.sigma_square) * self.t_diff;
 
-                self.ask_delta += pos_edge * dec!(0.5);
+                self.ask_delta += pos_edge;
             }
             if self.ratio_edge < Decimal::ZERO {
                 self.bid_delta += self.ratio_edge.abs()
@@ -269,13 +269,17 @@ impl AvellanedaStoikov {
     }
 
     pub fn update_flow_ratio(&mut self) {
-        self.flow_ratio = if self.trade_vec.len() < 100 {
-            Decimal::ZERO
-        } else {
-            (self.flow_in_value - self.flow_out_value) / (self.flow_out_value + self.flow_in_value)
-        };
+        // self.flow_ratio = if self.trade_vec.len() < 100 {
+        //     Decimal::ZERO
+        // } else {
+        //     let now = (self.flow_in_value - self.flow_out_value) / (self.flow_out_value + self.flow_in_value);
+        //
+        //     self.flow_ratio * dec!(0.8) + now * dec!(0.2)
+        // };
+        //
+        // self.flow_ratio.rescale(6);
 
-        self.flow_ratio.rescale(6);
+        self.flow_ratio = Decimal::ZERO;
     }
 
     pub fn check_ready(&mut self) {