ソースを参照

bybit 定时主动获取仓位信息

增加bybit 定时主动获取仓位信息功能
JiahengHe 1 年間 前
コミット
f434e9fd80
2 ファイル変更31 行追加2 行削除
  1. 18 2
      strategy/src/bybit_usdt_swap.rs
  2. 13 0
      strategy/src/quant.rs

+ 18 - 2
strategy/src/bybit_usdt_swap.rs

@@ -2,10 +2,12 @@ use std::cmp::Ordering;
 use std::collections::BTreeMap;
 use std::sync::Arc;
 use std::sync::atomic::AtomicBool;
+use std::time::Duration;
 use futures_util::StreamExt;
 use rust_decimal::Decimal;
-use tokio::spawn;
+use tokio::{spawn, time};
 use tokio::sync::Mutex;
+use tracing::{error, info};
 use exchanges::bybit_swap_ws::{BybitSwapLogin, BybitSwapSubscribeType, BybitSwapWs, BybitSwapWsType};
 use exchanges::response_base::ResponseData;
 use global::trace_stack::TraceStack;
@@ -100,7 +102,7 @@ pub async fn bybit_swap_run(bool_v1: Arc<AtomicBool>,
         let bot_arc_clone = _quant_arc.clone();
         // 接收private信息
         spawn(async move {
-            let ct_val = _quant_arc.clone().lock().await.platform_rest.get_self_market().ct_val;
+            let ct_val = bot_arc_clone.clone().lock().await.platform_rest.get_self_market().ct_val;
             let run_symbol = symbols.clone()[0].clone();
             loop {
                 if let Some(private_data) = read_rx_private.next().await {
@@ -111,6 +113,20 @@ pub async fn bybit_swap_run(bool_v1: Arc<AtomicBool>,
                 }
             }
         });
+
+        // 定时获取仓位信息
+        let position_quant_clone = _quant_arc.clone();
+        spawn(async move {
+            let mut interval = time::interval(Duration::from_secs(30));
+            loop {
+                interval.tick().await;
+                {
+                    let mut quant = position_quant_clone.lock().await;
+                    quant.update_position_rest_swap().await;
+                }
+
+            }
+        });
     }
 }
 

+ 13 - 0
strategy/src/quant.rs

@@ -926,6 +926,19 @@ impl Quant {
         }
     }
 
+    pub async fn update_position_rest_swap(&mut self) {
+        let position = self.platform_rest.get_position().await;
+        match position {
+            Ok(val) => {
+                // info!("bybit_swap:定时获取的仓位信息");
+                self.update_position(val).await;
+            },
+            Err(err) => {
+                error!("bybit_swap:定时获取仓位信息错误!\nget_position:res_data={:?}", err);
+            }
+        }
+    }
+
     #[instrument(skip(self), level="TRACE")]
     pub async fn update_equity_rest_spot(&mut self) {
         match self.platform_rest.get_spot_account().await {