瀏覽代碼

进攻的力量放入副图

skyffire 1 年之前
父節點
當前提交
8cb61f575c
共有 1 個文件被更改,包括 52 次插入50 次删除
  1. 52 50
      src/msv.rs

+ 52 - 50
src/msv.rs

@@ -81,7 +81,8 @@ pub async fn generate_msv(query_value: Value) -> HttpResponse {
     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_depths_response.data);
+        // let simple_depths = parse_json_to_simple_depths(simple_depths_response.data);
+        let simple_depths = vec![];
         // 指标生成
         let indicator = generate_msv_by_trades(trades, mills_back, simple_depths, start_time, end_time);
 
@@ -183,14 +184,14 @@ 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 mut final_spread_data: Vec<Vec<Decimal>> = vec![];
+    let 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();
     let step_timestamp = dec!(1000);
     loop {
         let mut max_msv_data = Decimal::ZERO;
-        let mut max_msv_diss_data = Decimal::ZERO;
+        let mut max_msv_qty_data = Decimal::ZERO;
 
         // ====================================== 数据生产 ===============================================
         // 获取时间范围内的波动率数据
@@ -207,14 +208,11 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
 
             // -------------- 大小判断,取值
             let msv_d = msv_data[msv_index][1];
-            let msv_diss_data = msv_data[msv_index][2];
+            let msv_qty_data = msv_data[msv_index][2];
             // msv波动数据
             if max_msv_data.abs() < msv_d.abs() {
                 max_msv_data = msv_d;
-            }
-            // 堆叠的交易量数据
-            if max_msv_diss_data < msv_diss_data {
-                max_msv_diss_data = msv_diss_data;
+                max_msv_qty_data = msv_qty_data;
             }
             // 下标步近
             msv_index = msv_index + 1;
@@ -242,38 +240,42 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
 
         // ====================================== 智能填充数据 ===============================================
         // 流动性数据叠加
-        let rst_size = if (max_size == Decimal::ZERO || min_size == Decimal::ONE_THOUSAND * Decimal::ONE_THOUSAND) && final_depth_data.len() > 0 {
-            final_depth_data.last().unwrap()[1]
-        } else {
-            if (max_size == Decimal::ZERO || min_size == Decimal::ONE_THOUSAND * Decimal::ONE_THOUSAND) && simple_depths.len() > 0 {
-                simple_depths[0].size
-            } else {
-                if simple_depths.len() > 0 {
-                    (max_size + min_size) / Decimal::TWO
-                } else {
-                    Decimal::ZERO
-                }
-            }
-        };
-        final_depth_data.push(vec![index_timestamp, rst_size]);
-
-        // 建议开仓距离
-        let mut rst_spread = if rst_size == Decimal::ZERO {
-            Decimal::ZERO
-        } else {
-            dec!(10000) / rst_size
-        };
-        rst_spread.rescale(6);
-        final_spread_data.push(vec![index_timestamp, rst_spread]);
+        // let rst_size = if (max_size == Decimal::ZERO || min_size == Decimal::ONE_THOUSAND * Decimal::ONE_THOUSAND) && final_depth_data.len() > 0 {
+        //     final_depth_data.last().unwrap()[1]
+        // } else {
+        //     if (max_size == Decimal::ZERO || min_size == Decimal::ONE_THOUSAND * Decimal::ONE_THOUSAND) && simple_depths.len() > 0 {
+        //         simple_depths[0].size
+        //     } else {
+        //         if simple_depths.len() > 0 {
+        //             (max_size + min_size) / Decimal::TWO
+        //         } else {
+        //             Decimal::ZERO
+        //         }
+        //     }
+        // };
+        // final_depth_data.push(vec![index_timestamp, rst_size]);
+        //
+        // // 建议开仓距离
+        // let mut rst_spread = if rst_size == Decimal::ZERO {
+        //     Decimal::ZERO
+        // } else {
+        //     dec!(10000) / rst_size
+        // };
+        // rst_spread.rescale(6);
+        // final_spread_data.push(vec![index_timestamp, rst_spread]);
 
         // 波动率数据处理
         // 如果这两个值为0,则代表这mills_back毫秒以内是没有数据的,填充0数据,使得x轴是完整的
         if max_msv_data == Decimal::ZERO {
             final_msv_data.push(vec![index_timestamp, Decimal::ZERO, Decimal::ZERO]);
 
-        // 说明在这个时间范围内是有数据存在的
+        // 说明在这个时间范围内是有数据存在的,将推动行情的流动性放入副图
         } else {
-            final_msv_data.push(vec![index_timestamp, max_msv_data, max_msv_diss_data]);
+            final_msv_data.push(vec![index_timestamp, max_msv_data, max_msv_qty_data]);
+
+            let mut final_qty = max_msv_qty_data / Decimal::ONE_THOUSAND;
+            final_qty.rescale(2);
+            final_depth_data.push(vec![index_timestamp, final_qty]);
         }
 
         // ====================================== 时间步进处理 ======================================
@@ -314,20 +316,20 @@ pub fn parse_json_to_trades(trades_json: Value) -> Vec<Trade> {
     rst
 }
 
-// 将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
-}
+// // 将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
+// }