瀏覽代碼

open_interest_ema_diff

skyffire 1 年之前
父節點
當前提交
33201bb4d6
共有 1 個文件被更改,包括 21 次插入6 次删除
  1. 21 6
      strategy/src/avellaneda_stoikov.rs

+ 21 - 6
strategy/src/avellaneda_stoikov.rs

@@ -39,12 +39,13 @@ pub struct AvellanedaStoikov {
     pub flow_ratio_long: Decimal,                                               // 资金流比例
     pub flow_ratio_short: Decimal,
 
-    pub last_open_interest: Decimal,                                            // 最后持仓量
+    pub open_interest: Decimal,                                                 // 最后持仓量
+    pub open_interest_ema: Decimal,                                             // 持仓量的ema
+    pub open_interest_diff: Decimal,                                            // 持仓量与ema的diff
     pub last_volume: Decimal,                                                   // 最后统计的交易量(过去1秒)
     pub money_flow: Decimal,                                                    // 资金流
     pub money_flow_ema: Decimal,                                                // 资金流ema
     pub money_flow_diff: Decimal,                                               // 资金流差值
-    pub open_interest_diff: Decimal,                                            // 开仓的差值
 
     pub ask_delta: Decimal,                                                     // δa
     pub bid_delta: Decimal,                                                     // δb
@@ -109,8 +110,9 @@ impl AvellanedaStoikov {
             money_flow: Default::default(),
             money_flow_ema: Default::default(),
             money_flow_diff: Default::default(),
+            open_interest: Default::default(),
+            open_interest_ema: Default::default(),
             open_interest_diff: Default::default(),
-            last_open_interest: Default::default(),
             last_volume: Default::default(),
 
             is_ready: false,
@@ -332,7 +334,11 @@ impl AvellanedaStoikov {
         self.money_flow += money_flow_index;
         self.money_flow_vec.push_back(self.money_flow);
         if !money_flow_index.is_zero() {
-            self.money_flow_ema = dec!(0.01) * self.money_flow + dec!(0.99) * self.money_flow_ema;
+            self.money_flow_ema = if self.money_flow_ema.is_zero() {
+                self.money_flow
+            } else {
+                dec!(0.01) * self.money_flow + dec!(0.99) * self.money_flow_ema
+            };
             self.money_flow_diff = self.money_flow - self.money_flow_ema;
         }
     }
@@ -356,8 +362,17 @@ impl AvellanedaStoikov {
         self.last_price = ticker.last;
         self.ask_price = ticker.sell;
         self.bid_price = ticker.buy;
-        self.last_open_interest = ticker.open_interest;
         self.mid_price = (self.ask_price + self.bid_price) / Decimal::TWO;
+        // 持仓量的处理
+        if self.open_interest != ticker.open_interest {
+            self.open_interest = ticker.open_interest;
+            self.open_interest_ema = if self.open_interest_ema.is_zero() {
+                self.open_interest
+            } else {
+                dec!(0.01) * self.open_interest + dec!(0.99) * self.open_interest_ema
+            };
+            self.open_interest_diff = self.open_interest - self.open_interest_ema;
+        }
 
         self.update_money_flow();
         self.processor().await;
@@ -538,7 +553,7 @@ impl AvellanedaStoikov {
             optimal_bid_price: self.optimal_bid_price,
 
             inventory: self.money_flow,
-            sigma_square: self.last_open_interest,
+            sigma_square: self.open_interest,
             gamma: self.open_interest_diff,
             kappa: self.money_flow_diff,