Browse Source

可以了,上线测试,要试试不同参数。

skyffire 9 months ago
parent
commit
447b11b146
2 changed files with 26 additions and 14 deletions
  1. 22 10
      strategy/src/predictor.rs
  2. 4 4
      strategy/src/utils.rs

+ 22 - 10
strategy/src/predictor.rs

@@ -229,8 +229,18 @@ impl Predictor {
             self.mid_price_time_vec.push_back(self.mid_price);
             self.mid_price_long_time_vec.push_back(self.mid_price);
             self.mid_price_trend_time_vec.push_back(self.mid_price);
-            let (rate, _, _) = Self::get_real_rate(&self.mid_price_trend_time_vec);
-            self.mid_price_trend_rate = rate;
+            self.mid_price_trend_rate = if self.mid_price_trend_time_vec.len() > 1 {
+                let first = self.mid_price_trend_time_vec.deque.front().unwrap();
+                let last = self.mid_price_trend_time_vec.deque.back().unwrap();
+
+                let mut rst = (last - first) / first;
+
+                rst.rescale(8);
+
+                rst
+            } else {
+                Decimal::ZERO
+            };
         }
 
         self.update_fair_price(depth, index).await;
@@ -282,7 +292,9 @@ impl Predictor {
         //     }
         // }
 
-        self.force_order_value = force_order.value.clone();
+        if force_order.value.abs() > self.force_order_value || self.force_order_value * force_order.value < Decimal::ZERO {
+            self.force_order_value = force_order.value;
+        }
     }
 
     pub async fn update_level(&mut self) {
@@ -314,12 +326,12 @@ impl Predictor {
 
         if prev_inventory != self.inventory && prev_inventory.is_zero() {
             self.prev_trade_time = Utc::now().timestamp_micros();
-            self.force_order_value = Decimal::ZERO;
         }
 
         // 重置fair数据,用于重新计算幅度
         if prev_inventory != self.inventory {
             self.fair_price_time_vec.deque.clear();
+            self.force_order_value = Decimal::ZERO;
         }
 
         // 重置资金流计算
@@ -442,8 +454,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.mid_price_trend_rate < Decimal::ZERO && self.force_order_value < -self.params.open;
-        let is_open_short = self.mid_price_trend_rate > Decimal::ZERO && self.force_order_value > self.params.open;
+        let is_open_long = self.mid_price_trend_rate < Decimal::ZERO && self.force_order_value < -self.params.open && self.inventory.is_zero();
+        let is_open_short = self.mid_price_trend_rate > Decimal::ZERO && self.force_order_value > self.params.open && self.inventory.is_zero();
         let is_close_long = self.inventory > Decimal::ZERO && self.mid_price_trend_rate > Decimal::ZERO;
         let is_close_short = self.inventory < Decimal::ZERO && self.mid_price_trend_rate < Decimal::ZERO;
 
@@ -555,18 +567,18 @@ impl Predictor {
         let fair_price = Self::DONT_VIEW;
 
         let spread = self.mid_price_trend_rate;
-        let spread_max = self.fair_price_vec[1] / self.fair_price_vec[0];
-        let spread_min = self.fair_price / self.mid_price;
+        let spread_max = Decimal::ZERO;
+        let spread_min = Self::DONT_VIEW;
 
         let optimal_ask_price = self.optimal_ask_price;
         let optimal_bid_price = self.optimal_bid_price;
 
         let inventory = self.inventory;
 
-        let sigma_square: Decimal = self.force_order_value;
+        let sigma_square = self.trades_volume_short;
         // let sigma_square = self.error_rate;
 
-        let gamma = self.trades_volume_short;
+        let gamma = self.force_order_value;
         let kappa = Decimal::ZERO;
 
         let flow_ratio = Decimal::ZERO;

+ 4 - 4
strategy/src/utils.rs

@@ -394,8 +394,8 @@ pub fn build_html_file(data_c: &Vec<VecDeque<Option<Decimal>>>) -> String {
             name: "optimal_ask_price",
             type: "line",
             showSymbol: false,
-            // data: data[8],
-            data: [],
+            data: data[8],
+            // data: [],
             lineStyle: {
               type: "dashed",
             },
@@ -404,8 +404,8 @@ pub fn build_html_file(data_c: &Vec<VecDeque<Option<Decimal>>>) -> String {
             name: "optimal_bid_price",
             type: "line",
             showSymbol: false,
-            // data: data[9],
-            data: [],
+            data: data[9],
+            // data: [],
             lineStyle: {
               type: "dashed",
             },