浏览代码

開平倉的一些距離係數的調整。

skyfffire 1 年之前
父节点
当前提交
0c1cd2205b
共有 1 个文件被更改,包括 16 次插入3 次删除
  1. 16 3
      strategy/src/avellaneda_stoikov.rs

+ 16 - 3
strategy/src/avellaneda_stoikov.rs

@@ -36,6 +36,7 @@ pub struct AvellanedaStoikov {
     pub flow_in_value: Decimal,
     pub flow_out_value: Decimal,
     pub flow_ratio: Decimal,                                                    // 资金流比例
+    pub flow_ratio_diff: Decimal,                                               // 資金流比例的差值
 
     pub ask_delta: Decimal,                                                     // δa
     pub bid_delta: Decimal,                                                     // δb
@@ -85,7 +86,6 @@ impl AvellanedaStoikov {
 
             ratio_edge: Default::default(),
             kappa: Default::default(),
-            flow_in_value: Default::default(),
             ref_price: Default::default(),
 
             cci_arc,
@@ -94,7 +94,9 @@ impl AvellanedaStoikov {
             prev_trade_time: Utc::now().timestamp_micros(),
             t_diff: Default::default(),
             flow_ratio: Decimal::ONE,
+            flow_ratio_diff: Default::default(),
             flow_out_value: Default::default(),
+            flow_in_value: Default::default(),
             level: Default::default(),
         };
 
@@ -230,7 +232,7 @@ impl AvellanedaStoikov {
 
     pub fn update_delta(&mut self) {
         if self.gamma != Decimal::ZERO {
-            let pos_edge = self.gamma * self.sigma_square * self.inventory.abs().powd(Decimal::TWO) * self.t_diff / Decimal::TWO;
+            let pos_edge = self.gamma * self.sigma_square * self.inventory.abs().powd(dec!(2.5)) * self.t_diff / Decimal::TWO;
 
             self.base_delta = self.gamma * self.sigma_square * self.t_diff / Decimal::TWO + (Decimal::ONE / self.gamma) * (Decimal::ONE + self.gamma / self.kappa).ln();
             self.ratio_edge = self.flow_ratio * self.sigma_square;
@@ -274,7 +276,18 @@ impl AvellanedaStoikov {
 
     pub fn update_flow_ratio(&mut self) {
         if self.trade_vec.len() > 200 {
-            self.flow_ratio = (self.flow_in_value - self.flow_out_value) / (self.flow_out_value + self.flow_in_value);
+            // let prev_flow_ratio = self.flow_ratio;
+            self.flow_ratio = dec!(3.7) * (self.flow_in_value - self.flow_out_value) / (self.flow_out_value + self.flow_in_value);
+
+            // self.flow_ratio_diff = if !prev_flow_ratio.is_zero() {
+            //     if self.flow_ratio != prev_flow_ratio {
+            //         self.flow_ratio_diff * dec!(0.7) + (self.flow_ratio - prev_flow_ratio) * dec!(0.3)
+            //     } else {
+            //         self.flow_ratio_diff
+            //     }
+            // } else {
+            //     Decimal::ZERO
+            // }
         } else {
             self.flow_ratio = Decimal::ZERO;
         }