|
|
@@ -65,19 +65,23 @@ pub async fn generate_msv(query_value: Value) -> HttpResponse {
|
|
|
start_time,
|
|
|
end_time,
|
|
|
).await;
|
|
|
- let simple_trades_response = get_simple_depths_json(
|
|
|
+ let simple_start_time = if start_time < end_time - 240 * 60 * 1000 {
|
|
|
+ end_time - 240 * 60 * 1000
|
|
|
+ } else {
|
|
|
+ start_time
|
|
|
+ };
|
|
|
+ let simple_depths_response = get_simple_depths_json(
|
|
|
exchange.as_str(),
|
|
|
symbol.as_str(),
|
|
|
- start_time,
|
|
|
+ simple_start_time,
|
|
|
end_time,
|
|
|
).await;
|
|
|
|
|
|
// 对数据库返回的数据进行容错处理
|
|
|
- if trades_response.code == 200 && simple_trades_response.code == 200 {
|
|
|
+ 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_trades_response.data);
|
|
|
- let simple_depths = vec![];
|
|
|
+ let simple_depths = parse_json_to_simple_depths(simple_depths_response.data);
|
|
|
// 指标生成
|
|
|
let indicator = generate_msv_by_trades(trades, mills_back, simple_depths, start_time, end_time);
|
|
|
|
|
|
@@ -179,7 +183,7 @@ 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 final_spread_data: Vec<Vec<Decimal>> = vec![];
|
|
|
+ let mut 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();
|
|
|
@@ -219,7 +223,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;
|
|
|
- // let mut max_spread = Decimal::ZERO;
|
|
|
+ let mut max_spread = Decimal::ZERO;
|
|
|
loop {
|
|
|
// 下标合法性判断
|
|
|
if depth_index >= simple_depths.len() {
|
|
|
@@ -234,15 +238,15 @@ 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);
|
|
|
+ let spread = depth.a1 - depth.b1;
|
|
|
+ max_spread = max(spread, max_spread);
|
|
|
// 下标步近
|
|
|
depth_index += 1;
|
|
|
}
|
|
|
|
|
|
// ====================================== 智能填充数据 ===============================================
|
|
|
// 价差
|
|
|
- // final_spread_data.push(vec![index_timestamp, max_spread]);
|
|
|
+ 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 {
|
|
|
@@ -309,19 +313,19 @@ pub fn parse_json_to_trades(trades_json: Value) -> Vec<Trade> {
|
|
|
}
|
|
|
|
|
|
// 将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
|
|
|
-// }
|
|
|
+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
|
|
|
+}
|