|
|
@@ -257,7 +257,7 @@ impl Predictor {
|
|
|
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.9995) + dec!(0.0005) * self.fair_price_vec[index] / self.mid_price
|
|
|
+ self.price_avg_times_vec[index] * dec!(0.9998) + dec!(0.0002) * 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
|
|
|
@@ -270,16 +270,17 @@ impl Predictor {
|
|
|
|
|
|
// 开仓信号处理
|
|
|
self.signal = Decimal::ZERO;
|
|
|
- for (i, fair_price_std) in self.fair_price_std_vec.iter().enumerate() {
|
|
|
- if fair_price_std.is_zero() {
|
|
|
+ for (i, price_avg_times_long) in self.price_avg_times_long_vec.iter().enumerate() {
|
|
|
+ if price_avg_times_long.is_zero() {
|
|
|
return;
|
|
|
}
|
|
|
+ let price_avg_times_short = self.price_avg_times_vec[i];
|
|
|
|
|
|
- self.spread_vec[i] = fair_price_std - self.mid_price;
|
|
|
+ self.spread_vec[i] = price_avg_times_short - price_avg_times_long;
|
|
|
self.signal = self.signal + self.spread_vec[i];
|
|
|
}
|
|
|
- self.signal = self.signal / self.params.min_spread;
|
|
|
- self.signal.rescale(0);
|
|
|
+ // self.signal = self.signal / self.params.min_spread;
|
|
|
+ // self.signal.rescale(0);
|
|
|
|
|
|
// 生成最终用于挂单的公平价格
|
|
|
let fair_price_sum: Decimal = self.fair_price_std_vec.iter().sum();
|
|
|
@@ -312,8 +313,8 @@ impl Predictor {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- let is_close_long = self.inventory > Decimal::ZERO;
|
|
|
- let is_close_short = self.inventory < Decimal::ZERO;
|
|
|
+ let is_close_long = self.inventory > Decimal::ZERO && self.signal > Decimal::ZERO;
|
|
|
+ let is_close_short = self.inventory < Decimal::ZERO && self.signal < Decimal::ZERO;
|
|
|
|
|
|
if is_close_long {
|
|
|
self.ask_delta = dec!(0);
|
|
|
@@ -332,13 +333,13 @@ impl Predictor {
|
|
|
self.bid_delta = dec!(0);
|
|
|
self.ask_delta = dec!(-2);
|
|
|
|
|
|
- self.optimal_bid_price = self.fair_price - self.fair_price * self.params.open;
|
|
|
+ self.optimal_bid_price = self.fair_price - self.fair_price * (self.params.open - self.signal);
|
|
|
self.optimal_ask_price = Self::DONT_VIEW;
|
|
|
} else if self.signal < Decimal::ZERO {
|
|
|
self.ask_delta = dec!(0);
|
|
|
self.bid_delta = dec!(-2);
|
|
|
|
|
|
- self.optimal_ask_price = self.fair_price + self.fair_price * self.params.open;
|
|
|
+ self.optimal_ask_price = self.fair_price + self.fair_price * (self.params.open + self.signal);
|
|
|
self.optimal_bid_price = Self::DONT_VIEW;
|
|
|
} else {
|
|
|
self.bid_delta = dec!(0);
|