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