From bcc38a54b2ca8268d7233b1a0e8250d81ca4bd7d Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期二, 05 九月 2023 12:27:42 +0800 Subject: [PATCH] 为交易加锁 --- huaxin_client/trade_client.py | 66 ++++++++++++++++++--------------- 1 files changed, 36 insertions(+), 30 deletions(-) diff --git a/huaxin_client/trade_client.py b/huaxin_client/trade_client.py index 59a2dea..9b530ad 100644 --- a/huaxin_client/trade_client.py +++ b/huaxin_client/trade_client.py @@ -152,7 +152,8 @@ def cancel_buy(self, code, order_sys_id, sinfo): if sinfo in self.__cancel_buy_sinfo_set: raise Exception(f'鎾ゅ崟璇锋眰宸茬粡鎻愪氦锛歿sinfo}') - logger_local_huaxin_trade_debug.info(f"杩涘叆鎾ゅ崟鏂规硶锛歝ode-{code} order_sys_id-{order_sys_id} sinfo-{sinfo}") + async_log_util.info(logger_local_huaxin_trade_debug, + f"杩涘叆鎾ゅ崟鏂规硶锛歝ode-{code} order_sys_id-{order_sys_id} sinfo-{sinfo}") self.__cancel_buy_sinfo_set.add(sinfo) self.req_id += 1 # 璇锋眰鎾ゅ崟 @@ -536,15 +537,15 @@ pRspInfoField: "CTORATstpRspInfoField", nRequestID: "int") -> "void": try: if pRspInfoField.ErrorID == 0: - logger_local_huaxin_trade_debug.info('OnRspOrderAction: OK! [%d]' % nRequestID) + async_log_util.info(logger_local_huaxin_trade_debug, 'OnRspOrderAction: OK! [%d]' % nRequestID) threading.Thread(target=lambda: self.__data_callback(TYPE_CANCEL_ORDER, nRequestID, {"sinfo": pInputOrderActionField.SInfo, "orderSysID": pInputOrderActionField.OrderSysID, "cancel": 1}), daemon=True).start() else: - logger_local_huaxin_trade_debug.info('OnRspOrderAction: Error! [%d] [%d] [%s]' - % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg)) + async_log_util.info(logger_local_huaxin_trade_debug, 'OnRspOrderAction: Error! [%d] [%d] [%s]' + % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg)) threading.Thread(target=lambda: self.__data_callback(TYPE_CANCEL_ORDER, nRequestID, {"sinfo": pInputOrderActionField.SInfo, "orderSysID": pInputOrderActionField.OrderSysID, @@ -559,10 +560,10 @@ pRspInfoField: "CTORATstpRspInfoField", nRequestID: "int") -> "void": try: if pInputOrderActionField and pRspInfoField: - logger_local_huaxin_trade_debug.info('OnErrRtnOrderAction: Error! [%d] [%d] [%d] [%s]' - % (nRequestID, pInputOrderActionField.OrderSysID, - pRspInfoField.ErrorID, - pRspInfoField.ErrorMsg)) + async_log_util.info(logger_local_huaxin_trade_debug, 'OnErrRtnOrderAction: Error! [%d] [%d] [%d] [%s]' + % (nRequestID, pInputOrderActionField.OrderSysID, + pRspInfoField.ErrorID, + pRspInfoField.ErrorMsg)) except: logger_local_huaxin_trade_debug.info("OnErrRtnOrderAction: 鎾ゅ崟鍑洪敊") @@ -591,12 +592,13 @@ def OnRtnOrder(self, pOrderField: "CTORATstpOrderField") -> "void": try: - logger_local_huaxin_trade_debug.info( - '[%d] OnRtnOrder: SInfo[%s] InvestorID[%s] SecurityID[%s] OrderRef[%d] OrderLocalID[%s] LimitPrice[%.2f] VolumeTotalOriginal[%d] OrderSysID[%s] OrderStatus[%s] InsertTime[%s]' - % (round(time.time() * 1000), pOrderField.SInfo, pOrderField.InvestorID, pOrderField.SecurityID, - pOrderField.OrderRef, pOrderField.OrderLocalID, - pOrderField.LimitPrice, pOrderField.VolumeTotalOriginal, pOrderField.OrderSysID, - pOrderField.OrderStatus, pOrderField.InsertTime)) + async_log_util.info(logger_local_huaxin_trade_debug, + '[%d] OnRtnOrder: SInfo[%s] InvestorID[%s] SecurityID[%s] OrderRef[%d] OrderLocalID[%s] LimitPrice[%.2f] VolumeTotalOriginal[%d] OrderSysID[%s] OrderStatus[%s] InsertTime[%s]' + % (round(time.time() * 1000), pOrderField.SInfo, pOrderField.InvestorID, + pOrderField.SecurityID, + pOrderField.OrderRef, pOrderField.OrderLocalID, + pOrderField.LimitPrice, pOrderField.VolumeTotalOriginal, pOrderField.OrderSysID, + pOrderField.OrderStatus, pOrderField.InsertTime)) OrderIDManager.set_system_order_id(pOrderField.SecurityID, pOrderField.SInfo, pOrderField.OrderSysID) if pOrderField.OrderStatus != traderapi.TORA_TSTP_OST_Unknown: @@ -620,10 +622,11 @@ def OnRtnTrade(self, pTradeField: "CTORATstpTradeField") -> "void": try: - logger_local_huaxin_trade_debug.info( - 'OnRtnTrade: TradeID[%s] InvestorID[%s] SecurityID[%s] OrderRef[%d] OrderLocalID[%s] Price[%.2f] Volume[%d]' - % (pTradeField.TradeID, pTradeField.InvestorID, pTradeField.SecurityID, - pTradeField.OrderRef, pTradeField.OrderLocalID, pTradeField.Price, pTradeField.Volume)) + async_log_util.info(logger_local_huaxin_trade_debug, + 'OnRtnTrade: TradeID[%s] InvestorID[%s] SecurityID[%s] OrderRef[%d] OrderLocalID[%s] Price[%.2f] Volume[%d]' + % (pTradeField.TradeID, pTradeField.InvestorID, pTradeField.SecurityID, + pTradeField.OrderRef, pTradeField.OrderLocalID, pTradeField.Price, + pTradeField.Volume)) except: pass @@ -805,7 +808,8 @@ def OnTrade(self, client_id, request_id, sk, type_, data): if type_ == 1: - async_log_util.info(logger_local_huaxin_trade_debug,f"\n---------------------\n璇锋眰涓嬪崟锛歝lient_id-{client_id} request_id-{request_id}") + async_log_util.info(logger_local_huaxin_trade_debug, + f"\n---------------------\n璇锋眰涓嬪崟锛歝lient_id-{client_id} request_id-{request_id}") # 涓嬪崟 # 1-涔� 2-鍗� direction = data["direction"] @@ -835,7 +839,8 @@ request_id) elif type_ == 2: - async_log_util.info(logger_local_huaxin_trade_debug, f"\n---------------------\n璇锋眰鎾ゅ崟锛歝lient_id-{client_id} request_id-{request_id} data-{data}") + async_log_util.info(logger_local_huaxin_trade_debug, + f"\n---------------------\n璇锋眰鎾ゅ崟锛歝lient_id-{client_id} request_id-{request_id} data-{data}") # 鎾ゅ崟 direction = data["direction"] code = data["code"] @@ -867,7 +872,7 @@ request_id) def OnDealList(self, client_id, request_id, sk): - logger_local_huaxin_trade_debug.info(f"璇锋眰鎴愪氦鍒楄〃锛歝lient_id-{client_id} request_id-{request_id}") + async_log_util.info(logger_local_huaxin_trade_debug, f"璇锋眰鎴愪氦鍒楄〃锛歝lient_id-{client_id} request_id-{request_id}") try: print("寮�濮嬭姹傛垚浜ゅ垪琛�") req_id = self.__tradeSimpleApi.list_traded_orders() @@ -877,7 +882,7 @@ SendResponseSkManager.send_error_response("common", request_id, client_id, str(e)) def OnDelegateList(self, client_id, request_id, sk, is_cancel): - logger_local_huaxin_trade_debug.info(f"璇锋眰濮旀墭鍒楄〃锛歝lient_id-{client_id} request_id-{request_id}") + async_log_util.info(logger_local_huaxin_trade_debug, f"璇锋眰濮旀墭鍒楄〃锛歝lient_id-{client_id} request_id-{request_id}") try: req_id = self.__tradeSimpleApi.list_delegate_orders(is_cancel) req_rid_dict[req_id] = (client_id, request_id, sk) @@ -886,7 +891,7 @@ request_id) def OnMoney(self, client_id, request_id, sk): - logger_local_huaxin_trade_debug.info(f"璇锋眰璐︽埛锛歝lient_id-{client_id} request_id-{request_id}") + async_log_util.info(logger_local_huaxin_trade_debug, f"璇锋眰璐︽埛锛歝lient_id-{client_id} request_id-{request_id}") try: req_id = self.__tradeSimpleApi.get_money_account() req_rid_dict[req_id] = (client_id, request_id, sk) @@ -895,7 +900,7 @@ request_id) def OnPositionList(self, client_id, request_id, sk): - logger_local_huaxin_trade_debug.info(f"璇锋眰鎸佷粨锛歝lient_id-{client_id} request_id-{request_id}") + async_log_util.info(logger_local_huaxin_trade_debug, f"璇锋眰鎸佷粨锛歝lient_id-{client_id} request_id-{request_id}") try: req_id = self.__tradeSimpleApi.list_positions() req_rid_dict[req_id] = (client_id, request_id, sk) @@ -1009,9 +1014,10 @@ 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 - async_log_util.info( logger_local_huaxin_trade_debug, f"鏈湴璁㈠崟鍙蜂笌绯荤粺璁㈠崟鍙锋槧灏勶紝{code}锛歿local_order_id} {orderSystemId}") + async_log_util.info(logger_local_huaxin_trade_debug, + f"鏈湴璁㈠崟鍙蜂笌绯荤粺璁㈠崟鍙锋槧灏勶紝{code}锛歿local_order_id} {orderSystemId}") if local_order_id in cls.not_canceled_local_order_ids: - async_log_util.info(logger_local_huaxin_trade_debug,f"鎵ц绛夊緟鎾ゅ崟锛寋code}锛歿local_order_id} {orderSystemId}") + async_log_util.info(logger_local_huaxin_trade_debug, f"鎵ц绛夊緟鎾ゅ崟锛寋code}锛歿local_order_id} {orderSystemId}") # 鎵ц鎾ゅ崟 cls.not_canceled_local_order_ids.discard(local_order_id) for i in range(3): @@ -1030,7 +1036,7 @@ # 浜ゆ槗鍙嶉鍥炶皟 def __traderapi_callback(type, req_id, data): - logger_local_huaxin_trade_debug.info("鍥炶皟:type-{} req_id-{}", type, req_id) + async_log_util.info(logger_local_huaxin_trade_debug, "鍥炶皟:type-{} req_id-{}", type, req_id) key = req_id if type == TYPE_ORDER or type == TYPE_CANCEL_ORDER: key = data["sinfo"] @@ -1045,7 +1051,7 @@ local_order_id = temp_params[3] data["localOrderId"] = local_order_id - logger_local_huaxin_trade_debug.info("API鍥炶皟 request_id-{}", request_id) + async_log_util.info(logger_local_huaxin_trade_debug, "API鍥炶皟 request_id-{}", request_id) # 娴嬭瘯 # send_response( # json.dumps({"type": "response", "data": {"code": 0, "data": data}, "client_id": client_id, @@ -1055,10 +1061,10 @@ {"type": "response", "data": {"code": 0, "data": data}, "client_id": client_id, "request_id": request_id}) - logger_local_huaxin_trade_debug.info("API鍥炶皟缁撴潫 req_id-{} request_id-{}", req_id, request_id) + async_log_util.info(logger_local_huaxin_trade_debug, "API鍥炶皟缁撴潫 req_id-{} request_id-{}", req_id, request_id) print("API鍥炶皟缁撴潫") else: - logger_local_huaxin_trade_debug.info("闈濧PI鍥炶皟 req_id-{}", req_id) + async_log_util.info(logger_local_huaxin_trade_debug, "闈濧PI鍥炶皟 req_id-{}", req_id) print("闈濧PI鍥炶皟") trade_response.OnTradeCallback({"type": "trade_callback", "data": {"code": 0, "data": data, "type": type}}) # # 闈濧PI鍥炶皟 -- Gitblit v1.8.0