|
@@ -53,7 +53,8 @@ pub struct Predictor {
|
|
|
pub mid_price_time_vec: FixedTimeRangeDeque<Decimal>, // 中间价格队列,
|
|
pub mid_price_time_vec: FixedTimeRangeDeque<Decimal>, // 中间价格队列,
|
|
|
pub fair_price_time_vec: FixedTimeRangeDeque<Decimal>, // 公平价格队列,
|
|
pub fair_price_time_vec: FixedTimeRangeDeque<Decimal>, // 公平价格队列,
|
|
|
pub fair_price_long_time_vec: FixedTimeRangeDeque<Decimal>, //
|
|
pub fair_price_long_time_vec: FixedTimeRangeDeque<Decimal>, //
|
|
|
- pub fair_price_vec: Vec<Decimal>, // 公平价格列表,0表示做市所,1表示参考所
|
|
|
|
|
|
|
+ pub fair_price_vec: Vec<Decimal>, // 公平价格列表,233表示做市所,其它表示参考所
|
|
|
|
|
+ pub price_times_avg_vec: Vec<Decimal>, // 公平所与做市所的价格倍率的平均值
|
|
|
pub fair_price: Decimal, // 公平价格
|
|
pub fair_price: Decimal, // 公平价格
|
|
|
pub fair_price_ema_short: Decimal, // 公平价格_ema
|
|
pub fair_price_ema_short: Decimal, // 公平价格_ema
|
|
|
pub fair_price_ema_long: Decimal, // 公平价格_ema
|
|
pub fair_price_ema_long: Decimal, // 公平价格_ema
|
|
@@ -62,7 +63,6 @@ pub struct Predictor {
|
|
|
pub fair_rate_focus_close: Decimal, // 变化幅度焦点
|
|
pub fair_rate_focus_close: Decimal, // 变化幅度焦点
|
|
|
pub fair_price_focus_close: Decimal, // 观测焦点时的价格
|
|
pub fair_price_focus_close: Decimal, // 观测焦点时的价格
|
|
|
pub fair_price_when_ordering: Decimal, // 下单时的公平价格
|
|
pub fair_price_when_ordering: Decimal, // 下单时的公平价格
|
|
|
- pub price_times_avg: Decimal, // 公平所与做市所的价格倍率的平均值
|
|
|
|
|
|
|
|
|
|
pub is_ready: bool, // 是否已准备好
|
|
pub is_ready: bool, // 是否已准备好
|
|
|
|
|
|
|
@@ -138,9 +138,9 @@ impl Predictor {
|
|
|
|
|
|
|
|
let predictor = Self {
|
|
let predictor = Self {
|
|
|
// 接针版本
|
|
// 接针版本
|
|
|
- depth_vec: vec![Depth::new(); 10],
|
|
|
|
|
- fair_price_vec: vec![Decimal::ZERO; 10],
|
|
|
|
|
- volume_vec: vec![Decimal::ZERO; 10],
|
|
|
|
|
|
|
+ depth_vec: vec![Depth::new(); params.ref_exchange.len()],
|
|
|
|
|
+ fair_price_vec: vec![Decimal::ZERO; params.ref_exchange.len()],
|
|
|
|
|
+ volume_vec: vec![Decimal::ZERO; params.ref_exchange.len()],
|
|
|
|
|
|
|
|
// 老的队列
|
|
// 老的队列
|
|
|
spread_vec: vec![],
|
|
spread_vec: vec![],
|
|
@@ -177,7 +177,7 @@ impl Predictor {
|
|
|
fair_price_focus_close: Default::default(),
|
|
fair_price_focus_close: Default::default(),
|
|
|
fair_price_when_ordering: Default::default(),
|
|
fair_price_when_ordering: Default::default(),
|
|
|
|
|
|
|
|
- price_times_avg: Default::default(),
|
|
|
|
|
|
|
+ price_times_avg_vec: Default::default(),
|
|
|
|
|
|
|
|
is_ready: false,
|
|
is_ready: false,
|
|
|
prev_trade_time: Utc::now().timestamp_micros(),
|
|
prev_trade_time: Utc::now().timestamp_micros(),
|
|
@@ -207,7 +207,7 @@ impl Predictor {
|
|
|
self.last_update_time = depth.time;
|
|
self.last_update_time = depth.time;
|
|
|
self.last_index = Decimal::from(index);
|
|
self.last_index = Decimal::from(index);
|
|
|
|
|
|
|
|
- if index == 0 {
|
|
|
|
|
|
|
+ if index == 233 {
|
|
|
self.ask_price = depth.asks[0].price;
|
|
self.ask_price = depth.asks[0].price;
|
|
|
self.bid_price = depth.bids[0].price;
|
|
self.bid_price = depth.bids[0].price;
|
|
|
self.mid_price = (self.ask_price + self.bid_price) / Decimal::TWO;
|
|
self.mid_price = (self.ask_price + self.bid_price) / Decimal::TWO;
|
|
@@ -357,16 +357,16 @@ impl Predictor {
|
|
|
|
|
|
|
|
// 合成公平价格
|
|
// 合成公平价格
|
|
|
if !self.fair_price_vec[0].is_zero() && !self.fair_price_vec[1].is_zero() {
|
|
if !self.fair_price_vec[0].is_zero() && !self.fair_price_vec[1].is_zero() {
|
|
|
- self.price_times_avg = if self.price_times_avg.is_zero() {
|
|
|
|
|
|
|
+ self.price_times_avg_vec[index] = if self.price_times_avg_vec[index].is_zero() {
|
|
|
self.fair_price_vec[1] / self.fair_price_vec[0]
|
|
self.fair_price_vec[1] / self.fair_price_vec[0]
|
|
|
} else {
|
|
} else {
|
|
|
- self.price_times_avg * dec!(0.9995) + dec!(0.0005) * self.fair_price_vec[1] / self.fair_price_vec[0]
|
|
|
|
|
|
|
+ self.price_times_avg_vec[index] * dec!(0.9995) + dec!(0.0005) * self.fair_price_vec[1] / self.fair_price_vec[0]
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 进行价格归一化处理,公平所的价格有可能是带前缀的
|
|
// 进行价格归一化处理,公平所的价格有可能是带前缀的
|
|
|
// let fair_price_part0 = self.fair_price_vec[0] * dec!(0.2);
|
|
// let fair_price_part0 = self.fair_price_vec[0] * dec!(0.2);
|
|
|
// let fair_price_part1 = (self.fair_price_vec[1] / self.price_times_avg) * dec!(0.8);
|
|
// let fair_price_part1 = (self.fair_price_vec[1] / self.price_times_avg) * dec!(0.8);
|
|
|
- self.fair_price = self.fair_price_vec[1] / self.price_times_avg;
|
|
|
|
|
|
|
+ self.fair_price = self.fair_price_vec[1] / self.price_times_avg_vec[index];
|
|
|
self.fair_price_time_vec.push_back(self.fair_price);
|
|
self.fair_price_time_vec.push_back(self.fair_price);
|
|
|
self.fair_price_long_time_vec.push_back(self.fair_price);
|
|
self.fair_price_long_time_vec.push_back(self.fair_price);
|
|
|
self.fair_price_ema_long = if self.fair_price_ema_long.is_zero() {
|
|
self.fair_price_ema_long = if self.fair_price_ema_long.is_zero() {
|
|
@@ -682,9 +682,9 @@ impl Predictor {
|
|
|
let last_price = self.last_price;
|
|
let last_price = self.last_price;
|
|
|
let fair_price = self.fair_price;
|
|
let fair_price = self.fair_price;
|
|
|
|
|
|
|
|
- let spread = self.profit_point;
|
|
|
|
|
- let spread_max = self.profit_point_ema;
|
|
|
|
|
- let spread_min = Self::DONT_VIEW;
|
|
|
|
|
|
|
+ let spread = self.mid_price;
|
|
|
|
|
+ let spread_max = self.fair_price_vec[1];
|
|
|
|
|
+ let spread_min = self.fair_price_vec[0];
|
|
|
// let spread = self.price_times_avg;
|
|
// let spread = self.price_times_avg;
|
|
|
// let spread_max = self.fair_price_vec[1] / self.fair_price_vec[0];
|
|
// let spread_max = self.fair_price_vec[1] / self.fair_price_vec[0];
|
|
|
// let spread_min = self.fair_price / self.mid_price;
|
|
// let spread_min = self.fair_price / self.mid_price;
|