|
|
@@ -159,9 +159,9 @@ impl Predictor {
|
|
|
|
|
|
record_vec: VecDeque::new(),
|
|
|
|
|
|
- mid_price_long_vec: FixedTimeRangeDeque::new(5_000_000),
|
|
|
- mid_price_short_vec: FixedTimeRangeDeque::new(1_000_000),
|
|
|
- fair_price_short_vec: FixedTimeRangeDeque::new(1_000_000),
|
|
|
+ mid_price_long_vec: FixedTimeRangeDeque::new(10_000_000),
|
|
|
+ mid_price_short_vec: FixedTimeRangeDeque::new(2_000_000),
|
|
|
+ fair_price_short_vec: FixedTimeRangeDeque::new(2_000_000),
|
|
|
|
|
|
spread_vec: VecDeque::new(),
|
|
|
mid_price: Default::default(),
|
|
|
@@ -430,35 +430,30 @@ impl Predictor {
|
|
|
let prev_ask_delta = self.ask_delta;
|
|
|
|
|
|
let now = Decimal::from(Utc::now().timestamp_millis());
|
|
|
- let is_holding_time_over = dec!(2) * dec!(60_000);
|
|
|
|
|
|
let is_close_long = self.inventory > Decimal::ZERO && (
|
|
|
- // 反转平仓1
|
|
|
- (self.trend_long_rate > dec!(0.005))
|
|
|
- // 达到最大持仓时间还未盈利就平仓
|
|
|
- || (now - self.prev_open_time > is_holding_time_over && self.mid_price < self.pos_avg_price)
|
|
|
- // 达到最大持仓时间,追踪止盈
|
|
|
- || (now - self.prev_open_time > is_holding_time_over && self.profit < self.profit_high * dec!(0.75))
|
|
|
+ // 硬止损
|
|
|
+ (self.profit < dec!(-0.01))
|
|
|
+ // 利润较大时,追踪止盈
|
|
|
+ || (self.profit_high > dec!(0.01) && self.profit < self.profit_high * dec!(0.75))
|
|
|
);
|
|
|
let is_close_short = self.inventory < Decimal::ZERO && (
|
|
|
- // 反转平仓1
|
|
|
- (self.trend_long_rate < dec!(-0.005))
|
|
|
- // 达到最大持仓时间还未盈利就平仓
|
|
|
- || (now - self.prev_open_time > is_holding_time_over && self.mid_price > self.pos_avg_price)
|
|
|
- // 达到最大持仓时间,追踪止盈
|
|
|
- || (now - self.prev_open_time > is_holding_time_over && self.profit < self.profit_high * dec!(0.75))
|
|
|
+ // 硬止损
|
|
|
+ (self.profit < dec!(-0.01))
|
|
|
+ // 利润较大时,追踪止盈
|
|
|
+ || (self.profit_high > dec!(0.01) && self.profit < self.profit_high * dec!(0.75))
|
|
|
);
|
|
|
let is_open_long = self.inventory.is_zero()
|
|
|
&& self.fair_price > self.mid_price * (Decimal::ONE + self.params.open)
|
|
|
&& self.trend_long_rate < dec!(-0.005)
|
|
|
- && self.trend_short_rate < Decimal::ZERO
|
|
|
&& self.fair_rate > Decimal::ZERO
|
|
|
+ && self.fair_rate > self.trend_short_rate + dec!(0.0001)
|
|
|
;
|
|
|
let is_open_short = self.inventory.is_zero()
|
|
|
&& self.fair_price < self.mid_price * (Decimal::ONE - self.params.open)
|
|
|
&& self.trend_long_rate > dec!(0.005)
|
|
|
- && self.trend_short_rate > Decimal::ZERO
|
|
|
&& self.fair_rate < Decimal::ZERO
|
|
|
+ && self.fair_rate < self.trend_short_rate - dec!(0.0001)
|
|
|
;
|
|
|
|
|
|
// 使信号有一定持续性
|
|
|
@@ -477,9 +472,9 @@ impl Predictor {
|
|
|
self.trade_condition_time = now;
|
|
|
}
|
|
|
|
|
|
- // 开仓信号要过期,只保留5秒
|
|
|
+ // 开仓信号要过期,只保留2秒
|
|
|
if (self.trade_condition == dec!(3) || self.trade_condition == dec!(4))
|
|
|
- && now - self.trade_condition_time > dec!(5_000) {
|
|
|
+ && now - self.trade_condition_time > dec!(2_000) {
|
|
|
self.trade_condition = Decimal::ZERO;
|
|
|
}
|
|
|
|