|
@@ -141,72 +141,65 @@ impl AvellanedaStoikov {
|
|
|
} else {
|
|
} else {
|
|
|
Decimal::NEGATIVE_ONE
|
|
Decimal::NEGATIVE_ONE
|
|
|
};
|
|
};
|
|
|
- self.spread_long_max = if let Some(&max_value) = self.spread_long_vec.iter().max() {
|
|
|
|
|
- max_value
|
|
|
|
|
- } else {
|
|
|
|
|
- Decimal::NEGATIVE_ONE
|
|
|
|
|
- };
|
|
|
|
|
- self.spread_short_max = if let Some(&max_value) = self.spread_short_vec.iter().max() {
|
|
|
|
|
- max_value
|
|
|
|
|
- } else {
|
|
|
|
|
- Decimal::NEGATIVE_ONE
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ // self.spread_long_max = if let Some(&max_value) = self.spread_long_vec.iter().max() {
|
|
|
|
|
+ // max_value
|
|
|
|
|
+ // } else {
|
|
|
|
|
+ // Decimal::NEGATIVE_ONE
|
|
|
|
|
+ // };
|
|
|
|
|
+ // self.spread_short_max = if let Some(&max_value) = self.spread_short_vec.iter().max() {
|
|
|
|
|
+ // max_value
|
|
|
|
|
+ // } else {
|
|
|
|
|
+ // Decimal::NEGATIVE_ONE
|
|
|
|
|
+ // };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 更新最佳市场冲击
|
|
// 更新最佳市场冲击
|
|
|
- pub fn update_spread_best(&mut self) {
|
|
|
|
|
- self.spread_best = self.spread_max;
|
|
|
|
|
- let mut max_count = 0usize;
|
|
|
|
|
|
|
+ // pub fn update_spread_best(&mut self) {
|
|
|
|
|
+ // self.spread_best = self.spread_max;
|
|
|
|
|
+ // let mut max_count = 0usize;
|
|
|
|
|
+ //
|
|
|
|
|
+ // for (spread, count) in self.spread_count_map.iter() {
|
|
|
|
|
+ // // info!(?spread, ?count);
|
|
|
|
|
+ //
|
|
|
|
|
+ // if *count < max_count {
|
|
|
|
|
+ // continue
|
|
|
|
|
+ // }
|
|
|
|
|
+ //
|
|
|
|
|
+ // self.spread_best = *spread;
|
|
|
|
|
+ // max_count = *count;
|
|
|
|
|
+ // }
|
|
|
|
|
+ // // info!("======================")
|
|
|
|
|
+ // }
|
|
|
|
|
|
|
|
- for (spread, count) in self.spread_count_map.iter() {
|
|
|
|
|
- // info!(?spread, ?count);
|
|
|
|
|
|
|
+ pub fn update_spread(&mut self) {
|
|
|
|
|
+ // if self.trade_long_vec.len() > 0 {
|
|
|
|
|
+ let prev_depth_0 = &self.depth_vec[0];
|
|
|
|
|
+ if prev_depth_0.time.is_zero() {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if *count < max_count {
|
|
|
|
|
- continue
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ 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();
|
|
|
|
|
|
|
|
- self.spread_best = *spread;
|
|
|
|
|
- max_count = *count;
|
|
|
|
|
- }
|
|
|
|
|
- // info!("======================")
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if !now_spread.is_zero() {
|
|
|
|
|
+ self.spread = now_spread;
|
|
|
|
|
+ self.spread_vec.push(self.spread);
|
|
|
|
|
+ // if last_trade_price > first_trade_price {
|
|
|
|
|
+ // self.spread_long_vec.push(self.spread);
|
|
|
|
|
+ // } else {
|
|
|
|
|
+ // self.spread_short_vec.push(self.spread);
|
|
|
|
|
+ // }
|
|
|
|
|
+ self.spread_count_map.insert(self.spread, self.spread_count_map.get(&self.spread).unwrap_or(&0) + 1);
|
|
|
|
|
|
|
|
- pub fn update_spread(&mut self) {
|
|
|
|
|
- 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;
|
|
|
|
|
|
|
+ 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);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- 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);
|
|
|
|
|
- if last_trade_price > first_trade_price {
|
|
|
|
|
- self.spread_long_vec.push(self.spread);
|
|
|
|
|
- } else {
|
|
|
|
|
- self.spread_short_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() > 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();
|
|
|
}
|
|
}
|
|
|
|
|
+ // }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
pub async fn on_depth(&mut self, depth: &Depth, index: usize) {
|
|
pub async fn on_depth(&mut self, depth: &Depth, index: usize) {
|