skyfffire hai 11 meses
pai
achega
f136afb60f
Modificáronse 3 ficheiros con 33 adicións e 30 borrados
  1. 24 21
      strategy/src/avellaneda_stoikov.rs
  2. 1 1
      strategy/src/core.rs
  3. 8 8
      strategy/src/strategy.rs

+ 24 - 21
strategy/src/avellaneda_stoikov.rs

@@ -322,11 +322,14 @@ impl AvellanedaStoikov {
     }
 
     pub async fn on_inventory(&mut self, pos_amount: &Decimal, pos_avg_price: &Decimal, min_amount_value: &Decimal) {
+        if self.mid_price.is_zero() {
+            return;
+        }
+
         let prev_inventory = self.inventory;
         self.pos_amount = pos_amount.clone();
         self.pos_avg_price = pos_avg_price.clone();
         self.inventory = (pos_amount / (min_amount_value / self.mid_price)).trunc();
-        info!("pos_amount={}, inventory={}", pos_amount, self.inventory);
         if prev_inventory != self.inventory && prev_inventory.is_zero() {
             self.prev_trade_time = Utc::now().timestamp_micros();
             self.close_price = self.order_ref_price;
@@ -337,7 +340,7 @@ impl AvellanedaStoikov {
     }
 
     pub fn update_sigma_square(&mut self) {
-        self.sigma_square = self.ref_price * dec!(0.001);
+        self.sigma_square = self.ref_price * dec!(0.002);
         self.sigma_square.rescale(10);
     }
 
@@ -382,10 +385,10 @@ impl AvellanedaStoikov {
 
             if self.inventory > Decimal::ZERO {
                 // self.ask_delta = self.base_delta;
-                self.ask_delta = self.ref_price * dec!(0.0002);
+                self.ask_delta = self.ref_price * dec!(0.0003);
             } else if self.inventory < Decimal::ZERO {
                 // self.bid_delta = self.base_delta;
-                self.bid_delta = self.ref_price * dec!(0.0002);
+                self.bid_delta = self.ref_price * dec!(0.0003);
             }
         }
     }
@@ -531,7 +534,7 @@ impl AvellanedaStoikov {
         let inventory = self.inventory;
         let sigma_square = self.error_rate;
         let gamma = now - self.last_update_time;
-        let kappa = self.dir;
+        let kappa = self.pos_amount;
 
         let flow_ratio = Decimal::ZERO;
         let ref_price = self.ref_price;
@@ -574,26 +577,26 @@ impl AvellanedaStoikov {
             });
 
             // 长度限定,最大100w条
-            if cci.predictor_state_vec.len() > 700_000 {
+            if cci.predictor_state_vec.len() > 10_000 {
                 cci.predictor_state_vec.remove(0);
             }
         });
 
-        let error_rate = self.error_rate;
-        // 将数据存入本地json文件,要求不能在行情烈度比较大的时候执行这个逻辑,防止卡交易逻辑
-        if now - self.prev_save_time < dec!(60000) || error_rate > dec!(0.15) {
-            return;
-        }
-        // 存放逻辑
-        info!("存放, {}, {}, {}", now, self.prev_save_time, now - self.prev_save_time);
-
-
-
-        self.prev_save_time = Decimal::from(Utc::now().timestamp_millis());
-        let cci = cci_arc.lock().await;
-        let temp_json_str = serde_json::to_string(&cci.predictor_state_vec).unwrap();
-        Self::write_to_file(&temp_json_str, "./db/db.json".to_string()).await;
-        info!("存放完毕, {}", self.prev_save_time - now);
+        // let error_rate = self.error_rate;
+        // // 将数据存入本地json文件,要求不能在行情烈度比较大的时候执行这个逻辑,防止卡交易逻辑
+        // if now - self.prev_save_time < dec!(60000) || error_rate > dec!(0.15) {
+        //     return;
+        // }
+        // // 存放逻辑
+        // info!("存放, {}, {}, {}", now, self.prev_save_time, now - self.prev_save_time);
+        //
+        //
+        //
+        // self.prev_save_time = Decimal::from(Utc::now().timestamp_millis());
+        // let cci = cci_arc.lock().await;
+        // let temp_json_str = serde_json::to_string(&cci.predictor_state_vec).unwrap();
+        // Self::write_to_file(&temp_json_str, "./db/db.json".to_string()).await;
+        // info!("存放完毕, {}", self.prev_save_time - now);
     }
 
     // #[instrument(skip(self, ref_ticker_map), level="TRACE")]

+ 1 - 1
strategy/src/core.rs

@@ -1516,7 +1516,7 @@ impl Core {
             self.strategy.tick_size = self.strategy.tick_size.trunc();
         }
         // 获取最小下单价值
-        self.strategy.min_amount_value = self.market.min_notional;
+        self.strategy.min_amount_value = self.market.min_notional * dec!(2);
 
         if self.strategy.step_size.is_zero() || self.strategy.tick_size.is_zero() || self.strategy.min_amount_value.is_zero() {
             self.exit_msg = format!("交易精度未正常获取 step_size:{}, tick_size:{}, min_amount_value:{}", self.strategy.step_size, self.strategy.tick_size, self.strategy.min_amount_value);

+ 8 - 8
strategy/src/strategy.rs

@@ -826,10 +826,10 @@ impl Strategy {
     pub fn _cancel_open(&self, command: &mut OrderCommand, local_orders: &HashMap<String, OrderInfo>) {
         // 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();
@@ -839,16 +839,16 @@ impl Strategy {
             // 开多订单处理
             if order.side == "kd".to_string() {
                 // 在价格范围内时不处理
-                if order.price <= long_upper && order.price >= long_lower {
-                // if self.local_time - order.local_time <= 200 {
+                // if order.price <= long_upper && order.price >= long_lower {
+                if self.local_time - order.local_time <= 200 {
                     continue
                 }
                 // debug!(?key, ?order.price, ?long_upper, ?long_lower);
                 command.cancel.insert(key, value);
             } else if order.side == "kk".to_string() { // 开空订单处理
                 // 在价格范围内时不处理
-                if order.price >= short_lower && order.price <= short_upper {
-                // if self.local_time - order.local_time <= 200 {
+                // if order.price >= short_lower && order.price <= short_upper {
+                if self.local_time - order.local_time <= 200 {
                     continue
                 }
                 // debug!(?key, ?order.price, ?short_lower, ?short_upper);