Browse Source

市价委托平仓

skyffire 1 year ago
parent
commit
bf2b910f97
1 changed files with 13 additions and 4 deletions
  1. 13 4
      strategy/src/avellaneda_stoikov.rs

+ 13 - 4
strategy/src/avellaneda_stoikov.rs

@@ -260,17 +260,26 @@ impl AvellanedaStoikov {
 
             if self.inventory > Decimal::ZERO {
                 self.bid_delta += pos_edge;
-                self.ask_delta = Decimal::ZERO;
+                self.ask_delta = Decimal::NEGATIVE_ONE * self.base_delta;
             } else if self.inventory < Decimal::ZERO {
                 self.ask_delta += pos_edge;
-                self.bid_delta = Decimal::ZERO;
+                self.bid_delta = Decimal::NEGATIVE_ONE * self.base_delta;
             }
         }
     }
 
     pub fn update_optimal_ask_and_bid(&mut self) {
-        self.optimal_ask_price = max(self.ref_price + self.ask_delta / Decimal::TWO, self.ask_price);
-        self.optimal_bid_price = min(self.ref_price - self.bid_delta / Decimal::TWO, self.bid_price);
+        self.optimal_ask_price = if self.inventory < Decimal::ZERO {
+            self.ref_price + self.ask_delta / Decimal::TWO
+        } else {
+            max(self.ref_price + self.ask_delta / Decimal::TWO, self.ask_price)
+        };
+
+        self.optimal_bid_price = if self.inventory > Decimal::ZERO {
+            self.ref_price + self.ask_delta / Decimal::TWO
+        } else {
+            min(self.ref_price - self.bid_delta / Decimal::TWO, self.bid_price)
+        };
     }
 
     pub fn update_t_diff(&mut self) {