From 58c7388c1979c13bdf84db0f53ff7ab5c34e15ca Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 16 四月 2024 15:29:57 +0800
Subject: [PATCH] 被动卖成交数据处理优化

---
 l2/place_order_single_data_manager.py |   62 +++++++++++++++----------------
 1 files changed, 30 insertions(+), 32 deletions(-)

diff --git a/l2/place_order_single_data_manager.py b/l2/place_order_single_data_manager.py
index 790b2c4..0fa7842 100644
--- a/l2/place_order_single_data_manager.py
+++ b/l2/place_order_single_data_manager.py
@@ -1,6 +1,8 @@
 """
 涓嬪崟淇″彿绠$悊
 """
+import time
+
 from l2 import l2_log
 from l2.huaxin import l2_huaxin_util
 from log_module.log import logger_l2_trade_buy, logger_debug
@@ -62,7 +64,7 @@
                 break
 
     @classmethod
-    def process_passive_limit_up_sell_data(cls, data):
+    def process_passive_limit_up_sell_data(cls, code, datas, limit_up_price):
         """
         娣诲姞娑ㄥ仠琚姩鍗栨垚浜ゆ暟鎹�
         @param data: 鏁版嵁鏍煎紡锛�(data['SecurityID'], data['TradePrice'], data['TradeVolume'],
@@ -71,41 +73,37 @@
         @return:
         """
         try:
-            # 闇�瑕佸垽鏂綋鍓嶅崟鏄惁宸茬粡鎴愪氦瀹屾垚
-            code = data[0]
-            sell_no = data[7]
-            if code not in cls.__latest_sell_data:
-                cls.__latest_sell_data[code] = [sell_no, data[2]]
-            else:
-                if cls.__latest_sell_data[code][0] == sell_no:
-                    cls.__latest_sell_data[code][1] += data[2]
-                else:
-                    cls.__latest_sell_data[code] = [sell_no, data[2]]
-            # 鍒ゆ柇鏄惁鏄渶鍚庝竴绗斿崠鍗�
-            # l2_log.info(code, logger_l2_trade_buy, f"琚姩鍗栨暟鎹細{data}")
-
-            # 鍒ゆ柇杩欎釜璁㈠崟鍙锋槸鍚︽垚浜ゅ畬
+            start_time = time.time()
             sell_list = cls.__latest_limit_up_sell_list_dict.get(code)
             if not sell_list:
                 return
             sell_info = sell_list[-1]
-            # 涓诲姩鍗栬鍗曢泦鍚�
-            # active_sell_order_no_set = cls.__active_sell_order_no_set_dict.get(code)
-            # if active_sell_order_no_set and sell_info['val']['orderNo'] in active_sell_order_no_set:
-            #     l2_log.info(code, logger_l2_trade_buy,f"鏈�杩戠殑鍗栨槸涓诲姩鍗�:{sell_info['val']['orderNo']}")
-            #     return
-
-            sell_info_num = sell_info['val']['num']
-            deal_num = cls.__latest_sell_data[code][1] // 100
-
-            # l2_log.info(code, logger_l2_trade_buy,
-            #             f"鏈�杩戞定鍋滃崠锛歿sell_info['val']['orderNo']} 鍗栭噺锛歿sell_info_num} 鎴愪氦閲忥細{deal_num}")
-            if sell_no == sell_info['val']['orderNo'] and sell_info_num == deal_num:
-                # 鎴愪氦瀹屾垚
-                L2TradeSingleDataManager.set_latest_sell_data(code, data)
-                l2_log.info(code, logger_l2_trade_buy, f"鎵惧埌鏈�杩戠殑琚姩娑ㄥ仠鍗栧崟鏁版嵁锛歿sell_info['val']['orderNo']}, 鍙互瑙﹀彂涓嬪崟")
-
-                # l2_log.info(code, logger_l2_trade_buy, f"鎵惧埌鏈�杩戠殑琚姩娑ㄥ仠鍗栧崟鏁版嵁锛歿data['val']['orderNo']}, 鍙互瑙﹀彂涓嬪崟")
+            for data in datas:
+                if data[6] < data[7] or data[1] != limit_up_price:
+                    # 鎺掗櫎涓诲姩鍗�/闈炴定鍋滃崠
+                    continue
+                sell_no = data[7]
+                if sell_no != sell_info['val']['orderNo']:
+                    continue
+                # 闇�瑕佸垽鏂綋鍓嶅崟鏄惁宸茬粡鎴愪氦瀹屾垚
+                if code not in cls.__latest_sell_data:
+                    cls.__latest_sell_data[code] = [sell_no, data[2]]
+                else:
+                    if cls.__latest_sell_data[code][0] == sell_no:
+                        cls.__latest_sell_data[code][1] += data[2]
+                    else:
+                        cls.__latest_sell_data[code] = [sell_no, data[2]]
+                sell_info_num = sell_info['val']['num']
+                deal_num = cls.__latest_sell_data[code][1] // 100
+                if sell_info_num == deal_num:
+                    use_time = round((time.time() - start_time) * 1000, 3)
+                    l2_log.info(code, logger_l2_trade_buy,
+                                f"鎵惧埌鏈�杩戠殑琚姩娑ㄥ仠鍗栧崟鏁版嵁锛歿sell_info['val']['orderNo']}, 璁$畻鑰楁椂锛歿use_time}ms, 鍙互瑙﹀彂涓嬪崟")
+                    # 鎴愪氦瀹屾垚
+                    L2TradeSingleDataManager.set_latest_sell_data(code, data)
+                    l2_log.info(code, logger_l2_trade_buy, "琚姩鍗栨暟鎹鐞嗗畬姣�")
+                    break
+                    # l2_log.info(code, logger_l2_trade_buy, f"鎵惧埌鏈�杩戠殑琚姩娑ㄥ仠鍗栧崟鏁版嵁锛歿data['val']['orderNo']}, 鍙互瑙﹀彂涓嬪崟")
         except Exception as e:
             logger_debug.exception(e)
 

--
Gitblit v1.8.0