|
|
@@ -18,7 +18,7 @@ use crate::utils;
|
|
|
pub struct Predictor {
|
|
|
pub depth_vec: Vec<Depth>, // 深度队列
|
|
|
pub record_vec: VecDeque<Record>, // 蜡烛队列
|
|
|
- pub spread_vec: FixedTimeRangeDeque<Decimal>, // 价差队列
|
|
|
+ pub spread_vec: VecDeque<Decimal>, // 价差队列
|
|
|
pub trade_price_long_vec: FixedTimeRangeDeque<Decimal>,
|
|
|
pub trade_233_vec: FixedTimeRangeDeque<Trade>,
|
|
|
pub trade_0_vec: FixedTimeRangeDeque<Trade>,
|
|
|
@@ -131,7 +131,7 @@ impl Predictor {
|
|
|
trade_price_long_vec: FixedTimeRangeDeque::new(Self::TRADE_LONG_RANGE_MICROS),
|
|
|
trade_233_vec: FixedTimeRangeDeque::new(Self::TRADE_SHORT_RANGE_MICROS),
|
|
|
trade_0_vec: FixedTimeRangeDeque::new(Self::TRADE_SHORT_RANGE_MICROS),
|
|
|
- spread_vec: FixedTimeRangeDeque::new(Self::TRADE_LONG_RANGE_MICROS),
|
|
|
+ spread_vec: VecDeque::new(),
|
|
|
mid_price: Default::default(),
|
|
|
fair_price: Default::default(),
|
|
|
ask_price: Default::default(),
|
|
|
@@ -309,27 +309,13 @@ impl Predictor {
|
|
|
spread_abs.rescale(5);
|
|
|
|
|
|
self.spread_vec.push_back(spread_abs);
|
|
|
+ if self.spread_vec.len() > 1000 {
|
|
|
+ self.spread_vec.pop_front();
|
|
|
+ }
|
|
|
|
|
|
- let opt_abs_value = if self.spread_vec.len() > 10 {
|
|
|
- // 转换为 Vec 并排序
|
|
|
- let mut vec: Vec<_> = self.spread_vec.deque.iter().cloned().collect();
|
|
|
- vec.sort();
|
|
|
-
|
|
|
- // 获取前排位置的索引
|
|
|
- let index = (vec.len() * 98) / 100;
|
|
|
-
|
|
|
- vec.get(index).unwrap().clone()
|
|
|
- } else {
|
|
|
- self.spread_vec.deque.iter().max().unwrap().clone()
|
|
|
- };
|
|
|
-
|
|
|
+ let opt_abs_value = self.spread_vec.iter().max().unwrap().clone();
|
|
|
|
|
|
- let prev_open = self.params.open.clone();
|
|
|
self.params.open = max(max(self.params.min_open, dec!(0.0006)), opt_abs_value);
|
|
|
-
|
|
|
- if self.params.open != prev_open {
|
|
|
- info!("open: {} -> {}", prev_open, self.params.open);
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|