فهرست منبع

修复卡顿bug。

skyfffire 11 ماه پیش
والد
کامیت
0e2d92e9de
2فایلهای تغییر یافته به همراه12 افزوده شده و 14 حذف شده
  1. 1 1
      global/src/cci.rs
  2. 11 13
      strategy/src/avellaneda_stoikov.rs

+ 1 - 1
global/src/cci.rs

@@ -16,7 +16,7 @@ pub struct CentralControlInfo {
 
 impl CentralControlInfo {
     // 时间窗口大小(微秒)
-    const MAX_TIME_RANGE_MICROS: i64 = 5 * 60_000_000;
+    const MAX_TIME_RANGE_MICROS: i64 = 2 * 60_000_000;
 
     pub fn new() -> Self {
         Self {

+ 11 - 13
strategy/src/avellaneda_stoikov.rs

@@ -62,6 +62,7 @@ pub struct AvellanedaStoikov {
     pub t_diff: Decimal,                                                        // (T-t)
     pub last_update_time: Decimal,
     pub last_index: Decimal,
+    pub prev_insert_time: Decimal,
 }
 
 impl AvellanedaStoikov {
@@ -127,6 +128,7 @@ impl AvellanedaStoikov {
             short_trade_len_dec: Default::default(),
             last_update_time: Default::default(),
             last_index: Default::default(),
+            prev_insert_time: Default::default(),
         };
 
         avellaneda_stoikov
@@ -370,11 +372,11 @@ impl AvellanedaStoikov {
 
             self.base_delta = self.sigma_square;
 
-            self.bid_delta = self.base_delta * Decimal::TWO;
+            self.bid_delta = self.base_delta;
             self.ask_delta = self.base_delta;
 
-            if self.money_flow_index < dec!(50) && self.error_rate > dec!(0.3) {
-                self.bid_delta = self.base_delta;
+            if self.money_flow_index > dec!(50) && self.error_rate > dec!(0.3) {
+                self.bid_delta = self.base_delta * Decimal::TWO;
             }
 
             // else if self.flow_ratio.is_zero() {
@@ -522,19 +524,15 @@ impl AvellanedaStoikov {
         let flow_ratio = Decimal::ZERO;
         let ref_price = self.ref_price;
 
+        let need_append = now - self.prev_insert_time > Decimal::ONE_HUNDRED;
+        if !need_append {
+            return;
+        }
+
+        self.prev_insert_time = now;
         // 数据量太多导致的,减少一些吧
         tokio::spawn(async move {
             let mut cci = cci_arc.lock().await;
-            let need_append = if cci.predictor_state_vec.len() == 0 {
-                true
-            } else {
-                let state = cci.predictor_state_vec.deque.iter().last().unwrap();
-
-                now - state.update_time > Decimal::ONE_HUNDRED
-            };
-            if !need_append {
-                return;
-            }
 
             cci.predictor_state_vec.push_back(PredictorState {
                 update_time: now,