From 1471480f5307d9f75b6e87e246cc14c131fb4639 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 14 六月 2024 15:36:21 +0800
Subject: [PATCH] L2订阅接口更新

---
 huaxin_client/l2_client.py |  110 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 73 insertions(+), 37 deletions(-)

diff --git a/huaxin_client/l2_client.py b/huaxin_client/l2_client.py
index 8172dca..ae2f8e1 100644
--- a/huaxin_client/l2_client.py
+++ b/huaxin_client/l2_client.py
@@ -53,6 +53,8 @@
 set_codes_data_queue = queue.Queue()
 market_code_dict = {}
 
+ENABLE_NGST = True
+
 
 class Lev2MdSpi(lev2mdapi.CTORATstpLev2MdSpi):
     latest_codes_set = set()
@@ -91,10 +93,14 @@
         logger_local_huaxin_l2_subscript.info(f"鍙栨秷璁㈤槄涓婅瘉锛歿sh}")
         logger_local_huaxin_l2_subscript.info(f"鍙栨秷璁㈤槄娣辫瘉锛歿sz}")
         if sh:
-            # 鍙栨秷璁㈤槄閫愮瑪濮旀墭
-            self.__api.UnSubscribeOrderDetail(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
-            # 鍙栨秷璁㈤槄閫愮瑪鎴愪氦
-            self.__api.UnSubscribeTransaction(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
+            if ENABLE_NGST:
+                result = self.__api.UnSubscribeNGTSTick(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
+                logger_local_huaxin_l2_subscript.info(f"閫愮瑪NGTS璁㈤槄缁撴灉sh锛歿result}")
+            else:
+                # 鍙栨秷璁㈤槄閫愮瑪濮旀墭
+                self.__api.UnSubscribeOrderDetail(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
+                # 鍙栨秷璁㈤槄閫愮瑪鎴愪氦
+                self.__api.UnSubscribeTransaction(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
             self.__api.UnSubscribeMarketData(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
         if sz:
             self.__api.UnSubscribeOrderDetail(sz, lev2mdapi.TORA_TSTP_EXD_SZSE)
@@ -106,12 +112,16 @@
         logger_local_huaxin_l2_subscript.info(f"璁㈤槄涓婅瘉锛歿sh}")
         logger_local_huaxin_l2_subscript.info(f"璁㈤槄娣辫瘉锛歿sz}")
         if sh:
-            # 璁㈤槄閫愮瑪濮旀墭
-            result = self.__api.SubscribeOrderDetail(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
-            logger_local_huaxin_l2_subscript.info(f"閫愮瑪濮旀墭璁㈤槄缁撴灉sh锛歿result}")
-            # 璁㈤槄閫愮瑪鎴愪氦
-            result = self.__api.SubscribeTransaction(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
-            logger_local_huaxin_l2_subscript.info(f"閫愮瑪鎴愪氦璁㈤槄缁撴灉sh锛歿result}")
+            if ENABLE_NGST:
+                result = self.__api.SubscribeNGTSTick(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
+                logger_local_huaxin_l2_subscript.info(f"閫愮瑪NGTS璁㈤槄缁撴灉sh锛歿result}")
+            else:
+                # 璁㈤槄閫愮瑪濮旀墭
+                result = self.__api.SubscribeOrderDetail(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
+                logger_local_huaxin_l2_subscript.info(f"閫愮瑪濮旀墭璁㈤槄缁撴灉sh锛歿result}")
+                # 璁㈤槄閫愮瑪鎴愪氦
+                result = self.__api.SubscribeTransaction(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
+                logger_local_huaxin_l2_subscript.info(f"閫愮瑪鎴愪氦璁㈤槄缁撴灉sh锛歿result}")
 
             result = self.__api.SubscribeMarketData(sh, lev2mdapi.TORA_TSTP_EXD_SSE)
             logger_local_huaxin_l2_subscript.info(f"甯傚満璁㈤槄缁撴灉sh锛歿result}")
@@ -149,7 +159,7 @@
                 self.l2_data_upload_manager.distribute_upload_queue(c)
                 l2_data_manager.add_target_code(c)
         except Exception as e:
-            #TODO 娓呴櫎鍘熸潵杩樻病閲婃斁鎺夌殑鏁版嵁
+            # TODO 娓呴櫎鍘熸潵杩樻病閲婃斁鎺夌殑鏁版嵁
             logger_system.error(f"L2浠g爜鍒嗛厤涓婁紶闃熷垪鍑洪敊:{str(e)}")
             logger_system.exception(e)
         self.__subscribe(add_codes)
@@ -246,6 +256,26 @@
         except Exception as e:
             logging.exception(e)
 
+    def OnRspSubNGTSTick(self, pSpecificSecurity, pRspInfo, nRequestID, bIsLast):
+        async_log_util.info(logger_local_huaxin_l2_subscript,
+                            f"璁㈤槄缁撴灉锛歿pSpecificSecurity['SecurityID']} {pRspInfo['ErrorID']} {pRspInfo['ErrorMsg']}")
+        if pRspInfo["ErrorID"] == 0:
+            print("璁㈤槄鎴愬姛")
+            self.subscripted_codes.add(pSpecificSecurity['SecurityID'])
+        if bIsLast == 1:
+            print("璁㈤槄鍝嶅簲缁撴潫", self.subscripted_codes)
+            l2_data_manager.add_subscript_codes(self.subscripted_codes)
+
+    def OnRspUnSubNGTSTick(self, pSpecificSecurity, pRspInfo, nRequestID, bIsLast):
+        try:
+            code = pSpecificSecurity['SecurityID']
+            self.subscripted_codes.discard(code)
+            if bIsLast == 1:
+                print("鍙栨秷璁㈤槄鍝嶅簲缁撴潫", self.subscripted_codes)
+                l2_data_manager.add_subscript_codes(self.subscripted_codes)
+        except Exception as e:
+            logging.exception(e)
+
     def OnRspSubBondMarketData(self, pSpecificSecurity, pRspInfo, nRequestID, bIsLast):
         print("OnRspSubBondMarketData")
 
@@ -260,10 +290,6 @@
 
     def OnRspSubXTSTick(self, pSpecificSecurity, pRspInfo, nRequestID, bIsLast):
         print("OnRspSubXTSTick")
-
-    # 4.0.5鐗堟湰鎺ュ彛
-    def OnRspSubNGTSTick(self, pSpecificSecurity, pRspInfo, nRequestID, bIsLast):
-        print("OnRspSubNGTSTick")
 
     def OnRtnMarketData(self, pDepthMarketData, FirstLevelBuyNum, FirstLevelBuyOrderVolumes, FirstLevelSellNum,
                         FirstLevelSellOrderVolumes):
@@ -345,28 +371,6 @@
             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
-        # 杈撳嚭閫愮瑪濮旀墭鏁版嵁
         # 涓婅瘉OrderStatus=b"D"琛ㄧず鎾ゅ崟
         item = {"SecurityID": pOrderDetail['SecurityID'], "Price": pOrderDetail['Price'],
                 "Volume": pOrderDetail['Volume'],
@@ -376,6 +380,38 @@
                 "OrderStatus": pOrderDetail['OrderStatus'].decode()}
         self.l2_data_upload_manager.add_l2_order_detail(item, 0)
 
+    def OnRtnNGTSTick(self, pTick):
+        """
+        涓婅瘉鑲$エ鐨勯�愮瑪濮旀墭涓庢垚浜�
+        @param pTick:
+        @return:
+        """
+        try:
+            if pTick['TickType'] == b'T':
+                # 鎴愪氦
+                item = {"SecurityID": pTick['SecurityID'], "TradePrice": pTick['Price'],
+                        "TradeVolume": pTick['Volume'],
+                        "OrderTime": pTick['TickTime'], "MainSeq": pTick['MainSeq'],
+                        "SubSeq": pTick['SubSeq'], "BuyNo": pTick['BuyNo'],
+                        "SellNo": pTick['SellNo'],
+                        "ExecType": '1'}
+                self.l2_data_upload_manager.add_transaction_detail(item)
+            elif pTick['TickType'] == b'A' or pTick['TickType'] == b'D':
+                # 鎾ゅ崟
+                item = {"SecurityID": pTick['SecurityID'], "Price": pTick['Price'],
+                        "Volume": pTick['Volume'],
+                        "Side": pTick['Side'].decode(), "OrderType": pTick['TickType'].decode(),
+                        "OrderTime": pTick['TickTime'], "MainSeq": pTick['MainSeq'],
+                        "SubSeq": pTick['SubSeq'], "OrderNO": '',
+                        "OrderStatus": pTick['TickType'].decode()}
+                if pTick['Side'] == b'1':
+                    item['OrderNO'] = pTick['BuyNo']
+                elif pTick['Side'] == b'2':
+                    item['OrderNO'] = pTick['SellNo']
+                self.l2_data_upload_manager.add_l2_order_detail(item, 0)
+        except Exception as e:
+            logger_local_huaxin_l2_subscript.exception(e)
+
     def OnRtnBondMarketData(self, pDepthMarketData, FirstLevelBuyNum, FirstLevelBuyOrderVolumes, FirstLevelSellNum,
                             FirstLevelSellOrderVolumes):
         # 杈撳嚭琛屾儏蹇収鏁版嵁

--
Gitblit v1.8.0