Pārlūkot izejas kodu

修复bybit市价平仓时的问题。

skyfffire 1 gadu atpakaļ
vecāks
revīzija
0387e8881c
3 mainītis faili ar 17 papildinājumiem un 24 dzēšanām
  1. 2 21
      exchanges/src/socket_tool.rs
  2. 9 2
      standard/src/bybit_swap.rs
  3. 6 1
      strategy/src/quant.rs

+ 2 - 21
exchanges/src/socket_tool.rs

@@ -95,6 +95,7 @@ impl AbstractWsMode {
                             if response_data.is_some() {
                                 let mut data = response_data.unwrap();
                                 data.label = lable.clone();
+                                data.time = chrono::Utc::now().timestamp_micros();
                                 let code = data.code.clone();
                                 /*
                                     200 -正确返回
@@ -106,27 +107,7 @@ impl AbstractWsMode {
                                 */
                                 match code.as_str() {
                                     "200" => {
-                                        if data.label.contains("gate_usdt_swap") {
-                                            if data.channel == "futures.order_book" && read_tx.is_empty() {
-                                                read_tx.unbounded_send(data).unwrap();
-                                            } else {
-                                                read_tx.unbounded_send(data).unwrap();
-                                            }
-                                        } else if data.label.contains("binance_usdt_swap") {
-                                            if data.channel == "bookTicker" && read_tx.is_empty() {
-                                                read_tx.unbounded_send(data).unwrap();
-                                            } else {
-                                                read_tx.unbounded_send(data).unwrap();
-                                            }
-                                        } else if data.label.contains("bybit_usdt_swap") {
-                                            if data.channel == "orderbook" && read_tx.is_empty() {
-                                                read_tx.unbounded_send(data).unwrap();
-                                            } else {
-                                                read_tx.unbounded_send(data).unwrap();
-                                            }
-                                        } else {
-                                            read_tx.unbounded_send(data).unwrap();
-                                        }
+                                        read_tx.unbounded_send(data).unwrap();
                                     }
                                     "-200" => {
                                         //登录成功

+ 9 - 2
standard/src/bybit_swap.rs

@@ -413,12 +413,17 @@ impl Platform for BybitSwap {
     async fn take_order_symbol(&mut self, symbol: String, ct_val: Decimal, custom_id: &str, origin_side: &str, price: Decimal, amount: Decimal) -> Result<Order, Error> {
         let symbol_upper = symbol.replace("_", "").trim().to_uppercase();
         let size = (amount / ct_val).floor();
+        let order_type = if price == Decimal::ZERO {
+            "Market"
+        } else {
+            "Limit"
+        };
         let mut params = json!({
             "orderLinkId": format!("t-{}", custom_id),
             "symbol": symbol_upper,
             "price": price.to_string(),
             "category": "linear",
-            "orderType":"Limit",
+            "orderType": order_type,
             "qty": json!(size),
             // 0.單向持倉 1.買側雙向持倉 2.賣側雙向持倉
             "positionIdx": json!(1),
@@ -577,7 +582,7 @@ impl Platform for BybitSwap {
                                 result_sd.send(order).await.unwrap();
                             }
                             Err(_err) => {
-                                // error!("撤单失败,而且查单也失败了,gate_io_swap,oid={}, cid={}。", order_id.clone(), custom_id.clone());
+                                error!("bybit:撤单失败,而且查单也失败了,oid={}, cid={}。", order_id.clone(), custom_id.clone());
                                 // panic!("撤单失败,而且查单也失败了,gate_io_swap,oid={}, cid={}。", order_id.clone(), custom_id.clone());
                             }
                         }
@@ -617,6 +622,8 @@ impl Platform for BybitSwap {
                         result_sd.send(result).await.unwrap();
                     }
                     Err(error) => {
+                        error!("bybit:下单失败:{:?}", error);
+
                         let mut err_order = Order::new();
                         err_order.custom_id = cid.clone();
                         err_order.status = "REMOVE".to_string();

+ 6 - 1
strategy/src/quant.rs

@@ -1356,7 +1356,12 @@ impl Quant {
                     let mut ts = TraceStack::default();
                     ts.on_before_send();
                     // 市价单
-                    match self.platform_rest.take_order_symbol(position.symbol.clone(), Decimal::ONE, utils::generate_client_id(None).as_str(), side, price, position.amount.abs()).await {
+                    match self.platform_rest.take_order_symbol(position.symbol.clone(),
+                                                               Decimal::ONE,
+                                                               utils::generate_client_id(None).as_str(),
+                                                               side,
+                                                               price,
+                                                               position.amount.abs()).await {
                         Ok(order) => {
                             ts.on_after_send();
                             info!("    {}仓位清除市价下单成功 {:?}, {}", position.symbol.clone(), order, ts.to_string());