|
|
@@ -155,7 +155,7 @@ impl Predictor {
|
|
|
ask_delta: Default::default(),
|
|
|
bid_delta: Default::default(),
|
|
|
|
|
|
- fair_price_time_vec: FixedTimeRangeDeque::new(50_000),
|
|
|
+ fair_price_time_vec: FixedTimeRangeDeque::new(10_000),
|
|
|
mid_price_time_vec: FixedTimeRangeDeque::new(100_000),
|
|
|
spread_sma_1000_time_vec: FixedTimeRangeDeque::new(500_000),
|
|
|
fair_price: Default::default(),
|
|
|
@@ -260,9 +260,9 @@ impl Predictor {
|
|
|
self.close_price = self.fair_price_when_ordering;
|
|
|
}
|
|
|
|
|
|
- if prev_inventory != self.inventory && self.inventory.is_zero() {
|
|
|
- self.is_regressed = false;
|
|
|
- }
|
|
|
+ // if prev_inventory != self.inventory && self.inventory.is_zero() {
|
|
|
+ // self.is_regressed = false;
|
|
|
+ // }
|
|
|
|
|
|
self.update_level().await;
|
|
|
self.processor().await;
|
|
|
@@ -304,17 +304,14 @@ impl Predictor {
|
|
|
self.fair_price_time_vec.push_back(self.fair_price);
|
|
|
|
|
|
// 重置焦点,条件1
|
|
|
- if !self.fair_rate_focus.is_zero() && self.mid_price_time_vec.deque.len() >= 2 && self.fair_price_time_vec.deque.len() >= 2 {
|
|
|
- let mid_price_prev = self.mid_price_time_vec.deque.get(self.mid_price_time_vec.deque.len() - 2).unwrap();
|
|
|
- let fair_price_prev = self.fair_price_time_vec.deque.get(self.fair_price_time_vec.deque.len() - 2).unwrap();
|
|
|
-
|
|
|
+ if !self.fair_rate_focus.is_zero() {
|
|
|
// 向上涨,并且mid下穿fair,视为观测阶段结束
|
|
|
- if self.fair_rate_focus > Decimal::ZERO && mid_price_prev > fair_price_prev && self.mid_price < self.fair_price {
|
|
|
+ if self.fair_rate_focus > Decimal::ZERO && self.spread_sma_1000 < Decimal::ZERO {
|
|
|
self.fair_rate_focus = Decimal::ZERO;
|
|
|
}
|
|
|
|
|
|
// 向下跌,并且mid上穿fair,视为观测阶段结束
|
|
|
- if self.fair_rate_focus < Decimal::ZERO && mid_price_prev < fair_price_prev && self.mid_price > self.fair_price {
|
|
|
+ if self.fair_rate_focus < Decimal::ZERO && self.spread_sma_1000 > Decimal::ZERO {
|
|
|
self.fair_rate_focus = Decimal::ZERO;
|
|
|
}
|
|
|
}
|
|
|
@@ -333,24 +330,24 @@ impl Predictor {
|
|
|
// 只有有强度的rate才有资格被称为针
|
|
|
if rate.abs() > self.params.open {
|
|
|
// 向上涨,并且fair下穿mid,视为观测阶段开始
|
|
|
- if rate > Decimal::ZERO && self.mid_price > self.fair_price {
|
|
|
+ if rate > Decimal::ZERO && self.spread_sma_1000 > Decimal::ZERO {
|
|
|
self.fair_rate_focus = rate;
|
|
|
}
|
|
|
|
|
|
// 向下跌,并且fair上穿mid,视为观测阶段开始
|
|
|
- if rate < Decimal::ZERO && self.mid_price < self.fair_price {
|
|
|
+ if rate < Decimal::ZERO && self.spread_sma_1000 < Decimal::ZERO {
|
|
|
self.fair_rate_focus = rate;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 判断价格是否回归
|
|
|
- if !self.is_regressed && self.inventory > Decimal::ZERO && self.spread_sma_1000 < max(self.spread_sma, self.spread_sma_2000) {
|
|
|
- self.is_regressed = true
|
|
|
- } else if !self.is_regressed && self.inventory < Decimal::ZERO && self.spread_sma_1000 > min(self.spread_sma, self.spread_sma_2000) {
|
|
|
- self.is_regressed = true
|
|
|
- }
|
|
|
+ // // 判断价格是否回归
|
|
|
+ // if !self.is_regressed && self.inventory > Decimal::ZERO && self.spread_sma_1000 < max(self.spread_sma, self.spread_sma_2000) {
|
|
|
+ // self.is_regressed = true
|
|
|
+ // } else if !self.is_regressed && self.inventory < Decimal::ZERO && self.spread_sma_1000 > min(self.spread_sma, self.spread_sma_2000) {
|
|
|
+ // self.is_regressed = true
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
pub fn update_spread(&mut self) {
|
|
|
@@ -553,7 +550,13 @@ impl Predictor {
|
|
|
let optimal_bid_price = self.optimal_bid_price;
|
|
|
|
|
|
let inventory = self.inventory;
|
|
|
- let sigma_square = if self.is_regressed { Decimal::ONE } else { Decimal::ZERO };
|
|
|
+
|
|
|
+ let last_fair_price = self.fair_price_time_vec.deque.iter().last().unwrap();
|
|
|
+ let first_fair_price = self.fair_price_time_vec.deque[0];
|
|
|
+ let mut rate = (last_fair_price - first_fair_price) / first_fair_price;
|
|
|
+ rate.rescale(8);
|
|
|
+
|
|
|
+ let sigma_square = rate;
|
|
|
let gamma = now - self.last_update_time;
|
|
|
|
|
|
let kappa = self.fair_rate_focus;
|