|
|
@@ -417,16 +417,16 @@ impl Predictor {
|
|
|
}
|
|
|
// 更新程序关注的开仓焦点
|
|
|
if self.fair_rate_focus_open.is_zero() && self.inventory.is_zero() {
|
|
|
- // 只有有强度的rate才有资格被称为针
|
|
|
- if rate.abs() > self.params.open_activate {
|
|
|
+ // 只有有强度的rate才有资格被称为针,并且差价够大,
|
|
|
+ if rate.abs() > self.params.open_activate && self.spread.abs() > self.params.min_spread {
|
|
|
// 向上涨,并且fair下穿mid,视为观测阶段开始
|
|
|
- if rate > Decimal::ZERO {
|
|
|
+ if rate > Decimal::ZERO && self.spread < Decimal::ZERO {
|
|
|
self.fair_rate_focus_open = rate;
|
|
|
self.mid_price_focus_open = self.mid_price;
|
|
|
}
|
|
|
|
|
|
// 向下跌,并且fair上穿mid,视为观测阶段开始
|
|
|
- if rate < Decimal::ZERO {
|
|
|
+ if rate < Decimal::ZERO && self.spread < Decimal::ZERO {
|
|
|
self.fair_rate_focus_open = rate;
|
|
|
self.mid_price_focus_open = self.mid_price;
|
|
|
}
|
|
|
@@ -455,18 +455,11 @@ impl Predictor {
|
|
|
}
|
|
|
}
|
|
|
// 更新程序关注的平仓焦点
|
|
|
- let close_activate = self.params.open_activate / Decimal::TWO;
|
|
|
+ let close_activate = self.params.open_activate;
|
|
|
if self.fair_rate_focus_close.is_zero() && !self.inventory.is_zero() && close_rate.abs() > close_activate {
|
|
|
// 多单平仓逻辑
|
|
|
if self.inventory > Decimal::ZERO && close_rate > 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
|
|
|
- } else {
|
|
|
- self.pos_avg_price
|
|
|
- };
|
|
|
-
|
|
|
- if self.mid_price > target_price {
|
|
|
+ if self.profit_point > Decimal::ZERO {
|
|
|
self.fair_rate_focus_close = close_rate;
|
|
|
self.fair_price_focus_close = self.mid_price;
|
|
|
} else if self.t_diff.is_zero() {
|
|
|
@@ -477,14 +470,7 @@ impl Predictor {
|
|
|
|
|
|
// 空单平仓逻辑
|
|
|
if self.inventory < Decimal::ZERO && close_rate < 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
|
|
|
- } else {
|
|
|
- self.pos_avg_price
|
|
|
- };
|
|
|
-
|
|
|
- if self.mid_price < target_price {
|
|
|
+ if self.profit_point > Decimal::ZERO {
|
|
|
self.fair_rate_focus_close = close_rate;
|
|
|
self.fair_price_focus_close = self.fair_price;
|
|
|
} else if self.t_diff.is_zero() {
|
|
|
@@ -494,20 +480,20 @@ impl Predictor {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // ============================ 止损逻辑处理1 =======================
|
|
|
- if self.fair_rate_focus_close.is_zero() && !self.inventory.is_zero() && self.profit_point < dec!(-0.01) {
|
|
|
- self.fair_rate_focus_close = dec!(-0.11);
|
|
|
- self.fair_price_focus_close = self.mid_price;
|
|
|
-
|
|
|
- // let prev_open_activate = self.params.open_activate;
|
|
|
- // self.params.open_activate = self.params.open_activate * dec!(1.5);
|
|
|
-
|
|
|
- info!("----------------------------------------");
|
|
|
- // info!("止损,参数调整:{} -> {}", prev_open_activate, self.params.open_activate);
|
|
|
- info!("硬止损, 在价格{}处,成本价{},价值={}, p={}。", self.fair_price_focus_close, self.pos_avg_price, self.pos_avg_price*self.pos_amount, self.profit_point);
|
|
|
- info!("----------------------------------------");
|
|
|
- }
|
|
|
- // ============================ 止损逻辑处理2 =======================
|
|
|
+ // ============================ 平仓特殊逻辑处理1 =======================
|
|
|
+ // if self.fair_rate_focus_close.is_zero() && !self.inventory.is_zero() && self.profit_point < dec!(-0.01) {
|
|
|
+ // self.fair_rate_focus_close = dec!(-0.11);
|
|
|
+ // self.fair_price_focus_close = self.mid_price;
|
|
|
+ //
|
|
|
+ // // let prev_open_activate = self.params.open_activate;
|
|
|
+ // // self.params.open_activate = self.params.open_activate * dec!(1.5);
|
|
|
+ //
|
|
|
+ // info!("----------------------------------------");
|
|
|
+ // // info!("止损,参数调整:{} -> {}", prev_open_activate, self.params.open_activate);
|
|
|
+ // info!("硬止损, 在价格{}处,成本价{},价值={}, p={}。", self.fair_price_focus_close, self.pos_avg_price, self.pos_avg_price*self.pos_amount, self.profit_point);
|
|
|
+ // info!("----------------------------------------");
|
|
|
+ // }
|
|
|
+ // ============================ 平仓特殊逻辑处理2 =======================
|
|
|
if self.fair_rate_focus_close.is_zero() && !self.inventory.is_zero() && self.profit_point_vec.len() > 1 {
|
|
|
let prev_profit_point = self.profit_point_vec[self.profit_point_vec.len() - 2];
|
|
|
let profit_point = self.profit_point_vec[self.profit_point_vec.len() - 1];
|
|
|
@@ -566,8 +552,8 @@ impl Predictor {
|
|
|
// let is_open_long = self.spread_sma_1000 - self.spread_sma > self.params.open && self.fair_price > self.mid_price;
|
|
|
// let is_open_short = self.spread_sma_1000 - self.spread_sma < self.params.open * Decimal::NEGATIVE_ONE && self.fair_price < self.mid_price;
|
|
|
// 可能是接针
|
|
|
- let is_open_long = self.fair_rate_focus_open < Decimal::ZERO && self.fair_price > self.mid_price;
|
|
|
- let is_open_short = self.fair_rate_focus_open > Decimal::ZERO && self.fair_price < self.mid_price;
|
|
|
+ let is_open_long = self.fair_rate_focus_open < Decimal::ZERO;
|
|
|
+ let is_open_short = self.fair_rate_focus_open > Decimal::ZERO;
|
|
|
let is_close_long = self.inventory > Decimal::ZERO && (self.fair_rate_focus_close > Decimal::ZERO || self.fair_rate_focus_close < dec!(-0.1));
|
|
|
let is_close_short = self.inventory < Decimal::ZERO && (self.fair_rate_focus_close < Decimal::ZERO || self.fair_rate_focus_close < dec!(-0.1));
|
|
|
|