|
@@ -21,6 +21,7 @@ pub struct Predictor {
|
|
|
pub trade_long_vec: FixedTimeRangeDeque<Trade>, // 交易队列
|
|
pub trade_long_vec: FixedTimeRangeDeque<Trade>, // 交易队列
|
|
|
pub trade_short_vec: FixedTimeRangeDeque<Trade>, // 交易队列
|
|
pub trade_short_vec: FixedTimeRangeDeque<Trade>, // 交易队列
|
|
|
pub trade_fixed_vec: Vec<Trade>, // 交易队列(观察持仓后的资金流)
|
|
pub trade_fixed_vec: Vec<Trade>, // 交易队列(观察持仓后的资金流)
|
|
|
|
|
+ pub profit_fixed_vec: Vec<Decimal>, // 利润队列
|
|
|
pub spread_vec: Vec<Decimal>, // 价差队列
|
|
pub spread_vec: Vec<Decimal>, // 价差队列
|
|
|
pub record_vec: VecDeque<Record>, // 蜡烛队列
|
|
pub record_vec: VecDeque<Record>, // 蜡烛队列
|
|
|
|
|
|
|
@@ -146,6 +147,7 @@ impl Predictor {
|
|
|
trade_long_vec: FixedTimeRangeDeque::new(Self::TRADE_LONG_RANGE_MICROS),
|
|
trade_long_vec: FixedTimeRangeDeque::new(Self::TRADE_LONG_RANGE_MICROS),
|
|
|
trade_short_vec: FixedTimeRangeDeque::new(Self::TRADE_SHORT_RANGE_MICROS),
|
|
trade_short_vec: FixedTimeRangeDeque::new(Self::TRADE_SHORT_RANGE_MICROS),
|
|
|
trade_fixed_vec: vec![],
|
|
trade_fixed_vec: vec![],
|
|
|
|
|
+ profit_fixed_vec: vec![],
|
|
|
record_vec: VecDeque::new(),
|
|
record_vec: VecDeque::new(),
|
|
|
|
|
|
|
|
mid_price: Default::default(),
|
|
mid_price: Default::default(),
|
|
@@ -212,6 +214,16 @@ impl Predictor {
|
|
|
self.mid_price = (self.ask_price + self.bid_price) / Decimal::TWO;
|
|
self.mid_price = (self.ask_price + self.bid_price) / Decimal::TWO;
|
|
|
|
|
|
|
|
self.mid_price_time_vec.push_back(self.mid_price);
|
|
self.mid_price_time_vec.push_back(self.mid_price);
|
|
|
|
|
+
|
|
|
|
|
+ if !self.inventory.is_zero() {
|
|
|
|
|
+ let profit_now = if self.inventory > Decimal::ZERO {
|
|
|
|
|
+ (self.mid_price - self.pos_avg_price) / self.pos_avg_price
|
|
|
|
|
+ } else {
|
|
|
|
|
+ (self.pos_avg_price - self.mid_price) / self.pos_avg_price
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ self.profit_fixed_vec.push(profit_now);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
self.update_fair_price(depth, index).await;
|
|
self.update_fair_price(depth, index).await;
|
|
@@ -292,6 +304,8 @@ impl Predictor {
|
|
|
// 重置资金流计算
|
|
// 重置资金流计算
|
|
|
if prev_inventory != self.inventory && self.inventory.is_zero() {
|
|
if prev_inventory != self.inventory && self.inventory.is_zero() {
|
|
|
self.trade_fixed_vec.clear();
|
|
self.trade_fixed_vec.clear();
|
|
|
|
|
+ self.profit_fixed_vec.clear();
|
|
|
|
|
+
|
|
|
self.error_rate = Decimal::ZERO;
|
|
self.error_rate = Decimal::ZERO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -662,7 +676,7 @@ impl Predictor {
|
|
|
let inventory = self.inventory;
|
|
let inventory = self.inventory;
|
|
|
|
|
|
|
|
// 这个是过去一段时间的价格变化幅度显示
|
|
// 这个是过去一段时间的价格变化幅度显示
|
|
|
- let sigma_square = self.trades_volume_short_ema;
|
|
|
|
|
|
|
+ let sigma_square = self.profit_fixed_vec.iter().sum();
|
|
|
// let sigma_square = self.error_rate;
|
|
// let sigma_square = self.error_rate;
|
|
|
|
|
|
|
|
let gamma = self.fair_rate_focus_open;
|
|
let gamma = self.fair_rate_focus_open;
|