From 2d27b626b35ec9d62df36daf6405d425557e11ae Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期一, 21 八月 2023 12:24:40 +0800 Subject: [PATCH] 信息上传优化 --- huaxin_api/trade_client.py | 53 +++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 37 insertions(+), 16 deletions(-) diff --git a/huaxin_api/trade_client.py b/huaxin_api/trade_client.py index 7f5b73c..e4dde10 100644 --- a/huaxin_api/trade_client.py +++ b/huaxin_api/trade_client.py @@ -566,7 +566,7 @@ pOrderField.LimitPrice, pOrderField.VolumeTotalOriginal, pOrderField.OrderSysID, pOrderField.OrderStatus)) if pOrderField.OrderStatus != traderapi.TORA_TSTP_OST_Unknown: - set_system_order_id(pOrderField.SInfo, pOrderField.OrderSysID) + OrderIDManager.set_system_order_id(pOrderField.SecurityID, pOrderField.SInfo, pOrderField.OrderSysID) threading.Thread(target=lambda: self.__data_callback(TYPE_ORDER, 0, {"sinfo": pOrderField.SInfo, "securityId": pOrderField.SecurityID, "orderLocalId": pOrderField.OrderLocalID, @@ -734,8 +734,6 @@ # 鑾峰彇鍝嶅簲鍙戦�乻ocket - - global req_rid_dict req_rid_dict = {} @@ -745,7 +743,8 @@ def OnTrade(self, client_id, request_id, type_, data): if type_ == 1: - logger_local_huaxin_trade_debug.info(f"---------------------\n璇锋眰涓嬪崟锛歝lient_id-{client_id} request_id-{request_id}") + logger_local_huaxin_trade_debug.info( + f"---------------------\n璇锋眰涓嬪崟锛歝lient_id-{client_id} request_id-{request_id}") # 涓嬪崟 # 1-涔� 2-鍗� direction = data["direction"] @@ -785,10 +784,12 @@ sinfo = data["sinfo"] if direction == 1: if not orderSysID and localOrderID: - orderSysID = local_order_id_map.get(localOrderID) + orderSysID = OrderIDManager.get_system_id_by_local_id(localOrderID) # 鎾や拱 try: if not orderSysID: + if localOrderID: + OrderIDManager.add_need_cancel_local_order_id(localOrderID) raise Exception("娌℃湁鎵惧埌绯荤粺璁㈠崟鍙�") req_rid_dict[sinfo] = (client_id, request_id) self.__tradeSimpleApi.cancel_buy(code, orderSysID, sinfo) @@ -913,19 +914,39 @@ strategy_pipe.send(data) -local_order_id_map = {} +# 璁㈠崟鍙风鐞� +class OrderIDManager: + # 灏氭湭鎾ゅ崟鐨勬湰鍦拌鍗曞彿 + not_canceled_local_order_ids = set() + local_order_id_map = {} + __TradeSimpleApi = TradeSimpleApi() -# 璁剧疆绯荤粺璁㈠崟ID -def set_system_order_id(sinfo, orderSystemId): - # 鑾峰彇鏈湴璁㈠崟ID - local_order_id = None - if req_rid_dict and sinfo in req_rid_dict: - temp_params = req_rid_dict.get(sinfo) - if len(temp_params) > 2: - local_order_id = temp_params[2] - if local_order_id and local_order_id not in local_order_id_map and orderSystemId: - local_order_id_map[local_order_id] = orderSystemId + @classmethod + def get_system_id_by_local_id(cls, local_order_id): + return cls.local_order_id_map.get(local_order_id) + + # 璁剧疆绯荤粺璁㈠崟ID + @classmethod + def set_system_order_id(cls, code, sinfo, orderSystemId): + # 鑾峰彇鏈湴璁㈠崟ID + local_order_id = None + if req_rid_dict and sinfo in req_rid_dict: + temp_params = req_rid_dict.get(sinfo) + if len(temp_params) > 2: + local_order_id = temp_params[2] + if local_order_id: + if local_order_id not in cls.local_order_id_map and orderSystemId: + cls.local_order_id_map[local_order_id] = orderSystemId + if local_order_id in cls.not_canceled_local_order_ids: + # 鎵ц鎾ゅ崟 + cls.not_canceled_local_order_ids.discard(local_order_id) + cls.__TradeSimpleApi.cancel_buy(code, orderSystemId, + f"local_cancel_buy-{code}-{round(time.time() * 1000)}") + + @classmethod + def add_need_cancel_local_order_id(cls, local_order_id): + cls.not_canceled_local_order_ids.add(local_order_id) # 浜ゆ槗鍙嶉鍥炶皟 -- Gitblit v1.8.0