瀏覽代碼

修复bitget的bug:

两个bug

1. 仓位为0时没推送?
2. 仓位为负数时floor取值?
skyfffire 11 月之前
父節點
當前提交
a2904c1f79
共有 4 個文件被更改,包括 24 次插入21 次删除
  1. 1 0
      .gitignore
  2. 3 2
      strategy/src/avellaneda_stoikov.rs
  3. 20 6
      strategy/src/bitget_usdt_swap.rs
  4. 0 13
      strategy/src/core.rs

+ 1 - 0
.gitignore

@@ -1,5 +1,6 @@
 /target
 /.idea
+/db
 
 Cargo.lock
 config.toml*

+ 3 - 2
strategy/src/avellaneda_stoikov.rs

@@ -325,7 +325,8 @@ impl AvellanedaStoikov {
         let prev_inventory = self.inventory;
         self.pos_amount = pos_amount.clone();
         self.pos_avg_price = pos_avg_price.clone();
-        self.inventory = (pos_amount / (min_amount_value / self.mid_price)).floor();
+        self.inventory = (pos_amount / (min_amount_value / self.mid_price)).trunc();
+        info!("pos_amount={}, inventory={}", pos_amount, self.inventory);
         if prev_inventory != self.inventory && prev_inventory.is_zero() {
             self.prev_trade_time = Utc::now().timestamp_micros();
             self.close_price = self.order_ref_price;
@@ -336,7 +337,7 @@ impl AvellanedaStoikov {
     }
 
     pub fn update_sigma_square(&mut self) {
-        self.sigma_square = self.ref_price * dec!(0.0006);
+        self.sigma_square = self.ref_price * dec!(0.001);
         self.sigma_square.rescale(10);
     }
 

+ 20 - 6
strategy/src/bitget_usdt_swap.rs

@@ -4,14 +4,14 @@ use std::sync::atomic::AtomicBool;
 use rust_decimal::Decimal;
 use tokio::spawn;
 use tokio::sync::Mutex;
-use tracing::{error, info};
+use tracing::{error};
 use tokio_tungstenite::tungstenite::Message;
 use exchanges::bitget_swap_ws::{BitgetSwapLogin, BitgetSwapSubscribeType, BitgetSwapWs, BitgetSwapWsType};
 use exchanges::response_base::ResponseData;
 use global::trace_stack::TraceStack;
 use standard::exchange::ExchangeEnum::BitgetSwap;
 use standard::exchange_struct_handler::ExchangeStructHandler;
-use standard::{Depth, OrderBook};
+use standard::{Depth, OrderBook, Position, PositionModeEnum};
 use crate::core::Core;
 use crate::exchange_disguise::{on_depth, on_record, on_ticker, on_trade};
 use crate::model::OrderInfo;
@@ -133,9 +133,9 @@ async fn on_private_data(core_arc_clone: Arc<Mutex<Core>>, ct_val: &Decimal, run
                     continue;
                 }
 
-                if order.deal_amount != Decimal::ZERO {
-                    info!("bitget order 消息原文:{:?}", response);
-                }
+                // if order.deal_amount != Decimal::ZERO {
+                //     info!("bitget order 消息原文:{:?}", response);
+                // }
 
                 let order_info = OrderInfo::parse_order_to_order_info(&mut order);
                 order_infos.push(order_info);
@@ -145,8 +145,22 @@ async fn on_private_data(core_arc_clone: Arc<Mutex<Core>>, ct_val: &Decimal, run
             core.update_order(order_infos, trace_stack).await;
         }
         "position" => {
-            let positions = ExchangeStructHandler::position_handle(BitgetSwap, response, ct_val);
+            let mut positions = ExchangeStructHandler::position_handle(BitgetSwap, response, ct_val);
             let mut core = core_arc_clone.lock().await;
+
+            if positions.is_empty() {
+                positions.push(Position {
+                    symbol: run_symbol.to_string(),
+                    margin_level: Default::default(),
+                    amount: Default::default(),
+                    frozen_amount: Default::default(),
+                    price: Default::default(),
+                    profit: Default::default(),
+                    position_mode: PositionModeEnum::Both,
+                    margin: Default::default(),
+                });
+            }
+
             core.update_position(positions).await;
         }
         _ => {

+ 0 - 13
strategy/src/core.rs

@@ -887,19 +887,6 @@ impl Core {
         }
     }
 
-    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 {