|
|
@@ -45,6 +45,7 @@ pub struct Predictor {
|
|
|
pub fair_price_vec: Vec<Decimal>, // 公平价格列表
|
|
|
pub fair_price_std_vec: Vec<Decimal>, // 公平价格列表,标准化之后的
|
|
|
pub price_avg_times_vec: Vec<Decimal>, // 公平所与做市所的价格倍率的平均值
|
|
|
+ pub price_avg_times_long_vec: Vec<Decimal>, // 公平所与做市所的价格倍率的平均值
|
|
|
|
|
|
pub is_ready: bool, // 是否已准备好
|
|
|
|
|
|
@@ -122,6 +123,7 @@ impl Predictor {
|
|
|
fair_price_std_vec: vec![Decimal::ZERO; params.ref_exchange.len()],
|
|
|
fair_price_vec: vec![Decimal::ZERO; params.ref_exchange.len()],
|
|
|
price_avg_times_vec: vec![Decimal::ZERO; params.ref_exchange.len()],
|
|
|
+ price_avg_times_long_vec: vec![Decimal::ZERO; params.ref_exchange.len()],
|
|
|
spread_vec: vec![Decimal::ZERO; params.ref_exchange.len()],
|
|
|
|
|
|
record_vec: VecDeque::new(),
|
|
|
@@ -252,10 +254,15 @@ impl Predictor {
|
|
|
self.fair_price_vec[index].rescale(self.mid_price.scale());
|
|
|
|
|
|
// 求价格倍率
|
|
|
- self.price_avg_times_vec[index] = if self.price_avg_times_vec[index].is_zero() {
|
|
|
+ self.price_avg_times_vec[index] = if !self.is_ready {
|
|
|
self.fair_price_vec[index] / self.mid_price
|
|
|
} else {
|
|
|
- self.price_avg_times_vec[index] * dec!(0.9999) + dec!(0.0001) * self.fair_price_vec[index] / self.mid_price
|
|
|
+ self.price_avg_times_vec[index] * dec!(0.999) + dec!(0.001) * self.fair_price_vec[index] / self.mid_price
|
|
|
+ };
|
|
|
+ self.price_avg_times_long_vec[index] = if !self.is_ready {
|
|
|
+ self.fair_price_vec[index] / self.mid_price
|
|
|
+ } else {
|
|
|
+ self.price_avg_times_long_vec[index] * dec!(0.9999) + dec!(0.0001) * self.fair_price_vec[index] / self.mid_price
|
|
|
};
|
|
|
|
|
|
// 合成公平价格
|
|
|
@@ -396,9 +403,9 @@ impl Predictor {
|
|
|
let last_price = Self::DONT_VIEW;
|
|
|
let fair_price = Self::DONT_VIEW;
|
|
|
|
|
|
- let spread = self.mid_price;
|
|
|
- let spread_min = self.fair_price_std_vec[0];
|
|
|
- let spread_max = self.fair_price_vec[0];
|
|
|
+ let spread = self.fair_price_vec[0] / self.mid_price;
|
|
|
+ let spread_min = self.price_avg_times_vec[0];
|
|
|
+ let spread_max = self.price_avg_times_long_vec[0];
|
|
|
// 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;
|