|
|
@@ -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)
|
|
|
};
|
|
|
}
|
|
|
|