Просмотр исходного кода

加入解锁quant的时间检测。

skyffire 1 год назад
Родитель
Сommit
c143695319

+ 12 - 1
global/src/trace_stack.rs

@@ -7,6 +7,8 @@ use rust_decimal::prelude::ToPrimitive;
 pub struct TraceStack {
     pub before_network: i64,                // 官方数据生成时间
     pub after_network: i64,                 // 到达网络层时间
+
+    pub before_unlock_quant: i64,           // 解锁quant之前的时间
     pub before_quant: i64,                  // quant层执行开始时间(也是通道+锁走完后的时间)
     pub after_quant: i64,                   // quant层执行结束时间
 
@@ -33,6 +35,10 @@ impl TraceStack {
         self.after_network = after_network;
     }
 
+    pub fn on_before_unlock_quant(&mut self) {
+        self.before_unlock_quant = Utc::now().timestamp_micros();
+    }
+
     pub fn on_before_quant(&mut self) {
         self.before_quant = Utc::now().timestamp_micros();
     }
@@ -101,8 +107,12 @@ impl fmt::Display for TraceStack {
             msg.push_str(format!("本地总耗时{}微秒  ", self.before_send - self.after_network).as_str());
         }
 
+        if self.before_quant != 0 && self.before_unlock_quant != 0 {
+            msg.push_str(format!("解锁quant{}微秒  ", self.before_quant - self.before_unlock_quant).as_str());
+        }
+
         if self.after_network != 0 && self.after_strategy != 0 {
-            msg.push_str(format!("直到quant{}微秒  ", self.after_strategy - self.after_network).as_str());
+            msg.push_str(format!("quant走完{}微秒  ", self.after_strategy - self.after_network).as_str());
         }
 
         if self.before_network != 0 && self.after_network != 0 {
@@ -148,6 +158,7 @@ impl Default for TraceStack {
             after_network: 0,
             before_format: 0,
             after_format: 0,
+            before_unlock_quant: 0,
             before_quant: 0,
             after_quant: 0,
             before_strategy: 0,

+ 1 - 1
src/quant_libs.rs

@@ -74,7 +74,7 @@ pub async fn init(params: Params,
                     // 刚下的订单有可能会成交,所以有几率触发后续订单逻辑,所以这里也是一个订单触发逻辑
                     let mut trace_stack = TraceStack::default();
                     trace_stack.on_after_network(Utc::now().timestamp_micros());
-                    trace_stack.on_before_quant();
+                    trace_stack.on_before_unlock_quant();
 
                     if order.status != "NULL" {
                         trace_stack.on_before_format();

+ 1 - 1
strategy/src/binance_spot.rs

@@ -96,7 +96,7 @@ async fn on_data(bot_arc_clone: Arc<Mutex<Quant>>,
                  data: ResponseData) {
     let mut trace_stack = TraceStack::default();
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;

+ 1 - 1
strategy/src/binance_usdt_swap.rs

@@ -60,7 +60,7 @@ async fn on_data(bot_arc_clone: Arc<Mutex<Quant>>,
                  data: ResponseData) {
     let mut trace_stack = TraceStack::default();
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;

+ 2 - 2
strategy/src/bitget_spot.rs

@@ -131,7 +131,7 @@ async fn on_private_data(bot_arc_clone: Arc<Mutex<Quant>>, ct_val: Decimal, data
     let mut trace_stack = TraceStack::default();
 
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;
@@ -180,7 +180,7 @@ async fn on_public_data(bot_arc_clone: Arc<Mutex<Quant>>, update_flag_u: &mut De
     let mut trace_stack = TraceStack::default();
 
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;

+ 2 - 2
strategy/src/bybit_usdt_swap.rs

@@ -135,7 +135,7 @@ async fn on_private_data(bot_arc_clone: Arc<Mutex<Quant>>, ct_val: Decimal, data
     let mut trace_stack = TraceStack::default();
 
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;
@@ -190,7 +190,7 @@ async fn on_private_data(bot_arc_clone: Arc<Mutex<Quant>>, ct_val: Decimal, data
 async fn on_public_data(bot_arc_clone: Arc<Mutex<Quant>>, update_flag_u: &mut Decimal, max_buy: &mut Decimal, min_sell: &mut Decimal, data: ResponseData, depth_asks: &mut Vec<MarketOrder>, depth_bids: &mut Vec<MarketOrder>) {
     let mut trace_stack = TraceStack::default();
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;

+ 4 - 1
strategy/src/exchange_disguise.rs

@@ -94,8 +94,11 @@ pub async fn on_special_depth(bot_arc: Arc<Mutex<Quant>>,
     if special_depth.t > *update_flag_u {
         *update_flag_u = special_depth.t;
         let mut quant = bot_arc.lock().await;
+        let mut ts = trace_stack.clone();
+        ts.on_before_quant();
+
         quant._update_ticker(special_depth.ticker, label.clone());
-        quant._update_depth(special_depth.depth.clone(), label.clone(), trace_stack).await;
+        quant._update_depth(special_depth.depth.clone(), label.clone(), ts).await;
         quant.local_depths.insert(special_depth.name, special_depth.depth);
     }
 }

+ 1 - 1
strategy/src/gate_swap.rs

@@ -102,7 +102,7 @@ async fn on_data(bot_arc_clone: Arc<Mutex<Quant>>,
                  data: ResponseData) {
     let mut trace_stack = TraceStack::default();
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;

+ 1 - 1
strategy/src/kucoin_spot.rs

@@ -78,7 +78,7 @@ async fn on_kucoin_spot_data(bot_arc_clone: Arc<Mutex<Quant>>,
                              data: ResponseData) {
     let mut trace_stack = TraceStack::default();
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;

+ 1 - 1
strategy/src/kucoin_swap.rs

@@ -117,7 +117,7 @@ async fn on_data(bot_arc_clone: Arc<Mutex<Quant>>,
                  data: ResponseData) {
     let mut trace_stack = TraceStack::default();
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;

+ 2 - 2
strategy/src/okx_usdt_swap.rs

@@ -110,7 +110,7 @@ async fn on_private_data(bot_arc_clone: Arc<Mutex<Quant>>, ct_val: Decimal, data
     let mut trace_stack = TraceStack::default();
 
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;
@@ -163,7 +163,7 @@ async fn on_private_data(bot_arc_clone: Arc<Mutex<Quant>>, ct_val: Decimal, data
 async fn on_public_data(bot_arc_clone: Arc<Mutex<Quant>>, update_flag_u: &mut Decimal, max_buy: &mut Decimal, min_sell: &mut Decimal, data: ResponseData) {
     let mut trace_stack = TraceStack::default();
     trace_stack.on_after_network(data.time);
-    trace_stack.on_before_quant();
+    trace_stack.on_before_unlock_quant();
 
     if data.code != "200".to_string() {
         return;

+ 2 - 2
strategy/src/strategy.rs

@@ -1244,8 +1244,7 @@ impl Strategy {
         self._refresh_request_limit();                      // 刷新频率限制
         self._update_request_num(&mut command);             // 统计刷新频率
 
-        if command.limits_open.len() > 0 || command.limits_close.len() > 0 {
-            let time = chrono::Utc::now().timestamp_millis();
+        if command.limits_open.len() != 0 || command.limits_close.len() != 0 {
             let name = self.params.account_name.clone();
             // 参考卖价
             let ref_ap = self.ref_ap;
@@ -1254,6 +1253,7 @@ impl Strategy {
             let limits_open = command.limits_open.clone();
             let limits_close = command.limits_close.clone();
             spawn(async move {
+                let time = chrono::Utc::now().timestamp_millis();
                 let param_list = paras_limit_command(name.clone(), time.clone(), ref_ap.clone(), ref_bp.clone(), limits_open, limits_close);
                 let param_json_obj = serde_json::to_string(&param_list).unwrap();
                 market_warehouse_request(param_json_obj).await;