|
|
@@ -135,25 +135,35 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
pub fn update_spread(&mut self) {
|
|
|
- let prev_depth_0 = &self.depth_vec[0];
|
|
|
- if prev_depth_0.time.is_zero() {
|
|
|
- return;
|
|
|
- }
|
|
|
+ if self.trade_long_vec.len() > 0 {
|
|
|
+ //
|
|
|
+ let last_trade = self.trade_long_vec.get(self.trade_long_vec.len() - 1).unwrap();
|
|
|
+ let last_trade_price = last_trade.price;
|
|
|
+ let last_trade_time = last_trade.time;
|
|
|
+
|
|
|
+ let mut first_trade_price = last_trade.price;
|
|
|
+ for trade in self.trade_long_vec.deque.iter().rev() {
|
|
|
+ if last_trade_time - trade.time > Decimal::TEN {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ first_trade_price = trade.price;
|
|
|
+ }
|
|
|
|
|
|
- let prev_mid_price = (prev_depth_0.asks[0].price + prev_depth_0.bids[0].price) / Decimal::TWO;
|
|
|
- let now_spread = (prev_mid_price - self.mid_price).abs();
|
|
|
- if !now_spread.is_zero() {
|
|
|
- self.spread = now_spread;
|
|
|
- self.spread_vec.push(self.spread);
|
|
|
- self.spread_count_map.insert(self.spread, self.spread_count_map.get(&self.spread).unwrap_or(&0) + 1);
|
|
|
+ let now_spread = (last_trade_price - first_trade_price).abs();
|
|
|
+ if !now_spread.is_zero() {
|
|
|
+ self.spread = now_spread;
|
|
|
+ self.spread_vec.push(self.spread);
|
|
|
+ self.spread_count_map.insert(self.spread, self.spread_count_map.get(&self.spread).unwrap_or(&0) + 1);
|
|
|
|
|
|
- if self.spread_vec.len() > 1_000 {
|
|
|
- let pop_value = self.spread_vec.remove(0);
|
|
|
- self.spread_count_map.insert(pop_value, self.spread_count_map.get(&pop_value).unwrap() - 1);
|
|
|
- }
|
|
|
+ if self.spread_vec.len() > 2_000 {
|
|
|
+ let pop_value = self.spread_vec.remove(0);
|
|
|
+ self.spread_count_map.insert(pop_value, self.spread_count_map.get(&pop_value).unwrap() - 1);
|
|
|
+ }
|
|
|
|
|
|
- self.update_spread_max();
|
|
|
- self.update_spread_best();
|
|
|
+ self.update_spread_max();
|
|
|
+ self.update_spread_best();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -239,7 +249,7 @@ impl AvellanedaStoikov {
|
|
|
}
|
|
|
|
|
|
pub fn update_sigma_square(&mut self) {
|
|
|
- self.sigma_square = self.spread_max * dec!(0.7);
|
|
|
+ self.sigma_square = self.spread_max;
|
|
|
self.sigma_square.rescale(10);
|
|
|
}
|
|
|
|