JiahengHe 2 лет назад
Родитель
Сommit
c1703f6038
3 измененных файлов с 36 добавлено и 12 удалено
  1. 1 2
      src/quant_libs.rs
  2. 6 1
      strategy/src/exchange_disguise.rs
  3. 29 9
      strategy/src/quant.rs

+ 1 - 2
src/quant_libs.rs

@@ -9,7 +9,6 @@ use std::time::Duration;
 use tokio::sync::{mpsc, Mutex};
 use tracing::{error, info};
 use global::params::Params;
-use standard::exchange::ExchangeEnum::GateSwap;
 use standard::Order;
 use strategy::model::OrderInfo;
 
@@ -22,7 +21,7 @@ pub async fn init(params: Params, ws_running: Arc<AtomicBool>) -> Arc<Mutex<Quan
     let (order_sender, mut order_receiver) = mpsc::channel::<Order>(100);
     let (error_sender, mut error_receiver) = mpsc::channel::<Error>(100);
 
-    let mut quant_obj = Quant::new(GateSwap, params.clone(), exchange_params.clone(), order_sender.clone(), error_sender.clone()).await;
+    let mut quant_obj = Quant::new(params.exchange.clone(), params.clone(), exchange_params.clone(), order_sender.clone(), error_sender.clone()).await;
     let ref_name = quant_obj.ref_name[0].clone();
     let trade_name = quant_obj.trade_name.clone();
 

+ 6 - 1
strategy/src/exchange_disguise.rs

@@ -187,6 +187,11 @@ async fn gate_swap_run(bool_v1 :Arc<AtomicBool>, type_num: i8, quant_arc: Arc<Mu
 async fn kucoin_swap_run(bool_v1 :Arc<AtomicBool>, type_num: i8, quant_arc: Arc<Mutex<Quant>>, name: String, symbols: Vec<String>, exchange_params: BTreeMap<String, String>){
     let (tx, mut rx) = channel(100);
     let symbols_clone = symbols.clone();
+    let mut symbol_arr = Vec::new();
+    for symbol in symbols_clone{
+       let new_symbol = symbol.replace("_", "").to_uppercase() + "M";
+        symbol_arr.push(new_symbol);
+    }
     tokio::spawn( async move {
         let mut kucoin_exc;
         // 交易
@@ -208,7 +213,7 @@ async fn kucoin_swap_run(bool_v1 :Arc<AtomicBool>, type_num: i8, quant_arc: Arc<
                 KucoinSubscribeType::PuContractMarketExecution
             ]);
         }
-        kucoin_exc.custom_subscribe(bool_v1, symbols_clone).await;
+        kucoin_exc.custom_subscribe(bool_v1, symbol_arr).await;
     });
     tokio::spawn(async move {
         let bot_arc_clone = Arc::clone(&quant_arc);

+ 29 - 9
strategy/src/quant.rs

@@ -17,7 +17,8 @@ use tracing::{debug, error, info, warn};
 use global::params::Params;
 use global::public_params::{ASK_PRICE_INDEX, BID_PRICE_INDEX, LENGTH};
 use standard::{Account, Market, Order, OrderCommand, Platform, Position, PositionModeEnum, SpecialTicker, Ticker};
-use standard::exchange::{Exchange, ExchangeEnum};
+use standard::exchange::{Exchange};
+use standard::exchange::ExchangeEnum::{BinanceSpot, BinanceSwap, GateSpot, GateSwap, KucoinSwap};
 
 use crate::model::{LocalPosition, OrderInfo, TraderMsg};
 
@@ -102,7 +103,7 @@ pub struct Quant {
 }
 
 impl Quant {
-    pub async fn new(exchange_rest: ExchangeEnum, params: Params, exchange_params: BTreeMap<String, String>,  order_sender: Sender<Order>, error_sender: Sender<Error>) -> Quant {
+    pub async fn new(exchange: String, params: Params, exchange_params: BTreeMap<String, String>,  order_sender: Sender<Order>, error_sender: Sender<Error>) -> Quant {
         let symbol = params.pair.clone();
         let pairs: Vec<&str> = params.pair.split('_').collect();
         let mut quant_obj = Quant {
@@ -180,7 +181,26 @@ impl Quant {
                 max_notional: Default::default(),
                 ct_val: Default::default(),
             },
-            platform_rest: Exchange::new(exchange_rest, symbol, false, exchange_params, order_sender, error_sender).await,
+            platform_rest: match exchange.as_str() {
+                "kucoin_usdt_swap" => {
+                   Exchange::new(KucoinSwap, symbol, false, exchange_params, order_sender, error_sender).await
+                },
+                "gate_usdt_swap" => {
+                   Exchange::new(GateSwap, symbol, false, exchange_params, order_sender, error_sender).await
+                },
+                "gate_usdt_spot" => {
+                    Exchange::new(GateSpot, symbol, false, exchange_params, order_sender, error_sender).await
+                },
+                "binance_usdt_swap" => {
+                    Exchange::new(BinanceSwap, symbol, false, exchange_params, order_sender, error_sender).await
+                },
+                "binance_usdt_spot" => {
+                    Exchange::new(BinanceSpot, symbol, false, exchange_params, order_sender, error_sender).await
+                }
+                _ => {
+                    panic!("201未找到对应的交易所rest枚举!")
+                }
+            },
             max_buy_min_sell_cache: Default::default(),
             local_depths: Default::default(),
             is_update: Default::default()
@@ -508,31 +528,31 @@ impl Quant {
         // 检查 ticker 行情
         for i in &self.ref_name {
             if self.tickers.is_empty() || !self.tickers.contains_key(i) {
-                info!("513参考盘口ticker未准备好");
+                info!("529参考盘口ticker未准备好: {:?}", self.tickers);
                 return;
             } else {
                 if self.tickers.get(i).unwrap().buy == dec!(0) || self.tickers.get(i).unwrap().sell == dec!(0) {
-                    info!("517参考盘口ticker未准备好");
+                    info!("533参考盘口ticker未准备好: {:?}", self.tickers);
                     return;
                 }
             }
         }
         if self.tickers.contains_key(&self.trade_name) {
             if self.tickers.get(&self.trade_name).unwrap().buy == dec!(0) || self.tickers.get(&self.trade_name).unwrap().sell == dec!(0) {
-                info!("524参考盘口ticker未准备好");
+                info!("540交易盘口ticker未准备好: {:?}", self.tickers);
                 return;
             }
         } else {
-            info!("528交易盘口ticker未准备好");
+            info!("544交易盘口ticker未准备好: {:?}", self.tickers);
             return;
         }
         // 检查 market 行情
         let all_market: Vec<Decimal> = self.get_all_market_data();
         if all_market.len() != LENGTH * (1usize + self.ref_num as usize) {
-            info!("聚合行情未准备好");
+            info!("550聚合行情未准备好: market长度:{}, 检验数: {}", all_market.len(), LENGTH * (1usize + self.ref_num as usize));
             return;
         } else {
-            info!("聚合行情准备就绪");
+            info!("553聚合行情准备就绪");
             self.trade_msg.market = all_market;
             self.predictor.market_info_handler(&self.trade_msg.market);
         }