Browse Source

改用买一卖一的中间价进行观察。

skyffire 1 year ago
parent
commit
d773bc6090
1 changed files with 9 additions and 6 deletions
  1. 9 6
      src/msv.rs

+ 9 - 6
src/msv.rs

@@ -1,3 +1,4 @@
+use std::cmp::{max, min};
 use std::str::FromStr;
 use actix_web::{HttpResponse};
 use chrono::Utc;
@@ -211,6 +212,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;
         loop {
             // 下标合法性判断
             if depth_index >= simple_depths.len() {
@@ -221,15 +223,18 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
                 break;
             }
             // 这一秒的深度最大值
-            if simple_depths[depth_index].size > max_size {
-                max_size = simple_depths[depth_index].size;
-            }
+            max_size = max(max_size, simple_depths[depth_index].size);
+            min_size = min(min_size, simple_depths[depth_index].size);
             // 下标步近
             depth_index += 1;
         }
         // 智能填充数据
-        if max_size == Decimal::ZERO && final_depth_data.len() > 0 {
+        if (max_size == Decimal::ZERO || min_size == Decimal::ONE_THOUSAND * Decimal::ONE_THOUSAND) && final_depth_data.len() > 0 {
             max_size = final_depth_data.last().unwrap()[1];
+        } else {
+            let rst_size = (max_size + min_size) / Decimal::TWO;
+            // 简易的深度数据处理
+            final_depth_data.push(vec![index_timestamp, rst_size]);
         }
 
         // 如果这两个值为0,则代表这mills_back毫秒以内是没有数据的,填充0数据,使得x轴是完整的
@@ -240,8 +245,6 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
         } else {
             final_msv_data.push(vec![index_timestamp, max_msv_data, max_msv_diss_data]);
         }
-        // 简易的深度数据处理
-        final_depth_data.push(vec![index_timestamp, max_size]);
 
         // ---------------- 最后的时间处理 -----------------
         // 对时间进行步近