浏览代码

以固定时间进行止损

skyffire 10 月之前
父节点
当前提交
2bcf15ce5d
共有 1 个文件被更改,包括 68 次插入47 次删除
  1. 68 47
      strategy/src/predictor.rs

+ 68 - 47
strategy/src/predictor.rs

@@ -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 {