فهرست منبع

基础的写完了,还要解结构。

skyffire 1 سال پیش
والد
کامیت
520a1e0f50
3فایلهای تغییر یافته به همراه113 افزوده شده و 1 حذف شده
  1. 2 0
      .gitignore
  2. 109 0
      strategy/src/bitget_usdt_swap.rs
  3. 2 1
      strategy/src/lib.rs

+ 2 - 0
.gitignore

@@ -7,3 +7,5 @@ config.toml*
 *.log.*
 /logs*
 /test_account.toml
+
+config.json

+ 109 - 0
strategy/src/bitget_usdt_swap.rs

@@ -0,0 +1,109 @@
+use std::collections::BTreeMap;
+use std::sync::Arc;
+use std::sync::atomic::AtomicBool;
+use rust_decimal::Decimal;
+use tokio::spawn;
+use tokio::sync::Mutex;
+use tracing::info;
+use exchanges::bitget_swap_ws::{BitgetSwapLogin, BitgetSwapSubscribeType, BitgetSwapWs, BitgetSwapWsType};
+use exchanges::response_base::ResponseData;
+use crate::core::Core;
+
+pub async fn bitget_usdt_swap_run(is_shutdown_arc :Arc<AtomicBool>,
+                                  is_trade: bool,
+                                  core_arc: Arc<Mutex<Core>>,
+                                  name: String,
+                                  symbols: Vec<String>,
+                                  is_colo: bool,
+                                  exchange_params: BTreeMap<String, String>) {
+    // 开启公共频道
+    let (write_tx_public, write_rx_public) = futures_channel::mpsc::unbounded();
+
+    // 开启公共连接
+    let is_shutdown_arc_c1 = is_shutdown_arc.clone();
+    let write_tx_am_public = Arc::new(Mutex::new(write_tx_public));
+    let name_clone = name.clone();
+    let core_arc_clone = core_arc.clone();
+    let symbols_clone = symbols.clone();
+    spawn(async move {
+        // 构建链接ws
+        let mut bg_public = BitgetSwapWs::new_label(name_clone.clone(),
+                                                    is_colo,
+                                                    None,
+                                                    BitgetSwapWsType::Public);
+
+        // 消费数据的函数
+        let mut update_flag_u = Decimal::ZERO;
+        let fun = move |data: ResponseData| {
+            let core_arc_cc = core_arc_clone.clone();
+
+            async move {
+                on_public_data(core_arc_cc, &mut update_flag_u, data).await
+            }
+        };
+
+        // 准备链接
+        bg_public.set_subscribe(vec![BitgetSwapSubscribeType::PuTrade]); // 只用订阅订单流数据
+        bg_public.set_symbols(symbols_clone);
+        bg_public.ws_connect_async(is_shutdown_arc_c1, fun, &write_tx_am_public, write_rx_public).await.expect("bitget_usdt_swap 链接有异常")
+    });
+
+    // 不需要交易就不用开启私有频道了
+    if !is_trade {
+        return;
+    }
+
+    // 开启私有频道
+    let (write_tx_private, write_rx_private) = futures_channel::mpsc::unbounded();
+
+    // 开启公共连接
+    let is_shutdown_arc_c1 = is_shutdown_arc.clone();
+    let write_tx_am_private = Arc::new(Mutex::new(write_tx_private));
+    spawn(async move {
+        // 构建链接ws
+        let mut bg_private = BitgetSwapWs::new_label(name.clone(),
+                                                     is_colo,
+                                                     None,
+                                                     BitgetSwapWsType::Private);
+
+        // 消费数据的函数
+        let core_arc_clone = core_arc.clone();
+        let mut ct_val = Decimal::ZERO;
+        let fun = move |data: ResponseData| {
+            let core_arc_cc = core_arc_clone.clone();
+
+            async move {
+                on_private_data(core_arc_cc, ct_val, data).await
+            }
+        };
+
+        // 准备链接
+        bg_private.set_subscribe(vec![
+            BitgetSwapSubscribeType::PrOrders,
+            BitgetSwapSubscribeType::PrAccount,
+            BitgetSwapSubscribeType::PrPosition
+        ]);
+        bg_private.set_symbols(symbols.clone());
+        bg_private.ws_connect_async(is_shutdown_arc_c1, fun, &write_tx_am_private, write_rx_private).await.expect("bitget_usdt_swap 链接有异常")
+    });
+}
+
+async fn on_private_data(core_arc_clone: Arc<Mutex<Core>>,
+                         ct_val: Decimal,
+                         response: ResponseData) {
+
+}
+
+async fn on_public_data(core_arc_clone: Arc<Mutex<Core>>,
+                        update_flag_u: &mut Decimal,
+                        response: ResponseData) {
+    info!(?response)
+}
+
+fn parse_btree_map_to_bitget_spot_login(exchange_params: BTreeMap<String, String>) -> BitgetSwapLogin {
+    BitgetSwapLogin {
+        api_key: exchange_params.get("access_key").unwrap().clone(),
+        secret_key: exchange_params.get("secret_key").unwrap().clone(),
+        passphrase_key: exchange_params.get("pass_key").unwrap().clone(),
+    }
+}

+ 2 - 1
strategy/src/lib.rs

@@ -11,4 +11,5 @@ mod kucoin_swap;
 mod kucoin_spot;
 mod bitget_spot;
 mod okx_usdt_swap;
-mod bybit_usdt_swap;
+mod bybit_usdt_swap;
+mod bitget_usdt_swap;