|
|
@@ -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]);
|
|
|
|
|
|
// ---------------- 最后的时间处理 -----------------
|
|
|
// 对时间进行步近
|