|
|
@@ -223,7 +223,6 @@ 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;
|
|
|
loop {
|
|
|
// 下标合法性判断
|
|
|
if depth_index >= simple_depths.len() {
|
|
|
@@ -237,17 +236,11 @@ 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);
|
|
|
// 下标步近
|
|
|
depth_index += 1;
|
|
|
}
|
|
|
|
|
|
// ====================================== 智能填充数据 ===============================================
|
|
|
- // 价差
|
|
|
- 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 {
|
|
|
final_depth_data.last().unwrap()[1]
|
|
|
@@ -264,6 +257,15 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
};
|
|
|
final_depth_data.push(vec![index_timestamp, rst_size]);
|
|
|
|
|
|
+ // 建议开仓距离
|
|
|
+ let mut rst_spread = if rst_size == Decimal::ZERO {
|
|
|
+ Decimal::ZERO
|
|
|
+ } else {
|
|
|
+ dec!(100000) / 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 {
|