|
|
@@ -441,62 +441,74 @@ impl Predictor {
|
|
|
// close_rate:
|
|
|
// 大于0:当前价格在均线之上
|
|
|
// 小于0:当前价格在均线之下
|
|
|
- let close_rate = mid_rate.clone();
|
|
|
+ // let close_rate = mid_rate.clone();
|
|
|
// 重置平仓焦点,条件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() && self.fair_rate_focus_close > dec!(-0.1) {
|
|
|
- let focus_rate = (self.mid_price - self.fair_price_focus_close) / self.fair_price_focus_close;
|
|
|
-
|
|
|
- if self.fair_rate_focus_close > Decimal::ZERO && focus_rate < Decimal::NEGATIVE_ONE * self.params.close_activate / Decimal::TWO {
|
|
|
- self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
- }
|
|
|
-
|
|
|
- if self.fair_rate_focus_close < Decimal::ZERO && focus_rate > self.params.close_activate / Decimal::TWO {
|
|
|
- self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
- }
|
|
|
- }
|
|
|
+ // if !self.fair_rate_focus_close.is_zero() && self.fair_rate_focus_close > dec!(-0.1) {
|
|
|
+ // let focus_rate = (self.mid_price - self.fair_price_focus_close) / self.fair_price_focus_close;
|
|
|
+ //
|
|
|
+ // if self.fair_rate_focus_close > Decimal::ZERO && focus_rate < Decimal::NEGATIVE_ONE * self.params.close_activate / Decimal::TWO {
|
|
|
+ // self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // if self.fair_rate_focus_close < Decimal::ZERO && focus_rate > self.params.close_activate / Decimal::TWO {
|
|
|
+ // self.fair_rate_focus_close = Decimal::ZERO;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
// 更新程序关注的平仓焦点
|
|
|
- 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 {
|
|
|
- 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() {
|
|
|
- self.fair_rate_focus_close = close_rate;
|
|
|
- self.fair_price_focus_close = self.mid_price;
|
|
|
- }
|
|
|
+ // 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 {
|
|
|
+ // 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() {
|
|
|
+ // self.fair_rate_focus_close = close_rate;
|
|
|
+ // self.fair_price_focus_close = self.mid_price;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 空单平仓逻辑
|
|
|
+ // if self.inventory < Decimal::ZERO && close_rate < Decimal::ZERO {
|
|
|
+ // 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() {
|
|
|
+ // self.fair_rate_focus_close = close_rate;
|
|
|
+ // self.fair_price_focus_close = self.fair_price;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // 15秒以后平仓
|
|
|
+ let is_time_over = Utc::now().timestamp_micros() - self.prev_trade_time > 20 * 1_000_000;
|
|
|
+ if self.fair_rate_focus_close.is_zero() && !self.inventory.is_zero() && is_time_over {
|
|
|
+ if self.inventory > Decimal::ZERO {
|
|
|
+ self.fair_rate_focus_close = dec!(0.01);
|
|
|
+ self.fair_price_focus_close = self.mid_price;
|
|
|
}
|
|
|
-
|
|
|
- // 空单平仓逻辑
|
|
|
- if self.inventory < Decimal::ZERO && close_rate < Decimal::ZERO {
|
|
|
- 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() {
|
|
|
- self.fair_rate_focus_close = close_rate;
|
|
|
- self.fair_price_focus_close = self.fair_price;
|
|
|
- }
|
|
|
+ if self.inventory < Decimal::ZERO {
|
|
|
+ self.fair_rate_focus_close = dec!(-0.01);
|
|
|
+ self.fair_price_focus_close = self.mid_price;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// ============================ 平仓特殊逻辑处理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!("----------------------------------------");
|
|
|
- // }
|
|
|
+ if self.fair_rate_focus_close.is_zero() && !self.inventory.is_zero() && self.profit_point < dec!(-0.002) {
|
|
|
+ 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];
|
|
|
@@ -570,12 +582,21 @@ impl Predictor {
|
|
|
// let close_rate = (self.error_rate / dec!(0.5)) * self.params.close;
|
|
|
//
|
|
|
// self.ask_delta = self.mid_price * close_rate;
|
|
|
- self.ask_delta = self.mid_price * self.params.close;
|
|
|
+ if self.fair_rate_focus_close < dec!(-0.1) {
|
|
|
+ self.ask_delta = dec!(-1);
|
|
|
+ } else {
|
|
|
+ self.ask_delta = self.mid_price * self.params.close;
|
|
|
+ }
|
|
|
} else if is_close_short {
|
|
|
// let close_rate = (self.error_rate / dec!(0.5)) * self.params.close;
|
|
|
//
|
|
|
// self.bid_delta = self.mid_price * close_rate;
|
|
|
- self.bid_delta = self.mid_price * self.params.close;
|
|
|
+
|
|
|
+ if self.fair_rate_focus_close < dec!(-0.1) {
|
|
|
+ self.bid_delta = dec!(-1);
|
|
|
+ } else {
|
|
|
+ self.bid_delta = self.mid_price * self.params.close;
|
|
|
+ }
|
|
|
} else if is_open_long {
|
|
|
// let is_open_long_market = self.spread_sma_1000 - self.spread_sma > self.params.open_market;
|
|
|
// self.bid_delta = if is_open_long_market {
|