Просмотр исходного кода

v4.0.2: 使用价差扩大、缩小数据开平仓。

skyffire 9 месяцев назад
Родитель
Сommit
45061d27e0
2 измененных файлов с 12 добавлено и 11 удалено
  1. 11 10
      strategy/src/predictor.rs
  2. 1 1
      strategy/src/strategy.rs

+ 11 - 10
strategy/src/predictor.rs

@@ -257,7 +257,7 @@ impl Predictor {
         self.price_avg_times_vec[index] = if !self.is_ready {
             self.fair_price_vec[index] / self.mid_price
         } else {
-            self.price_avg_times_vec[index] * dec!(0.9995) + dec!(0.0005) * self.fair_price_vec[index] / self.mid_price
+            self.price_avg_times_vec[index] * dec!(0.9998) + dec!(0.0002) * self.fair_price_vec[index] / self.mid_price
         };
         self.price_avg_times_long_vec[index] = if !self.is_ready {
             self.fair_price_vec[index] / self.mid_price
@@ -270,16 +270,17 @@ impl Predictor {
 
         // 开仓信号处理
         self.signal = Decimal::ZERO;
-        for (i, fair_price_std) in self.fair_price_std_vec.iter().enumerate() {
-            if fair_price_std.is_zero() {
+        for (i, price_avg_times_long) in self.price_avg_times_long_vec.iter().enumerate() {
+            if price_avg_times_long.is_zero() {
                 return;
             }
+            let price_avg_times_short = self.price_avg_times_vec[i];
 
-            self.spread_vec[i] = fair_price_std - self.mid_price;
+            self.spread_vec[i] = price_avg_times_short - price_avg_times_long;
             self.signal = self.signal +  self.spread_vec[i];
         }
-        self.signal = self.signal / self.params.min_spread;
-        self.signal.rescale(0);
+        // self.signal = self.signal / self.params.min_spread;
+        // self.signal.rescale(0);
 
         // 生成最终用于挂单的公平价格
         let fair_price_sum: Decimal = self.fair_price_std_vec.iter().sum();
@@ -312,8 +313,8 @@ impl Predictor {
             }
         }
 
-        let is_close_long = self.inventory > Decimal::ZERO;
-        let is_close_short = self.inventory < Decimal::ZERO;
+        let is_close_long = self.inventory > Decimal::ZERO && self.signal > Decimal::ZERO;
+        let is_close_short = self.inventory < Decimal::ZERO && self.signal < Decimal::ZERO;
 
         if is_close_long {
             self.ask_delta = dec!(0);
@@ -332,13 +333,13 @@ impl Predictor {
                 self.bid_delta = dec!(0);
                 self.ask_delta = dec!(-2);
 
-                self.optimal_bid_price = self.fair_price - self.fair_price * self.params.open;
+                self.optimal_bid_price = self.fair_price - self.fair_price * (self.params.open - self.signal);
                 self.optimal_ask_price = Self::DONT_VIEW;
             } else if self.signal < Decimal::ZERO {
                 self.ask_delta = dec!(0);
                 self.bid_delta = dec!(-2);
 
-                self.optimal_ask_price = self.fair_price + self.fair_price * self.params.open;
+                self.optimal_ask_price = self.fair_price + self.fair_price * (self.params.open + self.signal);
                 self.optimal_bid_price = Self::DONT_VIEW;
             } else {
                 self.bid_delta = dec!(0);

+ 1 - 1
strategy/src/strategy.rs

@@ -1091,7 +1091,7 @@ impl Strategy {
 
         self._cancel_open(&mut command, local_orders, predictor);   // 撤单命令处理
         self._post_close(&mut command, local_orders, predictor);    // 平仓单命令处理
-        // self._post_open(&mut command, local_orders, predictor);     // 限价单命令处理
+        self._post_open(&mut command, local_orders, predictor);     // 限价单命令处理
         self._check_local_orders(&mut command, local_orders);       // 固定时间检查超时订单
         self._update_in_cancel(&mut command, local_orders);         // 更新撤单队列,是一个filter
         self._check_request_limit(&mut command);                    // 限制频率,移除不合规则之订单,是一个filter