|
|
@@ -21,6 +21,7 @@ pub struct Predictor {
|
|
|
pub depth_vec: Vec<Depth>, // 深度队列
|
|
|
pub spread_vec: Vec<Decimal>, // 价差队列
|
|
|
pub record_vec: VecDeque<Record>, // 蜡烛队列
|
|
|
+ pub trade_price_long_vec: FixedTimeRangeDeque<Decimal>, // 交易队列
|
|
|
|
|
|
pub mid_price: Decimal, // 中间价
|
|
|
pub fair_price: Decimal,
|
|
|
@@ -66,7 +67,7 @@ impl Predictor {
|
|
|
// 时间窗口大小(微秒)
|
|
|
// const MAX_TIME_RANGE_MICROS: i64 = 3 * 60_000_000;
|
|
|
// const TIME_DIFF_RANGE_MICROS: i64 = 15 * 60_000_000;
|
|
|
- // const TRADE_LONG_RANGE_MICROS: i64 = 60_000_000;
|
|
|
+ const TRADE_LONG_RANGE_MICROS: i64 = 10 * 60_000_000;
|
|
|
// const SPREAD_RANGE_MICROS: i64 = 15 * 60_000_000;
|
|
|
// const TRADE_SHORT_RANGE_MICROS: i64 = 2 * 60_000_000;
|
|
|
// const ONE_MILLION: Decimal = dec!(1_000_000);
|
|
|
@@ -128,6 +129,7 @@ impl Predictor {
|
|
|
|
|
|
record_vec: VecDeque::new(),
|
|
|
|
|
|
+ trade_price_long_vec: FixedTimeRangeDeque::new(Self::TRADE_LONG_RANGE_MICROS),
|
|
|
mid_price: Default::default(),
|
|
|
fair_price: Default::default(),
|
|
|
ask_price: Default::default(),
|
|
|
@@ -189,6 +191,8 @@ impl Predictor {
|
|
|
pub async fn on_trade(&mut self, trade: &Trade, _index: usize) {
|
|
|
self.last_price = trade.price;
|
|
|
|
|
|
+ self.trade_price_long_vec.push_back(trade.price);
|
|
|
+
|
|
|
// self.processor().await;
|
|
|
}
|
|
|
|
|
|
@@ -404,9 +408,16 @@ impl Predictor {
|
|
|
let last_price = Self::DONT_VIEW;
|
|
|
let fair_price = self.fair_price;
|
|
|
|
|
|
- let spread = self.signal;
|
|
|
- let spread_min = self.fair_price_vec[0] / self.mid_price - self.price_avg_times_vec[0];
|
|
|
- let spread_max = self.fair_price_vec[0] / self.mid_price - self.price_avg_times_long_vec[0];
|
|
|
+ let spread = if self.trade_price_long_vec.len() > 1 {
|
|
|
+ let front = self.trade_price_long_vec.deque.front().unwrap();
|
|
|
+ let back = self.trade_price_long_vec.deque.back().unwrap();
|
|
|
+
|
|
|
+ (back / front) - Decimal::ONE
|
|
|
+ } else {
|
|
|
+ Decimal::ZERO
|
|
|
+ };
|
|
|
+ let spread_min = Self::DONT_VIEW;
|
|
|
+ let spread_max = Self::DONT_VIEW;
|
|
|
// let spread = self.price_times_avg;
|
|
|
// let spread_max = self.fair_price_vec[1] / self.fair_price_vec[0];
|
|
|
// let spread_min = self.fair_price / self.mid_price;
|