From 5715545bec1d88fe9cc4ea79db0a5d1148694590 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 14 十一月 2023 14:35:54 +0800
Subject: [PATCH] L2数据后置过滤

---
 huaxin_client/l2_client.py |   99 ++++++++++++++++++++++++++-----------------------
 1 files changed, 52 insertions(+), 47 deletions(-)

diff --git a/huaxin_client/l2_client.py b/huaxin_client/l2_client.py
index 8cb0f78..e4f135d 100644
--- a/huaxin_client/l2_client.py
+++ b/huaxin_client/l2_client.py
@@ -65,7 +65,7 @@
 
     # 涔板叆鐨勫ぇ鍗曡鍗曞彿
 
-    def __init__(self, api, l2_data_upload_manager):
+    def __init__(self, api, l2_data_upload_manager: L2DataUploadManager):
         lev2mdapi.CTORATstpLev2MdSpi.__init__(self)
         self.__api = api
         self.is_login = False
@@ -131,6 +131,7 @@
             code = d[0]
             codes.add(code)
             self.codes_volume_and_price_dict[code] = (d[1], d[2])
+            self.l2_data_upload_manager.set_order_fileter_condition(code, d[1], d[2])
         add_codes = codes - self.subscripted_codes
         del_codes = self.subscripted_codes - codes
         print("add del codes", add_codes, del_codes)
@@ -183,7 +184,11 @@
 
     def set_code_special_watch_volume(self, code, volume):
         # 鏈夋晥鏈熶负3s
-        self.special_code_volume_for_order_dict[code] = (volume, time.time() + 3)
+        # self.special_code_volume_for_order_dict[code] = (volume, time.time() + 3)
+        min_volume, limit_up_price = self.codes_volume_and_price_dict.get(code)
+        self.l2_data_upload_manager.set_order_fileter_condition(code, min_volume,limit_up_price,
+                                                                {volume, constant.SHADOW_ORDER_VOLUME}, time.time() + 3)
+
         async_log_util.info(logger_local_huaxin_l2_subscript, f"璁剧疆涓嬪崟閲忕洃鍚細{code}-{volume}")
 
     def OnFrontConnected(self):
@@ -299,15 +304,15 @@
 
     def OnRtnTransaction(self, pTransaction):
         code = str(pTransaction['SecurityID'])
-        min_volume, limit_up_price = self.codes_volume_and_price_dict.get(code)
+        # min_volume, limit_up_price = self.codes_volume_and_price_dict.get(code)
         # 杈撳嚭閫愮瑪鎴愪氦鏁版嵁
         if pTransaction['ExecType'] == b"2":
-            if min_volume is None:
-                # 榛樿绛涢��50w
-                if pTransaction['TradePrice'] * pTransaction['Volume'] < 500000:
-                    return
-            elif pTransaction['TradeVolume'] < min_volume:
-                return
+            # if min_volume is None:
+            #     # 榛樿绛涢��50w
+            #     if pTransaction['TradePrice'] * pTransaction['Volume'] < 500000:
+            #         return
+            # elif pTransaction['TradeVolume'] < min_volume:
+            #     return
             # 鎾ゅ崟
             item = {"SecurityID": pTransaction['SecurityID'], "Price": pTransaction['TradePrice'],
                     "Volume": pTransaction['TradeVolume'],
@@ -327,45 +332,45 @@
                 item["Side"] = "2"
             self.l2_data_upload_manager.add_l2_order_detail(item, 0, True)
         else:
-            if abs(pTransaction['TradePrice'] - limit_up_price) < 0.201:
-                # 娑ㄥ仠浠�
-                # 鎴愪氦
-                item = {"SecurityID": pTransaction['SecurityID'], "TradePrice": pTransaction['TradePrice'],
-                        "TradeVolume": pTransaction['TradeVolume'],
-                        "OrderTime": pTransaction['TradeTime'], "MainSeq": pTransaction['MainSeq'],
-                        "SubSeq": pTransaction['SubSeq'], "BuyNo": pTransaction['BuyNo'],
-                        "SellNo": pTransaction['SellNo'],
-                        "ExecType": pTransaction['ExecType'].decode()}
-                # 鏆傛椂娉ㄩ噴鎺夊悓1鍗曞彿鑷冲涓婁紶1娆�
-                # key = f"{item['SecurityID']}_{item['TradePrice']}_{item['BuyNo']}"
-                # if self.__last_transaction_keys_dict.get(code) == key:
-                #     return
-                # self.__last_transaction_keys_dict[code] = key
-                # print("閫愮瑪鎴愪氦", item)
-                self.l2_data_upload_manager.add_transaction_detail(item)
+            # if abs(pTransaction['TradePrice'] - limit_up_price) < 0.201:
+            # 娑ㄥ仠浠�
+            # 鎴愪氦
+            item = {"SecurityID": pTransaction['SecurityID'], "TradePrice": pTransaction['TradePrice'],
+                    "TradeVolume": pTransaction['TradeVolume'],
+                    "OrderTime": pTransaction['TradeTime'], "MainSeq": pTransaction['MainSeq'],
+                    "SubSeq": pTransaction['SubSeq'], "BuyNo": pTransaction['BuyNo'],
+                    "SellNo": pTransaction['SellNo'],
+                    "ExecType": pTransaction['ExecType'].decode()}
+            # 鏆傛椂娉ㄩ噴鎺夊悓1鍗曞彿鑷冲涓婁紶1娆�
+            # key = f"{item['SecurityID']}_{item['TradePrice']}_{item['BuyNo']}"
+            # if self.__last_transaction_keys_dict.get(code) == key:
+            #     return
+            # self.__last_transaction_keys_dict[code] = key
+            # print("閫愮瑪鎴愪氦", item)
+            self.l2_data_upload_manager.add_transaction_detail(item)
 
     def OnRtnOrderDetail(self, pOrderDetail):
-        can_listen = False
-        code = str(pOrderDetail['SecurityID'])
-        start_time = 0
-        if code in self.special_code_volume_for_order_dict:
-            start_time = time.time()
-            if self.special_code_volume_for_order_dict[code][0] == pOrderDetail[
-                'Volume'] or constant.SHADOW_ORDER_VOLUME == pOrderDetail['Volume']:
-                # 鐩戞帶鐩爣璁㈠崟涓庡奖瀛愯鍗�
-                if self.special_code_volume_for_order_dict[code][1] > time.time():
-                    # 鐗规畩閲忕洃鍚�
-                    can_listen = True
-                else:
-                    self.special_code_volume_for_order_dict.pop(code)
-        if not can_listen:
-            min_volume, limit_up_price = self.codes_volume_and_price_dict.get(code)
-            if min_volume is None:
-                # 榛樿绛涢��50w
-                if pOrderDetail['Price'] * pOrderDetail['Volume'] < 500000:
-                    return
-            elif pOrderDetail['Volume'] < min_volume:
-                return
+        # can_listen = False
+        # code = str(pOrderDetail['SecurityID'])
+        # start_time = 0
+        # if code in self.special_code_volume_for_order_dict:
+        #     start_time = time.time()
+        #     if self.special_code_volume_for_order_dict[code][0] == pOrderDetail[
+        #         'Volume'] or constant.SHADOW_ORDER_VOLUME == pOrderDetail['Volume']:
+        #         # 鐩戞帶鐩爣璁㈠崟涓庡奖瀛愯鍗�
+        #         if self.special_code_volume_for_order_dict[code][1] > time.time():
+        #             # 鐗规畩閲忕洃鍚�
+        #             can_listen = True
+        #         else:
+        #             self.special_code_volume_for_order_dict.pop(code)
+        # if not can_listen:
+        #     min_volume, limit_up_price = self.codes_volume_and_price_dict.get(code)
+        #     if min_volume is None:
+        #         # 榛樿绛涢��50w
+        #         if pOrderDetail['Price'] * pOrderDetail['Volume'] < 500000:
+        #             return
+        #     elif pOrderDetail['Volume'] < min_volume:
+        #         return
         # 杈撳嚭閫愮瑪濮旀墭鏁版嵁
         # 涓婅瘉OrderStatus=b"D"琛ㄧず鎾ゅ崟
         item = {"SecurityID": pOrderDetail['SecurityID'], "Price": pOrderDetail['Price'],
@@ -374,7 +379,7 @@
                 "OrderTime": pOrderDetail['OrderTime'], "MainSeq": pOrderDetail['MainSeq'],
                 "SubSeq": pOrderDetail['SubSeq'], "OrderNO": pOrderDetail['OrderNO'],
                 "OrderStatus": pOrderDetail['OrderStatus'].decode()}
-        self.l2_data_upload_manager.add_l2_order_detail(item, start_time)
+        self.l2_data_upload_manager.add_l2_order_detail(item, 0)
 
     def OnRtnBondMarketData(self, pDepthMarketData, FirstLevelBuyNum, FirstLevelBuyOrderVolumes, FirstLevelSellNum,
                             FirstLevelSellOrderVolumes):

--
Gitblit v1.8.0