|
|
@@ -5,9 +5,9 @@ use rust_decimal::Decimal;
|
|
|
use rust_decimal::prelude::{FromPrimitive, ToPrimitive};
|
|
|
use rust_decimal_macros::dec;
|
|
|
use serde_json::{json, Value};
|
|
|
-use crate::db_connector::{get_depths_json, get_trades_json};
|
|
|
+use crate::db_connector::{get_trades_json};
|
|
|
use crate::params_utils::{get_str, parse_str_to_decimal};
|
|
|
-use crate::server::{Response, SimpleDepth, Trade};
|
|
|
+use crate::server::{Response, Trade};
|
|
|
|
|
|
pub fn symbol_fix(symbol: &str) -> String {
|
|
|
let mut fixed = symbol.to_uppercase();
|
|
|
@@ -64,21 +64,13 @@ pub async fn generate_msv(query_value: Value) -> HttpResponse {
|
|
|
start_time,
|
|
|
end_time,
|
|
|
).await;
|
|
|
- let depth_response = get_depths_json(
|
|
|
- exchange.as_str(),
|
|
|
- symbol.as_str(),
|
|
|
- start_time,
|
|
|
- end_time,
|
|
|
- ).await;
|
|
|
|
|
|
// 对数据库返回的数据进行容错处理
|
|
|
- if trades_response.code == 200 && depth_response.code == 200{
|
|
|
+ if trades_response.code == 200{
|
|
|
// 数据本地化处理
|
|
|
let trades = parse_json_to_trades(trades_response.data);
|
|
|
- // depth本地化处理
|
|
|
- let simple_depths = parse_json_to_simple_depths(depth_response.data);
|
|
|
// 指标生成
|
|
|
- let indicator = generate_msv_by_trades(trades, simple_depths, mills_back, start_time, end_time);
|
|
|
+ let indicator = generate_msv_by_trades(trades, mills_back, start_time, end_time);
|
|
|
|
|
|
// 返回数据
|
|
|
let response = Response {
|
|
|
@@ -97,7 +89,7 @@ pub async fn generate_msv(query_value: Value) -> HttpResponse {
|
|
|
}
|
|
|
|
|
|
// 将trades转换为具体指标
|
|
|
-pub fn generate_msv_by_trades(mut trades: Vec<Trade>, simple_depths: Vec<SimpleDepth>, mills_back: Decimal, start_time: i64, end_time: i64) -> Value {
|
|
|
+pub fn generate_msv_by_trades(mut trades: Vec<Trade>, mills_back: Decimal, start_time: i64, end_time: i64) -> Value {
|
|
|
let mut msv_data: Vec<Vec<Decimal>> = vec![];
|
|
|
|
|
|
const GAMMA: Decimal = dec!(0.5);
|
|
|
@@ -173,9 +165,9 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, simple_depths: Vec<SimpleD
|
|
|
|
|
|
// 按时间序列填充数据
|
|
|
let mut final_msv_data: Vec<Vec<Decimal>> = vec![];
|
|
|
- let mut final_depth_data: Vec<Vec<Decimal>> = vec![];
|
|
|
+ let final_depth_data: Vec<Vec<Decimal>> = vec![];
|
|
|
let mut data_index = 0;
|
|
|
- let mut depth_index = 0;
|
|
|
+ // let mut depth_index = 0;
|
|
|
let mut index_timestamp = Decimal::from_i64(start_time).unwrap();
|
|
|
let last_timestamp = Decimal::from_i64(end_time).unwrap();
|
|
|
let step_timestamp = dec!(1000);
|
|
|
@@ -210,22 +202,22 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, simple_depths: Vec<SimpleD
|
|
|
data_index = data_index + 1;
|
|
|
}
|
|
|
|
|
|
- // 获取时间范围内的深度数据
|
|
|
- let mut total_size = Decimal::ZERO;
|
|
|
- loop {
|
|
|
- // 下标合法性判断
|
|
|
- if depth_index >= simple_depths.len() {
|
|
|
- break;
|
|
|
- }
|
|
|
- // 时间范围合法性判断,只统计那一秒以内的深度总交易量
|
|
|
- if index_timestamp < simple_depths[depth_index].time {
|
|
|
- break;
|
|
|
- }
|
|
|
- // 这一秒的所有深度数据求和
|
|
|
- total_size += simple_depths[depth_index].size;
|
|
|
- // 下标步近
|
|
|
- depth_index += 1;
|
|
|
- }
|
|
|
+ // // 获取时间范围内的深度数据
|
|
|
+ // let mut total_size = Decimal::ZERO;
|
|
|
+ // loop {
|
|
|
+ // // 下标合法性判断
|
|
|
+ // if depth_index >= simple_depths.len() {
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // // 时间范围合法性判断,只统计那一秒以内的深度总交易量
|
|
|
+ // if index_timestamp < simple_depths[depth_index].time {
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // // 这一秒的所有深度数据求和
|
|
|
+ // total_size += simple_depths[depth_index].size;
|
|
|
+ // // 下标步近
|
|
|
+ // depth_index += 1;
|
|
|
+ // }
|
|
|
|
|
|
// 如果这两个值为0,则代表这mills_back毫秒以内是没有数据的,填充0数据,使得x轴是完整的
|
|
|
if max_msv_data == Decimal::ZERO {
|
|
|
@@ -236,7 +228,7 @@ pub fn generate_msv_by_trades(mut trades: Vec<Trade>, simple_depths: Vec<SimpleD
|
|
|
final_msv_data.push(vec![index_timestamp, max_msv_data, max_msv_diss_data]);
|
|
|
}
|
|
|
// 简易的深度数据处理
|
|
|
- final_depth_data.push(vec![index_timestamp, total_size]);
|
|
|
+ // final_depth_data.push(vec![index_timestamp, total_size]);
|
|
|
|
|
|
// ---------------- 最后的时间处理 -----------------
|
|
|
// 对时间进行步近
|
|
|
@@ -276,37 +268,37 @@ 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 time = Decimal::from_str(depth_json["t"].as_str().unwrap()).unwrap();
|
|
|
- let mut size = Decimal::ZERO;
|
|
|
-
|
|
|
- // 卖盘交易量统计
|
|
|
- for ask_order_book in depth_json["a"].as_array().unwrap() {
|
|
|
- let price = Decimal::from_str(ask_order_book.as_array().unwrap()[0].as_str().unwrap()).unwrap();
|
|
|
- let amount = Decimal::from_str(ask_order_book.as_array().unwrap()[1].as_str().unwrap()).unwrap();
|
|
|
-
|
|
|
- size = size + price * amount;
|
|
|
- }
|
|
|
-
|
|
|
- // 买盘交易量统计
|
|
|
- for bid_order_book in depth_json["b"].as_array().unwrap() {
|
|
|
- let price = Decimal::from_str(bid_order_book.as_array().unwrap()[0].as_str().unwrap()).unwrap();
|
|
|
- let amount = Decimal::from_str(bid_order_book.as_array().unwrap()[1].as_str().unwrap()).unwrap();
|
|
|
-
|
|
|
- size = size + price * amount;
|
|
|
- }
|
|
|
-
|
|
|
- size.rescale(2);
|
|
|
- let simple_depth = SimpleDepth {
|
|
|
- time,
|
|
|
- size,
|
|
|
- };
|
|
|
-
|
|
|
- rst.insert(0, simple_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 time = Decimal::from_str(depth_json["t"].as_str().unwrap()).unwrap();
|
|
|
+// let mut size = Decimal::ZERO;
|
|
|
+//
|
|
|
+// // 卖盘交易量统计
|
|
|
+// for ask_order_book in depth_json["a"].as_array().unwrap() {
|
|
|
+// let price = Decimal::from_str(ask_order_book.as_array().unwrap()[0].as_str().unwrap()).unwrap();
|
|
|
+// let amount = Decimal::from_str(ask_order_book.as_array().unwrap()[1].as_str().unwrap()).unwrap();
|
|
|
+//
|
|
|
+// size = size + price * amount;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 买盘交易量统计
|
|
|
+// for bid_order_book in depth_json["b"].as_array().unwrap() {
|
|
|
+// let price = Decimal::from_str(bid_order_book.as_array().unwrap()[0].as_str().unwrap()).unwrap();
|
|
|
+// let amount = Decimal::from_str(bid_order_book.as_array().unwrap()[1].as_str().unwrap()).unwrap();
|
|
|
+//
|
|
|
+// size = size + price * amount;
|
|
|
+// }
|
|
|
+//
|
|
|
+// size.rescale(2);
|
|
|
+// let simple_depth = SimpleDepth {
|
|
|
+// time,
|
|
|
+// size,
|
|
|
+// };
|
|
|
+//
|
|
|
+// rst.insert(0, simple_depth)
|
|
|
+// }
|
|
|
+//
|
|
|
+// rst
|
|
|
+// }
|