浏览代码

quant 偶发性异常解决

JiahengHe 2 年之前
父节点
当前提交
695d4fd76f
共有 1 个文件被更改,包括 10 次插入2 次删除
  1. 10 2
      strategy/src/quant.rs

+ 10 - 2
strategy/src/quant.rs

@@ -200,6 +200,7 @@ impl Quant {
             let depths_key: String = tickers_key.clone();
             let market_update_time_key = tickers_key.clone();
             let market_update_interval_key = tickers_key.clone();
+            let max_buy_min_sell_cache_key = tickers_key.clone();
 
             quant_obj.tickers.insert(tickers_key, SpecialTicker {
                 sell: Default::default(),
@@ -210,12 +211,14 @@ impl Quant {
             quant_obj.depths.insert(depths_key, Default::default());
             quant_obj.market_update_time.insert(market_update_time_key, Default::default());
             quant_obj.market_update_interval.insert(market_update_interval_key, Default::default());
+            quant_obj.max_buy_min_sell_cache.insert(max_buy_min_sell_cache_key, vec![Decimal::ZERO, Decimal::ZERO]);
         }
         let name = format!("{}{}{}", quant_obj.exchange.clone(), "@", quant_obj.symbol);
         let market_update_time_key = name.clone();
         let market_update_interval_key = name.clone();
         let tickers_key = name.clone();
         let depths_key = name.clone();
+        let max_buy_min_sell_cache_key = name.clone();
         quant_obj.trade_name = name;
         quant_obj.market_update_time.insert(market_update_time_key, Default::default());
         quant_obj.market_update_interval.insert(market_update_interval_key, Default::default());
@@ -225,6 +228,7 @@ impl Quant {
             mid_price: Default::default(),
         });
         quant_obj.depths.insert(depths_key, Default::default());
+        quant_obj.max_buy_min_sell_cache.insert(max_buy_min_sell_cache_key, vec![Decimal::ZERO, Decimal::ZERO]);
         // broker.newWs
         let mut price_alpha: Vec<Decimal> = Vec::new();
         for ref_pair_str in params.ref_pair {
@@ -1109,8 +1113,12 @@ pub fn run_strategy(quant_arc: Arc<Mutex<Quant>>) -> JoinHandle<()>{
             }
             // 计算耗时并进行休眠
             let pass_time = Utc::now().timestamp_millis() - start_time;
-            sleep(Duration::from_millis(quant.interval.to_u64().unwrap() - pass_time.to_u64().unwrap())).await;
-        }
+            let mut delay = 1u64;
+            if pass_time < quant.interval.to_i64().unwrap() {
+                delay = quant.interval.to_u64().unwrap() - pass_time.to_u64().unwrap();
+            }
+            sleep(Duration::from_millis(delay)).await;
+           }
     });
 }
 pub async fn run_transaction(quant_arc: Arc<Mutex<Quant>>, name: String, symbols: Vec<String>, exchange_params: BTreeMap<String, String>) {