Kaynağa Gözat

融合千千的逻辑与我们的自有逻辑,形成1.11.0

skyffire 10 ay önce
ebeveyn
işleme
fc090b9448
3 değiştirilmiş dosya ile 32 ekleme ve 46 silme
  1. 3 3
      global/src/params.rs
  2. 23 37
      strategy/src/predictor.rs
  3. 6 6
      strategy/src/strategy.rs

+ 3 - 3
global/src/params.rs

@@ -26,12 +26,12 @@ pub struct Params {
     pub open: Decimal,
     // 激活开仓挂单
     pub open_activate: Decimal,
+    // 激活开仓挂单的最小spread
+    pub min_spread: Decimal,
     // 激活平仓挂单
     pub close_activate: Decimal,
     // 平仓
     pub close: Decimal,
-    // 干扰平仓
-    pub is_strong_interfere: bool,
     // 秒级观测时间
     pub second_observation_time: Decimal,
     // 杠杆大小
@@ -94,8 +94,8 @@ impl Params {
             pair: json_value["pair"].as_str().unwrap().to_string(),
             open: Decimal::try_from(json_value["open"].as_f64().unwrap_or_default()).unwrap(),
             open_activate: Decimal::try_from(json_value["open_activate"].as_f64().unwrap_or_default()).unwrap(),
+            min_spread: Decimal::try_from(json_value["min_spread"].as_f64().unwrap_or_default()).unwrap(),
             close: Decimal::try_from(json_value["close"].as_f64().unwrap_or_default()).unwrap(),
-            is_strong_interfere: json_value["is_strong_interfere"].as_bool().unwrap(),
             second_observation_time: Decimal::try_from(json_value["second_observation_time"].as_f64().unwrap()).unwrap(),
             lever_rate: Decimal::try_from(json_value["lever_rate"].as_f64().unwrap_or_default()).unwrap(),
             ref_exchange: vec![json_value["ref_exchange"].as_str().unwrap().to_string()],                   // 兼容新版本与老版本

+ 23 - 37
strategy/src/predictor.rs

@@ -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));
 

+ 6 - 6
strategy/src/strategy.rs

@@ -854,10 +854,10 @@ impl Strategy {
     pub fn _cancel_open(&self, command: &mut OrderCommand, local_orders: &HashMap<String, OrderInfo>, predictor: &mut Predictor) {
         // debug!(?command);
         // 挂单范围
-        // let long_upper = self.open_dist[0];
-        // let long_lower = self.open_dist[1];
-        // let short_lower = self.open_dist[2];
-        // let short_upper = self.open_dist[3];
+        let long_upper = self.open_dist[0];
+        let long_lower = self.open_dist[1];
+        let short_lower = self.open_dist[2];
+        let short_upper = self.open_dist[3];
 
         for order_client_id in local_orders.keys() {
             let order = local_orders.get(order_client_id).unwrap();
@@ -871,7 +871,7 @@ impl Strategy {
                 // if (self.local_time - order.local_time <= 500) && (order.price <= long_upper && order.price >= long_lower) {
                 // if predictor.bid_price == order.price {
                 // if self.local_time - order.local_time <= 500 {
-                if self.local_time - order.local_time <= 800 && predictor.bid_delta != dec!(-2) {
+                if self.local_time - order.local_time <= 500 && predictor.bid_delta != dec!(-2) && (order.price <= long_upper && order.price >= long_lower) {
                     continue
                 }
                 command.cancel.insert(key, value);
@@ -882,7 +882,7 @@ impl Strategy {
                 // if order.price >= short_lower && order.price <= short_upper {
                 // if predictor.ask_price == order.price {
                 // if self.local_time - order.local_time <= 500 {
-                if self.local_time - order.local_time <= 800 && predictor.ask_delta != dec!(-2) {
+                if self.local_time - order.local_time <= 500 && predictor.ask_delta != dec!(-2) && (order.price >= short_lower && order.price <= short_upper) {
                     continue
                 }
                 // debug!(?key, ?order.price, ?short_lower, ?short_upper);