|
@@ -16,7 +16,7 @@ use standard::exchange::ExchangeEnum;
|
|
|
use standard::exchange_struct_handler::ExchangeStructHandler;
|
|
use standard::exchange_struct_handler::ExchangeStructHandler;
|
|
|
use crate::json_db_utils::{collect_special_trades_json, delete_db_by_exchange};
|
|
use crate::json_db_utils::{collect_special_trades_json, delete_db_by_exchange};
|
|
|
use crate::listener_tools::{TradeMap, update_trade};
|
|
use crate::listener_tools::{TradeMap, update_trade};
|
|
|
-use crate::msv::{generate_msv_by_trades, Indicators, parse_json_to_trades};
|
|
|
|
|
|
|
+use crate::msv::{generate_msv_by_trades, Indicators, parse_json_to_trades, delete_expire_data};
|
|
|
|
|
|
|
|
const EXCHANGE_NAME: &str = "bybit_usdt_swap";
|
|
const EXCHANGE_NAME: &str = "bybit_usdt_swap";
|
|
|
|
|
|
|
@@ -66,16 +66,39 @@ pub async fn run_listener(is_shutdown_arc: Arc<AtomicBool>) {
|
|
|
}
|
|
}
|
|
|
// 每分钟计算msv
|
|
// 每分钟计算msv
|
|
|
tokio::spawn(async move {
|
|
tokio::spawn(async move {
|
|
|
|
|
+ // 上次最后结束时间
|
|
|
|
|
+ let mut last_time: i64 = 0;
|
|
|
loop {
|
|
loop {
|
|
|
let end_timestamp = Utc::now().timestamp_millis();
|
|
let end_timestamp = Utc::now().timestamp_millis();
|
|
|
- let start_timestamp = end_timestamp - 60 * 1000 * 60 * 2;
|
|
|
|
|
|
|
+ let mut start_timestamp = last_time;
|
|
|
|
|
+ // 第一次拿两小时
|
|
|
|
|
+ if start_timestamp == 0 {
|
|
|
|
|
+ start_timestamp = end_timestamp - 60 * 1000 * 60 * 2;
|
|
|
|
|
+ }
|
|
|
for symbol in symbols.clone() {
|
|
for symbol in symbols.clone() {
|
|
|
let trades_value = collect_special_trades_json(start_timestamp, end_timestamp, EXCHANGE_NAME, &symbol).await;
|
|
let trades_value = collect_special_trades_json(start_timestamp, end_timestamp, EXCHANGE_NAME, &symbol).await;
|
|
|
let trades = parse_json_to_trades(trades_value);
|
|
let trades = parse_json_to_trades(trades_value);
|
|
|
let msv = generate_msv_by_trades(trades, dec!(50), vec![], start_timestamp, end_timestamp);
|
|
let msv = generate_msv_by_trades(trades, dec!(50), vec![], start_timestamp, end_timestamp);
|
|
|
let mut indicator_map = INDICATOR_MAP.lock().await;
|
|
let mut indicator_map = INDICATOR_MAP.lock().await;
|
|
|
- indicator_map.insert(symbol, msv);
|
|
|
|
|
|
|
+ let new_msv = match indicator_map.get(&symbol) {
|
|
|
|
|
+ None => {
|
|
|
|
|
+ msv
|
|
|
|
|
+ }
|
|
|
|
|
+ Some(old_msv) => {
|
|
|
|
|
+ let mut indicators = Indicators::new();
|
|
|
|
|
+ indicators.indicator.extend(old_msv.indicator.clone());
|
|
|
|
|
+ indicators.indicator.extend(msv.indicator);
|
|
|
|
|
+ indicators.result_size = old_msv.result_size + msv.result_size;
|
|
|
|
|
+ indicators.total_size = old_msv.total_size + msv.total_size;
|
|
|
|
|
+ indicators.last_calc_time = msv.last_calc_time;
|
|
|
|
|
+ // 删除掉指定小时前的数据
|
|
|
|
|
+ delete_expire_data(indicators, 4)
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+ indicator_map.insert(symbol, new_msv);
|
|
|
}
|
|
}
|
|
|
|
|
+ // 更新结束时间
|
|
|
|
|
+ last_time = end_timestamp;
|
|
|
tokio::time::sleep(Duration::from_secs(65)).await;
|
|
tokio::time::sleep(Duration::from_secs(65)).await;
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|