|
|
@@ -6,7 +6,7 @@ use rust_decimal::Decimal;
|
|
|
use rust_decimal_macros::dec;
|
|
|
use tracing::{info};
|
|
|
use crate::export_template;
|
|
|
-use crate::export_ticker::get_gate_ticker_info;
|
|
|
+use crate::export_ticker::{get_binance_ticker_info, get_gate_ticker_info};
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
pub struct Ticker {
|
|
|
@@ -29,26 +29,19 @@ pub async fn export_ticker(symbol: &str, exchange: &str, range_interval: &str) {
|
|
|
let start_at = timestamp_seconds_now - range_interval.interval_time;
|
|
|
let end_at = timestamp_seconds_now;
|
|
|
|
|
|
- let amplitude_map;
|
|
|
- match exchange.to_uppercase().as_str() {
|
|
|
- "GATE" => {
|
|
|
- amplitude_map = export_gate_ticker(start_at, end_at, symbol.to_uppercase()).await;
|
|
|
- }
|
|
|
- _ => {
|
|
|
- panic!("交易所输入错误!")
|
|
|
- }
|
|
|
- };
|
|
|
+ let ticker_info = get_ticker_info(&exchange.to_uppercase(), start_at, end_at, symbol).await;
|
|
|
+ let amplitude_map = get_amplitude(ticker_info);
|
|
|
|
|
|
export_template::template_analyze::export_html(&range_interval.interval_text, &symbol.to_uppercase(), amplitude_map.keys().cloned().collect(), amplitude_map.values().cloned().collect())
|
|
|
}
|
|
|
|
|
|
-pub fn parse_range_interval (range_interval: &str) -> RangeInterval {
|
|
|
+pub fn parse_range_interval(range_interval: &str) -> RangeInterval {
|
|
|
let interval_text;
|
|
|
let interval_time;
|
|
|
let range_interval_len = range_interval.len();
|
|
|
let time = range_interval[0..range_interval_len - 1].parse::<i64>().unwrap();
|
|
|
let mut unit = range_interval[range_interval_len - 1..range_interval_len].to_string();
|
|
|
- if unit != "m" { unit = unit.to_uppercase().clone();};
|
|
|
+ if unit != "m" { unit = unit.to_uppercase().clone(); };
|
|
|
match unit.as_str() {
|
|
|
"m" => {
|
|
|
interval_text = format!("{} 分钟", time);
|
|
|
@@ -75,19 +68,6 @@ pub fn parse_range_interval (range_interval: &str) -> RangeInterval {
|
|
|
RangeInterval { interval_time, interval_text: interval_text.to_string() }
|
|
|
}
|
|
|
|
|
|
-pub async fn pull_gate_ticker(ticker_map: &mut BTreeMap<u64, Ticker>, start_at: i64, end_at: i64, symbol: String) {
|
|
|
- let trades_list = get_gate_ticker_info(&symbol, &start_at.to_string(), &end_at.to_string()).await;
|
|
|
- for trades in trades_list {
|
|
|
- let key = trades.create_time.parse::<u64>().unwrap();
|
|
|
- let ticker = Ticker {
|
|
|
- create_time: Decimal::from_str(&trades.create_time).unwrap(),
|
|
|
- price: Decimal::from_str(&trades.price).unwrap(),
|
|
|
- amount: Decimal::from_str(&trades.size).unwrap(),
|
|
|
- };
|
|
|
- ticker_map.insert(key, ticker);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
// 计算最近range毫秒的的波动
|
|
|
pub fn calc_gate_ticker_amplitude(ticker_map: BTreeMap<u64, Ticker>) -> BTreeMap<Decimal, Decimal> {
|
|
|
let limit_range = dec!(100);
|
|
|
@@ -156,13 +136,35 @@ pub fn calc_gate_ticker_amplitude(ticker_map: BTreeMap<u64, Ticker>) -> BTreeMap
|
|
|
return amplitude_map;
|
|
|
}
|
|
|
|
|
|
-pub async fn export_gate_ticker(start_at: i64, end_at: i64, symbol: String) -> BTreeMap<Decimal, Decimal> {
|
|
|
+pub async fn get_ticker_info(exchange: &str, start_at: i64, end_at: i64, symbol: &str) -> BTreeMap<u64, Ticker> {
|
|
|
let mut ticker_map: BTreeMap<u64, Ticker> = BTreeMap::new();
|
|
|
- // 获取ticker数据
|
|
|
- pull_gate_ticker(&mut ticker_map, start_at, end_at, symbol).await;
|
|
|
+ let trades_list;
|
|
|
+ match exchange {
|
|
|
+ "BINANCE" => {
|
|
|
+ trades_list = get_binance_ticker_info(symbol, &start_at.to_string(), &end_at.to_string()).await;
|
|
|
+ }
|
|
|
+ "GATE" => {
|
|
|
+ trades_list = get_gate_ticker_info(symbol, &start_at.to_string(), &end_at.to_string()).await;
|
|
|
+ }
|
|
|
+ _ => {
|
|
|
+ panic!("不支持该交易所");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for trades in trades_list {
|
|
|
+ let key = trades.create_time.parse::<u64>().unwrap();
|
|
|
+ let ticker = Ticker {
|
|
|
+ create_time: Decimal::from_str(&trades.create_time).unwrap(),
|
|
|
+ price: Decimal::from_str(&trades.price).unwrap(),
|
|
|
+ amount: Decimal::from_str(&trades.size).unwrap(),
|
|
|
+ };
|
|
|
+ ticker_map.insert(key, ticker);
|
|
|
+ }
|
|
|
let len = ticker_map.len();
|
|
|
info!("网络层执行完毕,总数据量条数:{}。", len);
|
|
|
+ return ticker_map;
|
|
|
+}
|
|
|
|
|
|
+pub fn get_amplitude(ticker_map: BTreeMap<u64, Ticker>) -> BTreeMap<Decimal, Decimal> {
|
|
|
// 逻辑层执行
|
|
|
let amplitude_map = calc_gate_ticker_amplitude(ticker_map);
|
|
|
let amplitude_map_len = amplitude_map.len();
|