Browse Source

添加Binance调参参考

gepangpang 1 year ago
parent
commit
ec4faca6ed
2 changed files with 31 additions and 29 deletions
  1. 1 1
      config_analyze.toml.sample
  2. 30 28
      src/export_analyze.rs

+ 1 - 1
config_analyze.toml.sample

@@ -4,7 +4,7 @@ is_export = true
 proxy_address = "127.0.0.1:7890"
 # 查询币对
 symbol = "kas_USDT"
-# 配置交易所 目前支持["gate"]
+# 配置交易所 目前支持["binance", "gate"]
 exchanges = ["gate"]
 #时间范围 m:分钟, H:小时, D:天, W:周, M:月(分钟和月份区分大小写,其余不区分。例:10m)
 range_interval = "4H"

+ 30 - 28
src/export_analyze.rs

@@ -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();