|
@@ -178,19 +178,7 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
let mut depth_index = 0;
|
|
let mut depth_index = 0;
|
|
|
let mut final_depth_data: Vec<Vec<Decimal>> = vec![];
|
|
let mut final_depth_data: Vec<Vec<Decimal>> = vec![];
|
|
|
|
|
|
|
|
- let mut final_a1s_data: Vec<Vec<Decimal>> = vec![];
|
|
|
|
|
- let mut final_b1s_data: Vec<Vec<Decimal>> = vec![];
|
|
|
|
|
- let a1_first = if simple_depths.len() > 0 {
|
|
|
|
|
- simple_depths[0].a1
|
|
|
|
|
- } else {
|
|
|
|
|
- Decimal::ZERO
|
|
|
|
|
- };
|
|
|
|
|
- let b1_first = if simple_depths.len() > 0 {
|
|
|
|
|
- simple_depths[0].b1
|
|
|
|
|
- } else {
|
|
|
|
|
- Decimal::ZERO
|
|
|
|
|
- };
|
|
|
|
|
- let mid_price = (a1_first + b1_first) / Decimal::TWO;
|
|
|
|
|
|
|
+ let mut final_spread_data: Vec<Vec<Decimal>> = vec![];
|
|
|
|
|
|
|
|
let mut index_timestamp = Decimal::from_i64(start_time).unwrap();
|
|
let mut index_timestamp = Decimal::from_i64(start_time).unwrap();
|
|
|
let last_timestamp = Decimal::from_i64(end_time).unwrap();
|
|
let last_timestamp = Decimal::from_i64(end_time).unwrap();
|
|
@@ -199,6 +187,7 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
let mut max_msv_data = Decimal::ZERO;
|
|
let mut max_msv_data = Decimal::ZERO;
|
|
|
let mut max_msv_diss_data = Decimal::ZERO;
|
|
let mut max_msv_diss_data = Decimal::ZERO;
|
|
|
|
|
|
|
|
|
|
+ // ====================================== 数据生产 ===============================================
|
|
|
// 获取时间范围内的波动率数据
|
|
// 获取时间范围内的波动率数据
|
|
|
loop {
|
|
loop {
|
|
|
// 下标合法性判断
|
|
// 下标合法性判断
|
|
@@ -229,7 +218,6 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
// 获取时间范围内的深度数据、买一及卖一价数据
|
|
// 获取时间范围内的深度数据、买一及卖一价数据
|
|
|
let mut max_size = Decimal::ZERO;
|
|
let mut max_size = Decimal::ZERO;
|
|
|
let mut min_size = Decimal::ONE_THOUSAND * Decimal::ONE_THOUSAND;
|
|
let mut min_size = Decimal::ONE_THOUSAND * Decimal::ONE_THOUSAND;
|
|
|
- let mut max_spread_index = 0usize;
|
|
|
|
|
let mut max_spread = Decimal::ZERO;
|
|
let mut max_spread = Decimal::ZERO;
|
|
|
loop {
|
|
loop {
|
|
|
// 下标合法性判断
|
|
// 下标合法性判断
|
|
@@ -246,36 +234,14 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
min_size = min(min_size, depth.size);
|
|
min_size = min(min_size, depth.size);
|
|
|
// 这一秒的差价最大值
|
|
// 这一秒的差价最大值
|
|
|
let spread = depth.a1 - depth.b1;
|
|
let spread = depth.a1 - depth.b1;
|
|
|
- if spread > max_spread {
|
|
|
|
|
- max_spread = spread;
|
|
|
|
|
- max_spread_index = depth_index;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ max_spread = max(spread, max_spread);
|
|
|
// 下标步近
|
|
// 下标步近
|
|
|
depth_index += 1;
|
|
depth_index += 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// ====================================== 智能填充数据 ===============================================
|
|
// ====================================== 智能填充数据 ===============================================
|
|
|
- // 价差及买一、卖一数据处理
|
|
|
|
|
- if simple_depths.len() > 0 {
|
|
|
|
|
- // 数据填充
|
|
|
|
|
- if max_spread_index == 0 {
|
|
|
|
|
- if final_a1s_data.len() > 0 && final_b1s_data.len() > 0 {
|
|
|
|
|
- final_a1s_data.push(vec![index_timestamp, final_a1s_data.last().unwrap()[1]]);
|
|
|
|
|
- final_b1s_data.push(vec![index_timestamp, final_b1s_data.last().unwrap()[1]]);
|
|
|
|
|
- } else {
|
|
|
|
|
- final_a1s_data.push(vec![index_timestamp, Decimal::ZERO]);
|
|
|
|
|
- final_b1s_data.push(vec![index_timestamp, Decimal::ZERO]);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- let depth = &simple_depths[max_spread_index];
|
|
|
|
|
-
|
|
|
|
|
- final_a1s_data.push(vec![index_timestamp, depth.a1 - mid_price]);
|
|
|
|
|
- final_b1s_data.push(vec![index_timestamp, depth.b1 - mid_price]);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- final_a1s_data.push(vec![index_timestamp, Decimal::ZERO]);
|
|
|
|
|
- final_b1s_data.push(vec![index_timestamp, Decimal::ZERO]);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 价差
|
|
|
|
|
+ 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 {
|
|
let rst_size = if (max_size == Decimal::ZERO || min_size == Decimal::ONE_THOUSAND * Decimal::ONE_THOUSAND) && final_depth_data.len() > 0 {
|
|
@@ -318,8 +284,7 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, simpl
|
|
|
json!({
|
|
json!({
|
|
|
"msv": final_msv_data,
|
|
"msv": final_msv_data,
|
|
|
"liqs": final_depth_data,
|
|
"liqs": final_depth_data,
|
|
|
- "a1s": final_a1s_data,
|
|
|
|
|
- "b1s": final_b1s_data,
|
|
|
|
|
|
|
+ "spreads": final_spread_data,
|
|
|
"total_size": total_size,
|
|
"total_size": total_size,
|
|
|
"result_size": result_size,
|
|
"result_size": result_size,
|
|
|
})
|
|
})
|