Explorar o código

v1.0.18: 使用不那么激进的平仓方式

skyffire hai 9 meses
pai
achega
357f4fbbcf
Modificáronse 1 ficheiros con 12 adicións e 6 borrados
  1. 12 6
      strategy/src/predictor.rs

+ 12 - 6
strategy/src/predictor.rs

@@ -259,8 +259,8 @@ impl Predictor {
         self.trade_short_vec.push_back(trade.clone());
         self.trade_fixed_vec.push(trade.clone());
 
-        if self.trade_long_vec.len() > 100 {
-            let (bought_sum, sold_sum): (Decimal, Decimal) = self.trade_long_vec.deque.iter()
+        if self.trade_fixed_vec.len() > 100 {
+            let (bought_sum, sold_sum): (Decimal, Decimal) = self.trade_fixed_vec.iter()
                 .fold((Decimal::ZERO, Decimal::ZERO), |(buy_sum, sell_sum), item| {
                     if item.size > Decimal::ZERO {
                         (buy_sum + item.value.abs(), sell_sum)
@@ -457,8 +457,8 @@ impl Predictor {
         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 && self.force_order_value > self.params.open;
-        let is_close_short = self.inventory < Decimal::ZERO && self.mid_price_trend_rate < Decimal::ZERO && self.force_order_value < -self.params.open;
+        let is_close_long = self.inventory > Decimal::ZERO && self.mid_price_trend_rate > Decimal::ZERO && self.force_order_value > Decimal::ZERO;
+        let is_close_short = self.inventory < Decimal::ZERO && self.mid_price_trend_rate < Decimal::ZERO && self.force_order_value < Decimal::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;
@@ -579,11 +579,17 @@ impl Predictor {
 
         let inventory = self.inventory;
 
-        let sigma_square = self.trades_volume_short;
+        let sigma_square = self.money_flow;
         // let sigma_square = self.error_rate;
 
         let gamma = self.force_order_value;
-        let kappa = Decimal::ZERO;
+        let kappa = if self.force_order_value > Decimal::ONE {
+            self.force_order_value.ln()
+        } else if self.force_order_value < Decimal::NEGATIVE_ONE {
+            -self.force_order_value.abs().ln()
+        } else {
+            Decimal::ZERO
+        };
 
         let flow_ratio = Decimal::ZERO;