Browse Source

平仓逻辑调整

skyffire 8 months ago
parent
commit
5fed33fe6c
1 changed files with 19 additions and 15 deletions
  1. 19 15
      strategy/src/predictor.rs

+ 19 - 15
strategy/src/predictor.rs

@@ -382,22 +382,26 @@ impl Predictor {
         let prev_ask_delta = self.ask_delta;
 
         let now = Decimal::from(Utc::now().timestamp_millis());
-        let is_holding_time_over = dec!(15) * dec!(60_000);
+        let is_holding_time_over = dec!(2) * dec!(60_000);
 
         let is_close_long = self.inventory > Decimal::ZERO && (
-            // 反转平仓
-            (self.fair_price < self.mid_price * (Decimal::ONE - self.params.close) && self.trend_rate > self.params.open * dec!(5))
-            // 达到最大持仓时间平仓
-            || (now - self.prev_open_time > is_holding_time_over)
+            // 反转平仓1
+            (self.fair_price < self.mid_price * (Decimal::ONE - self.params.close))
+            // 反转平仓2
+            || (self.trend_rate > self.params.open * dec!(7))
+            // 达到最大持仓时间还未盈利就平仓
+            || (now - self.prev_open_time > is_holding_time_over && self.mid_price < self.pos_avg_price)
         );
         let is_close_short = self.inventory < Decimal::ZERO && (
-            // 反转平仓
-            (self.fair_price > self.mid_price * (Decimal::ONE + self.params.close) && self.trend_rate < self.params.open * dec!(-5))
-            // 达到最大持仓时间平仓
-            || (now - self.prev_open_time > is_holding_time_over)
+            // 反转平仓1
+            (self.fair_price > self.mid_price * (Decimal::ONE + self.params.close))
+            // 反转平仓2
+            || (self.trend_rate < self.params.open * dec!(-7))
+            // 达到最大持仓时间还未盈利就平仓
+            || (now - self.prev_open_time > is_holding_time_over && self.mid_price > self.pos_avg_price)
         );
-        let is_open_long = self.fair_price > self.mid_price * (Decimal::ONE + self.params.open) && self.trend_rate < self.params.open * dec!(-5);
-        let is_open_short = self.fair_price < self.mid_price * (Decimal::ONE - self.params.open) && self.trend_rate > self.params.open * dec!(5);
+        let is_open_long = self.fair_price > self.mid_price * (Decimal::ONE + self.params.open) && self.trend_rate < self.params.open * dec!(-7);
+        let is_open_short = self.fair_price < self.mid_price * (Decimal::ONE - self.params.open) && self.trend_rate > self.params.open * dec!(7);
 
         // 使信号有一定持续性
         if is_close_long {
@@ -415,9 +419,9 @@ impl Predictor {
             self.trade_condition_time = now;
         }
 
-        // 开仓信号要过期,只保留10
+        // 开仓信号要过期,只保留5
         if (self.trade_condition == dec!(3) || self.trade_condition == dec!(4))
-            && now - self.trade_condition_time > dec!(10_000) {
+            && now - self.trade_condition_time > dec!(5_000) {
             self.trade_condition = Decimal::ZERO;
         }
 
@@ -444,13 +448,13 @@ impl Predictor {
                 self.bid_delta = dec!(0);
                 self.ask_delta = dec!(-2);
 
-                self.optimal_bid_price = self.fair_price;
+                self.optimal_bid_price = self.fair_price * dec!(1.001);
                 self.optimal_ask_price = Self::DONT_VIEW;
             } else if self.trade_condition == dec!(4) {
                 self.ask_delta = dec!(0);
                 self.bid_delta = dec!(-2);
 
-                self.optimal_ask_price = self.fair_price;
+                self.optimal_ask_price = self.fair_price * dec!(0.999);
                 self.optimal_bid_price = Self::DONT_VIEW;
             }
         }