Browse Source

只有一点略微的卡了

skyfffire 11 months ago
parent
commit
bef34e1e15
2 changed files with 48 additions and 46 deletions
  1. 45 42
      strategy/src/avellaneda_stoikov.rs
  2. 3 4
      strategy/src/utils.rs

+ 45 - 42
strategy/src/avellaneda_stoikov.rs

@@ -95,31 +95,32 @@ impl AvellanedaStoikov {
             let mut prev_save_time = Decimal::from(Utc::now().timestamp_millis());
             let mut debugs: Vec<VecDeque<Decimal>> = vec![VecDeque::new(); len];
 
-            loop {
-                while let Some(value) = rx.next().await {
-                    // 数据填充到对应位置
-                    for i in 0..len {
-                        debugs[i].push_back(value[i]);
-                    }
+            while let Some(value) = rx.next().await {
+                // 数据填充到对应位置
+                for i in 0..len {
+                    debugs[i].push_back(value[i]);
+                }
 
-                    // 长度限制
-                    if debugs[0].len() > 1_000_000 {
-                        for i in 0..len {
-                            debugs[i].pop_front(); // 从前面移除元素
-                        }
+                // 长度限制
+                if debugs[0].len() > 1_000_000 {
+                    for i in 0..len {
+                        debugs[i].pop_front(); // 从前面移除元素
                     }
+                }
 
-                    let now = Decimal::from(Utc::now().timestamp_millis());
-                    if now - prev_save_time < dec!(60000) {
-                        continue;
-                    }
+                let now = Decimal::from(Utc::now().timestamp_millis());
+                if now - prev_save_time < dec!(10000) {
+                    continue;
+                }
 
-                    let temp_html_str = utils::build_html_file(&debugs).await;
-                    utils::write_to_file(&temp_html_str, "./db/db.html".to_string()).await;
+                let debugs_clone = debugs.clone();
+                let temp_html_str = tokio::task::spawn_blocking(move || {
+                    utils::build_html_file(&debugs_clone)
+                }).await.unwrap();
 
-                    prev_save_time = Decimal::from(Utc::now().timestamp_millis());
-                    info!("存放完毕, {}, {}", prev_save_time - now, debugs[0].len());
-                }
+                utils::write_to_file(&temp_html_str, "./db/db.html".to_string()).await;
+                prev_save_time = Decimal::from(Utc::now().timestamp_millis());
+                info!("存放完毕, {}, {}", prev_save_time - now, debugs[0].len());
             }
         });
 
@@ -588,29 +589,31 @@ impl AvellanedaStoikov {
         let flow_ratio = Decimal::ZERO;
         let ref_price = self.ref_price;
 
-        let need_append = now - self.prev_insert_time > dec!(50);
-        if !need_append {
-            return;
-        }
+        // let need_append = now - self.prev_insert_time > dec!(50);
+        // if !need_append {
+        //     return;
+        // }
 
-        self.debug_sender.unbounded_send(vec![
-            now,
-            mid_price,
-            ask_price,
-            bid_price,
-            last_price,
-            spread,
-            spread_max,
-            spread_min,
-            optimal_ask_price,
-            optimal_bid_price,
-            inventory,
-            sigma_square,
-            gamma,
-            kappa,
-            flow_ratio,
-            ref_price
-        ]).unwrap()
+        for _ in 0..100 {
+            self.debug_sender.unbounded_send(vec![
+                now,
+                mid_price,
+                ask_price,
+                bid_price,
+                last_price,
+                spread,
+                spread_max,
+                spread_min,
+                optimal_ask_price,
+                optimal_bid_price,
+                inventory,
+                sigma_square,
+                gamma,
+                kappa,
+                flow_ratio,
+                ref_price
+            ]).unwrap()
+        }
     }
 
     // #[instrument(skip(self, ref_ticker_map), level="TRACE")]

+ 3 - 4
strategy/src/utils.rs

@@ -160,11 +160,10 @@ pub async fn write_to_file(json_data: &String, file_path: String) {
     }
 }
 
-pub async fn build_html_file(data_c: &Vec<VecDeque<Decimal>>) -> String {
+pub fn build_html_file(data_c: &Vec<VecDeque<Decimal>>) -> String {
     let temp_json_str = serde_json::to_string(&data_c).unwrap();
 
     let str1 = r##"
-
 <!DOCTYPE html>
 <html lang="en">
   <head>
@@ -508,7 +507,7 @@ pub async fn build_html_file(data_c: &Vec<VecDeque<Decimal>>) -> String {
     };
 
     let page = 1;
-    let maxPage = initData[0].length % 50000 > 0 ? Math.ceil(initData[0].length / 50000) : initData[0].length / 50000 || 1;
+    let maxPage = initData[0].length % 100000 > 0 ? Math.ceil(initData[0].length / 100000) : initData[0].length / 100000 || 1;
     let showData = initData.map((item) => item.slice((page - 1) * 100000, page * 100000 - 1));
     let chartDom = document.getElementById("echarts");
     let myChart = echarts.init(chartDom);
@@ -524,7 +523,7 @@ pub async fn build_html_file(data_c: &Vec<VecDeque<Decimal>>) -> String {
     };
     updata_page();
     let update_echarts = () => {
-      showData = initData.map((item) => item.slice((page - 1) * 50000, page * 50000 + 49999));
+      showData = initData.map((item) => item.slice((page - 1) * 100000, page * 100000 + 99999));
       let option = update_echarts_data(showData);
       myChart.setOption(option, false, true);
     };