|
|
@@ -360,14 +360,12 @@ impl Predictor {
|
|
|
long_rate.rescale(8);
|
|
|
|
|
|
// 重置开仓焦点,条件1
|
|
|
- if !self.fair_rate_focus_open.is_zero() {
|
|
|
- if self.fair_rate_focus_open > Decimal::ZERO && self.spread < Decimal::ZERO {
|
|
|
- self.fair_rate_focus_open = Decimal::ZERO;
|
|
|
- }
|
|
|
-
|
|
|
- if self.fair_rate_focus_open < Decimal::ZERO && self.spread > Decimal::ZERO {
|
|
|
- self.fair_rate_focus_open = Decimal::ZERO;
|
|
|
- }
|
|
|
+ if !self.fair_rate_focus_open.is_zero() && self.spread.abs() < self.params.open_activate {
|
|
|
+ self.fair_rate_focus_open = Decimal::ZERO;
|
|
|
+ }
|
|
|
+ // 重置开仓焦点,条件2
|
|
|
+ if !self.fair_rate_focus_open.is_zero() && !self.inventory.is_zero() {
|
|
|
+ self.fair_rate_focus_open = Decimal::ZERO;
|
|
|
}
|
|
|
|
|
|
// 更新程序关注的开仓焦点
|
|
|
@@ -388,28 +386,16 @@ impl Predictor {
|
|
|
|
|
|
// ============================ 平仓逻辑处理 =======================
|
|
|
// close_rate:
|
|
|
- // 大于0:当前价格在均线之上
|
|
|
- // 小于0:当前价格在均线之下
|
|
|
- let close_rate = self.spread.clone();
|
|
|
+ // 大于0:fair>mm
|
|
|
+ // 小于0:fair<mm
|
|
|
// 重置平仓焦点,条件1
|
|
|
if !self.fair_rate_focus_close.is_zero() && self.inventory.is_zero() {
|
|
|
self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
}
|
|
|
- // // 重置平仓焦点,条件2
|
|
|
- // if !self.fair_rate_focus_close.is_zero() {
|
|
|
- // if self.fair_rate_focus_close > Decimal::ZERO && close_rate < Decimal::ZERO {
|
|
|
- // self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
- // }
|
|
|
- //
|
|
|
- // if self.fair_rate_focus_close < Decimal::ZERO && close_rate > Decimal::ZERO {
|
|
|
- // self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
- // }
|
|
|
- // }
|
|
|
// 更新程序关注的平仓焦点
|
|
|
- let close_activate = Decimal::ZERO;
|
|
|
- if self.fair_rate_focus_close.is_zero() && !self.inventory.is_zero() && close_rate.abs() > close_activate {
|
|
|
+ if self.fair_rate_focus_close.is_zero() && !self.inventory.is_zero() {
|
|
|
// 多单平仓逻辑
|
|
|
- if self.inventory > Decimal::ZERO && close_rate < Decimal::ZERO {
|
|
|
+ if self.inventory > Decimal::ZERO && self.spread_ema_1000 < Decimal::ZERO {
|
|
|
// 是否强干扰平仓
|
|
|
let target_price = if self.params.is_strong_interfere {
|
|
|
self.pos_avg_price + self.params.open_activate * self.mid_price * self.t_diff * dec!(0.5)
|
|
|
@@ -418,16 +404,16 @@ impl Predictor {
|
|
|
};
|
|
|
|
|
|
if self.mid_price > target_price {
|
|
|
- self.fair_rate_focus_close = close_rate;
|
|
|
+ self.fair_rate_focus_close = self.spread_ema_1000;
|
|
|
self.fair_price_focus_close = self.fair_price;
|
|
|
} else if self.t_diff.is_zero() {
|
|
|
- self.fair_rate_focus_close = close_rate;
|
|
|
+ self.fair_rate_focus_close = self.spread_ema_1000;
|
|
|
self.fair_price_focus_close = self.fair_price;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 空单平仓逻辑
|
|
|
- if self.inventory < Decimal::ZERO && close_rate > Decimal::ZERO {
|
|
|
+ if self.inventory < Decimal::ZERO && self.spread_ema_1000 > Decimal::ZERO {
|
|
|
// 是否强干扰平仓
|
|
|
let target_price = if self.params.is_strong_interfere {
|
|
|
self.pos_avg_price - self.params.open_activate * self.mid_price * self.t_diff * dec!(0.5)
|
|
|
@@ -436,10 +422,10 @@ impl Predictor {
|
|
|
};
|
|
|
|
|
|
if self.mid_price < target_price {
|
|
|
- self.fair_rate_focus_close = close_rate;
|
|
|
+ self.fair_rate_focus_close = self.spread_ema_1000;
|
|
|
self.fair_price_focus_close = self.fair_price;
|
|
|
} else if self.t_diff.is_zero() {
|
|
|
- self.fair_rate_focus_close = close_rate;
|
|
|
+ self.fair_rate_focus_close = self.spread_ema_1000;
|
|
|
self.fair_price_focus_close = self.fair_price;
|
|
|
}
|
|
|
}
|