Переглянути джерело

还是把副图恢复了,但是最多只保留240分钟的数据

skyffire 1 рік тому
батько
коміт
4aa475cd44
1 змінених файлів з 30 додано та 26 видалено
  1. 30 26
      src/msv.rs

+ 30 - 26
src/msv.rs

@@ -65,19 +65,23 @@ pub async fn generate_msv(query_value: Value) -> HttpResponse {
         start_time,
         end_time,
     ).await;
-    let simple_trades_response = get_simple_depths_json(
+    let simple_start_time = if start_time < end_time - 240 * 60 * 1000 {
+        end_time - 240 * 60 * 1000
+    } else {
+        start_time
+    };
+    let simple_depths_response = get_simple_depths_json(
         exchange.as_str(),
         symbol.as_str(),
-        start_time,
+        simple_start_time,
         end_time,
     ).await;
 
     // 对数据库返回的数据进行容错处理
-    if trades_response.code == 200 && simple_trades_response.code == 200 {
+    if trades_response.code == 200 && simple_depths_response.code == 200 {
         // 数据本地化处理
         let trades = parse_json_to_trades(trades_response.data);
-        // let simple_depths = parse_json_to_simple_depths(simple_trades_response.data);
-        let simple_depths = vec![];
+        let simple_depths = parse_json_to_simple_depths(simple_depths_response.data);
         // 指标生成
         let indicator = generate_msv_by_trades(trades, mills_back, simple_depths, start_time, end_time);
 
@@ -179,7 +183,7 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
     let mut depth_index = 0;
     let mut final_depth_data: Vec<Vec<Decimal>> = vec![];
 
-    let final_spread_data: Vec<Vec<Decimal>> = vec![];
+    let mut final_spread_data: Vec<Vec<Decimal>> = vec![];
 
     let mut index_timestamp = Decimal::from_i64(start_time).unwrap();
     let last_timestamp = Decimal::from_i64(end_time).unwrap();
@@ -219,7 +223,7 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
         // 获取时间范围内的深度数据、买一及卖一价数据
         let mut max_size = Decimal::ZERO;
         let mut min_size = Decimal::ONE_THOUSAND * Decimal::ONE_THOUSAND;
-        // let mut max_spread = Decimal::ZERO;
+        let mut max_spread = Decimal::ZERO;
         loop {
             // 下标合法性判断
             if depth_index >= simple_depths.len() {
@@ -234,15 +238,15 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
             max_size = max(max_size, depth.size);
             min_size = min(min_size, depth.size);
             // 这一秒的差价最大值
-            // let spread = depth.a1 - depth.b1;
-            // max_spread = max(spread, max_spread);
+            let spread = depth.a1 - depth.b1;
+            max_spread = max(spread, max_spread);
             // 下标步近
             depth_index += 1;
         }
 
         // ====================================== 智能填充数据 ===============================================
         // 价差
-        // final_spread_data.push(vec![index_timestamp, max_spread]);
+        final_spread_data.push(vec![index_timestamp, max_spread]);
 
         // 流动性数据叠加
         let rst_size = if (max_size == Decimal::ZERO || min_size == Decimal::ONE_THOUSAND * Decimal::ONE_THOUSAND) && final_depth_data.len() > 0 {
@@ -309,19 +313,19 @@ pub fn parse_json_to_trades(trades_json: Value) -> Vec<Trade> {
 }
 
 // 将json转换为简易深度数据
-// pub fn parse_json_to_simple_depths(depths_json: Value) -> Vec<SimpleDepth> {
-//     let mut rst = vec![];
-//
-//     for depth_json in depths_json.as_array().unwrap() {
-//         let depth: SimpleDepth = SimpleDepth {
-//             time: Decimal::from_str(depth_json["time"].as_str().unwrap()).unwrap(),
-//             size: Decimal::from_str(depth_json["size"].as_str().unwrap()).unwrap(),
-//             a1: Decimal::from_str(depth_json["a1"].as_str().unwrap()).unwrap(),
-//             b1: Decimal::from_str(depth_json["b1"].as_str().unwrap()).unwrap(),
-//         };
-//
-//         rst.insert(0, depth)
-//     }
-//
-//     rst
-// }
+pub fn parse_json_to_simple_depths(depths_json: Value) -> Vec<SimpleDepth> {
+    let mut rst = vec![];
+
+    for depth_json in depths_json.as_array().unwrap() {
+        let depth: SimpleDepth = SimpleDepth {
+            time: Decimal::from_str(depth_json["time"].as_str().unwrap()).unwrap(),
+            size: Decimal::from_str(depth_json["size"].as_str().unwrap()).unwrap(),
+            a1: Decimal::from_str(depth_json["a1"].as_str().unwrap()).unwrap(),
+            b1: Decimal::from_str(depth_json["b1"].as_str().unwrap()).unwrap(),
+        };
+
+        rst.insert(0, depth)
+    }
+
+    rst
+}