|
|
@@ -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
|
|
|
+// }
|