Browse Source

进一步检查bitget撤单问题。

skyffire 8 months ago
parent
commit
209cd5b3ef
3 changed files with 47 additions and 36 deletions
  1. 45 34
      standard/src/bitget_swap.rs
  2. 1 1
      strategy/src/core.rs
  3. 1 1
      strategy/src/strategy.rs

+ 45 - 34
standard/src/bitget_swap.rs

@@ -648,6 +648,51 @@ impl Platform for BitgetSwap {
     async fn command_order(&mut self, order_command: &mut OrderCommand, trace_stack: &TraceStack) {
         let mut handles = vec![];
 
+        // 撤销订单
+        let mut cancel_handlers = vec![];
+        for item in order_command.cancel.keys() {
+            let gen_timestamp =  order_command.cancel[item].get(2).unwrap().parse::<i64>().unwrap();
+            let order_id = order_command.cancel[item].get(1).unwrap().clone();
+            let custom_id = order_command.cancel[item].get(0).unwrap().clone();
+
+            let mut self_clone = self.clone();
+            let before_submit2 = Utc::now().timestamp_millis();
+            let handle = spawn(async move {
+                let before_submit1 = Utc::now().timestamp_millis();
+                let result = self_clone.cancel_order(&order_id, &custom_id).await;
+                match result {
+                    Ok(result) => {
+                        let canceled = Utc::now().timestamp_millis();
+                        info!("cid={}, 生成-撤销2: {}, 撤销2-撤销1: {}, 撤销1-撤销完成(服务器回报): {}",
+                            custom_id,
+                            before_submit2 - gen_timestamp,
+                            before_submit1 - before_submit2,
+                            canceled - before_submit1
+                        );
+
+                        self_clone.order_sender.send(result).await.unwrap();
+                    }
+                    Err(error) => {
+                        // 取消失败去查订单。
+                        let query_rst = self_clone.get_order_detail(&order_id, &custom_id).await;
+                        match query_rst {
+                            Ok(order) => {
+                                self_clone.order_sender.send(order).await.unwrap();
+                            }
+                            Err(err) => {
+                                error!("撤单失败,而且查单也失败了,bitget_swap,oid={}, cid={}, err={:?}。", order_id.clone(), custom_id.clone(), err);
+                            }
+                        }
+                        self_clone.error_sender.send(error).await.unwrap();
+                    }
+                }
+            });
+            cancel_handlers.push(handle)
+        }
+        let futures = FuturesUnordered::from_iter(cancel_handlers);
+        // 等待所有任务完成
+        let _: Result<Vec<_>, _> = futures.try_collect().await;
+
         // 下单指令
         for item in order_command.limits_open.keys() {
             let mut ts = trace_stack.clone();
@@ -688,40 +733,6 @@ impl Platform for BitgetSwap {
         // 等待所有任务完成
         let _: Result<Vec<_>, _> = futures.try_collect().await;
 
-        // 撤销订单
-        let mut cancel_handlers = vec![];
-        for item in order_command.cancel.keys() {
-            let order_id = order_command.cancel[item].get(1).unwrap().clone();
-            let custom_id = order_command.cancel[item].get(0).unwrap().clone();
-
-            let mut self_clone = self.clone();
-            let handle = spawn(async move {
-                let result = self_clone.cancel_order(&order_id, &custom_id).await;
-                match result {
-                    Ok(result) => {
-                        self_clone.order_sender.send(result).await.unwrap();
-                    }
-                    Err(error) => {
-                        // 取消失败去查订单。
-                        let query_rst = self_clone.get_order_detail(&order_id, &custom_id).await;
-                        match query_rst {
-                            Ok(order) => {
-                                self_clone.order_sender.send(order).await.unwrap();
-                            }
-                            Err(err) => {
-                                error!("撤单失败,而且查单也失败了,bitget_swap,oid={}, cid={}, err={:?}。", order_id.clone(), custom_id.clone(), err);
-                            }
-                        }
-                        self_clone.error_sender.send(error).await.unwrap();
-                    }
-                }
-            });
-            cancel_handlers.push(handle)
-        }
-        let futures = FuturesUnordered::from_iter(cancel_handlers);
-        // 等待所有任务完成
-        let _: Result<Vec<_>, _> = futures.try_collect().await;
-
         // 检查订单指令
         let mut check_handlers = vec![];
         for item in order_command.check.keys() {

+ 1 - 1
strategy/src/core.rs

@@ -494,7 +494,7 @@ impl Core {
                         // info!("成交单耗时数据:{}", time_record.to_string());
                         info!("更新推算仓位 {:?}", self.local_position_by_orders);
                         let place_time = self.local_order_infos.get(&data.client_id).unwrap()[4].parse::<i64>().unwrap();
-                        info!("当前时间-订单委托时间={}ms", Utc::now().timestamp_millis() - place_time);
+                        info!("当前时间-订单委托时间={}ms, cid={}", Utc::now().timestamp_millis() - place_time, data.client_id.clone());
                         if let Some(oi) = self.local_cancel_cache.get(&data.client_id) {
                             info!("取消报文:{}", oi.symbol);
                             info!("当前时间-订单首次取消时间={}ms", Utc::now().timestamp_millis() - oi.local_time)

+ 1 - 1
strategy/src/strategy.rs

@@ -876,7 +876,7 @@ impl Strategy {
         for order_client_id in local_orders.keys() {
             let order = local_orders.get(order_client_id).unwrap();
             let key = format!("Cancel{}", *order_client_id);
-            let value = vec![order.client_id.clone(), order.order_id.clone()];
+            let value = vec![order.client_id.clone(), order.order_id.clone(), Utc::now().timestamp_millis().to_string()];
 
             // 开多订单处理
             if order.side == "kd".to_string() {