Administrator
2023-09-04 939c5bfb0943cea1b373e6ca1977ed6b7195d2e9
交易回调异常保护
2个文件已修改
311 ■■■■ 已修改文件
code_attribute/gpcode_manager.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
huaxin_client/trade_client.py 307 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code_attribute/gpcode_manager.py
@@ -173,11 +173,11 @@
        hasChanged = False
        for code in codes:
            if code not in self.__first_code_limited_up_record_cache:
                RedisUtils.sadd_async(self.__get_redis(), "first_code_limited_up_record", code)
                RedisUtils.sadd_async(self.__db, "first_code_limited_up_record", code)
                hasChanged = True
            self.__first_code_limited_up_record_cache.add(code)
        if hasChanged:
            RedisUtils.expire_async(self.__get_redis(), "first_code_limited_up_record", tool.get_expire())
            RedisUtils.expire_async(self.__db, "first_code_limited_up_record", tool.get_expire())
    # 是否涨停过
    def is_limited_up(self, code):
huaxin_client/trade_client.py
@@ -514,35 +514,41 @@
    def OnRspOrderInsert(self, pInputOrderField: "CTORATstpInputOrderField", pRspInfoField: "CTORATstpRspInfoField",
                         nRequestID: "int") -> "void":
        if pRspInfoField.ErrorID == 0:
            logger.info('[%d] OnRspOrderInsert: OK! [%d]' % (round(time.time() * 1000), nRequestID))
        else:
            logger.info('OnRspOrderInsert: Error! [%d] [%d] [%s]'
                        % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
            threading.Thread(target=lambda: self.__data_callback(TYPE_ORDER, nRequestID,
                                                                 {"sinfo": pInputOrderField.SInfo, "orderStatus": -1,
                                                                  "orderStatusMsg": pRspInfoField.ErrorMsg}),
                             daemon=True).start()
        try:
            if pRspInfoField.ErrorID == 0:
                logger.info('[%d] OnRspOrderInsert: OK! [%d]' % (round(time.time() * 1000), nRequestID))
            else:
                logger.info('OnRspOrderInsert: Error! [%d] [%d] [%s]'
                            % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
                threading.Thread(target=lambda: self.__data_callback(TYPE_ORDER, nRequestID,
                                                                     {"sinfo": pInputOrderField.SInfo, "orderStatus": -1,
                                                                      "orderStatusMsg": pRspInfoField.ErrorMsg}),
                                 daemon=True).start()
        except:
            pass
    # 撤单响应
    def OnRspOrderAction(self, pInputOrderActionField: "CTORATstpInputOrderActionField",
                         pRspInfoField: "CTORATstpRspInfoField", nRequestID: "int") -> "void":
        if pRspInfoField.ErrorID == 0:
            logger_local_huaxin_trade_debug.info('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()
        try:
            if pRspInfoField.ErrorID == 0:
                logger_local_huaxin_trade_debug.info('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))
            threading.Thread(target=lambda: self.__data_callback(TYPE_CANCEL_ORDER, nRequestID,
                                                                 {"sinfo": pInputOrderActionField.SInfo,
                                                                  "orderSysID": pInputOrderActionField.OrderSysID,
                                                                  "cancel": 0, "errorID": pRspInfoField.ErrorID,
                                                                  "errorMsg": pRspInfoField.ErrorMsg}),
                             daemon=True).start()
            else:
                logger_local_huaxin_trade_debug.info('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,
                                                                      "cancel": 0, "errorID": pRspInfoField.ErrorID,
                                                                      "errorMsg": pRspInfoField.ErrorMsg}),
                                 daemon=True).start()
        except:
            pass
    # 撤单错误回报
    def OnErrRtnOrderAction(self, pInputOrderActionField: "CTORATstpInputOrderActionField",
@@ -558,20 +564,26 @@
    def OnRspInquiryJZFund(self, pRspInquiryJZFundField: "CTORATstpRspInquiryJZFundField",
                           pRspInfoField: "CTORATstpRspInfoField", nRequestID: "int") -> "void":
        if pRspInfoField.ErrorID == 0:
            logger.info('OnRspInquiryJZFund: OK! [%d] [%.2f] [%.2f]'
                        % (nRequestID, pRspInquiryJZFundField.UsefulMoney, pRspInquiryJZFundField.FetchLimit))
        else:
            logger.info('OnRspInquiryJZFund: Error! [%d] [%d] [%s]'
                        % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
        try:
            if pRspInfoField.ErrorID == 0:
                logger.info('OnRspInquiryJZFund: OK! [%d] [%.2f] [%.2f]'
                            % (nRequestID, pRspInquiryJZFundField.UsefulMoney, pRspInquiryJZFundField.FetchLimit))
            else:
                logger.info('OnRspInquiryJZFund: Error! [%d] [%d] [%s]'
                            % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
        except:
            pass
    def OnRspTransferFund(self, pInputTransferFundField: "CTORATstpInputTransferFundField",
                          pRspInfoField: "CTORATstpRspInfoField", nRequestID: "int") -> "void":
        if pRspInfoField.ErrorID == 0:
            logger.info('OnRspTransferFund: OK! [%d]' % nRequestID)
        else:
            logger.info('OnRspTransferFund: Error! [%d] [%d] [%s]'
                        % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
        try:
            if pRspInfoField.ErrorID == 0:
                logger.info('OnRspTransferFund: OK! [%d]' % nRequestID)
            else:
                logger.info('OnRspTransferFund: Error! [%d] [%d] [%s]'
                            % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
        except:
            pass
    def OnRtnOrder(self, pOrderField: "CTORATstpOrderField") -> "void":
        try:
@@ -581,25 +593,29 @@
                   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:
                threading.Thread(target=lambda: self.__data_callback(TYPE_ORDER, 0, {"sinfo": pOrderField.SInfo,
                                                                                     "securityId": pOrderField.SecurityID,
                                                                                     "orderLocalId": pOrderField.OrderLocalID,
                                                                                     "orderStatus": pOrderField.OrderStatus,
                                                                                     "statusMsg": pOrderField.StatusMsg,
                                                                                     "orderSysID": pOrderField.OrderSysID,
                                                                                     "accountID": pOrderField.AccountID}),
                                 daemon=True).start()
        except:
            pass
        OrderIDManager.set_system_order_id(pOrderField.SecurityID, pOrderField.SInfo, pOrderField.OrderSysID)
        if pOrderField.OrderStatus != traderapi.TORA_TSTP_OST_Unknown:
            threading.Thread(target=lambda: self.__data_callback(TYPE_ORDER, 0, {"sinfo": pOrderField.SInfo,
                                                                                 "securityId": pOrderField.SecurityID,
                                                                                 "orderLocalId": pOrderField.OrderLocalID,
                                                                                 "orderStatus": pOrderField.OrderStatus,
                                                                                 "statusMsg": pOrderField.StatusMsg,
                                                                                 "orderSysID": pOrderField.OrderSysID,
                                                                                 "accountID": pOrderField.AccountID}),
                             daemon=True).start()
    def OnRtnTrade(self, pTradeField: "CTORATstpTradeField") -> "void":
        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))
        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))
        except:
            pass
    def OnRtnMarketStatus(self, pMarketStatusField: "CTORATstpMarketStatusField") -> "void":
        # TORA_TSTP_MKD_SHA(1): 上海A股
@@ -611,8 +627,11 @@
        # TORA_TSTP_MST_Continous(1): 连续交易
        # TORA_TSTP_MST_Closed(2): 收盘
        # TORA_TSTP_MST_OpenCallAuction(3): 开盘集合竞价
        logger.info('OnRtnMarketStatus: MarketID[%s] MarketStatus[%s]'
                    % (pMarketStatusField.MarketID, pMarketStatusField.MarketStatus))
        try:
            logger.info('OnRtnMarketStatus: MarketID[%s] MarketStatus[%s]'
                        % (pMarketStatusField.MarketID, pMarketStatusField.MarketStatus))
        except:
            pass
    def OnRspQrySecurity(self, pSecurityField: "CTORATstpSecurityField", pRspInfoField: "CTORATstpRspInfoField",
                         nRequestID: "int", bIsLast: "bool") -> "void":
@@ -649,83 +668,92 @@
    def OnRspQryTradingAccount(self, pTradingAccountField: "CTORATstpTradingAccountField",
                               pRspInfoField: "CTORATstpRspInfoField", nRequestID: "int", bIsLast: "bool") -> "void":
        if nRequestID not in self.__temp_money_account_list_dict:
            self.__temp_money_account_list_dict[nRequestID] = []
        if bIsLast != 1:
            self.__temp_money_account_list_dict[nRequestID].append(
                {"departmentID": pTradingAccountField.DepartmentID, "investorID": pTradingAccountField.InvestorID,
                 "accountID": pTradingAccountField.AccountID, "currencyID": pTradingAccountField.CurrencyID,
                 "usefulMoney": round(pTradingAccountField.UsefulMoney, 2),
                 "frozenCash": round(pTradingAccountField.FrozenCash, 2),
                 "fetchLimit": round(pTradingAccountField.FetchLimit, 2),
                 "preDeposit": round(pTradingAccountField.PreDeposit, 2)})
            logger.info(
                'OnRspQryTradingAccount[%d]: DepartmentID[%s] InvestorID[%s] AccountID[%s] CurrencyID[%s] UsefulMoney[%.2f] FetchLimit[%.2f]'
                % (nRequestID, pTradingAccountField.DepartmentID, pTradingAccountField.InvestorID,
                   pTradingAccountField.AccountID, pTradingAccountField.CurrencyID,
                   pTradingAccountField.UsefulMoney, pTradingAccountField.FetchLimit))
        else:
            results = self.__temp_money_account_list_dict.pop(nRequestID)
            threading.Thread(target=lambda: self.__data_callback(TYPE_LIST_MONEY, nRequestID, results),
                             daemon=True).start()
            logger.info('查询资金账号结束[%d] ErrorID[%d] ErrorMsg[%s]'
                        % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
        try:
            if nRequestID not in self.__temp_money_account_list_dict:
                self.__temp_money_account_list_dict[nRequestID] = []
            if bIsLast != 1:
                self.__temp_money_account_list_dict[nRequestID].append(
                    {"departmentID": pTradingAccountField.DepartmentID, "investorID": pTradingAccountField.InvestorID,
                     "accountID": pTradingAccountField.AccountID, "currencyID": pTradingAccountField.CurrencyID,
                     "usefulMoney": round(pTradingAccountField.UsefulMoney, 2),
                     "frozenCash": round(pTradingAccountField.FrozenCash, 2),
                     "fetchLimit": round(pTradingAccountField.FetchLimit, 2),
                     "preDeposit": round(pTradingAccountField.PreDeposit, 2)})
                logger.info(
                    'OnRspQryTradingAccount[%d]: DepartmentID[%s] InvestorID[%s] AccountID[%s] CurrencyID[%s] UsefulMoney[%.2f] FetchLimit[%.2f]'
                    % (nRequestID, pTradingAccountField.DepartmentID, pTradingAccountField.InvestorID,
                       pTradingAccountField.AccountID, pTradingAccountField.CurrencyID,
                       pTradingAccountField.UsefulMoney, pTradingAccountField.FetchLimit))
            else:
                results = self.__temp_money_account_list_dict.pop(nRequestID)
                threading.Thread(target=lambda: self.__data_callback(TYPE_LIST_MONEY, nRequestID, results),
                                 daemon=True).start()
                logger.info('查询资金账号结束[%d] ErrorID[%d] ErrorMsg[%s]'
                            % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
        except:
            pass
    def OnRspQryOrder(self, pOrderField: "CTORATstpOrderField", pRspInfoField: "CTORATstpRspInfoField",
                      nRequestID: "int", bIsLast: "bool") -> "void":
        print('查询报单回调', bIsLast)
        if nRequestID not in self.__temp_order_list_dict:
            self.__temp_order_list_dict[nRequestID] = []
        if not bIsLast:
            logger.info(
                'OnRspQryOrder[%d]: SecurityID[%s] OrderLocalID[%s] Direction[%s] OrderRef[%d] OrderSysID[%s] VolumeTraded[%d] OrderStatus[%s] OrderSubmitStatus[%s], StatusMsg[%s]'
                % (nRequestID, pOrderField.SecurityID, pOrderField.OrderLocalID, pOrderField.Direction,
                   pOrderField.OrderRef, pOrderField.OrderSysID,
                   pOrderField.VolumeTraded, pOrderField.OrderStatus, pOrderField.OrderSubmitStatus,
                   pOrderField.StatusMsg))
            self.__temp_order_list_dict[nRequestID].append(
                {"securityID": pOrderField.SecurityID, "orderLocalID": pOrderField.OrderLocalID,
                 "direction": pOrderField.Direction, "orderSysID": pOrderField.OrderSysID,
                 "insertTime": pOrderField.InsertTime, "insertDate": pOrderField.InsertDate,
                 "acceptTime": pOrderField.AcceptTime, "cancelTime": pOrderField.CancelTime,
                 "limitPrice": pOrderField.LimitPrice, "accountID": pOrderField.AccountID,
                 "turnover": pOrderField.Turnover,
                 "volume": pOrderField.VolumeTotalOriginal,
                 "volumeTraded": pOrderField.VolumeTraded, "orderStatus": pOrderField.OrderStatus,
                 "orderSubmitStatus": pOrderField.OrderSubmitStatus, "statusMsg": pOrderField.StatusMsg})
        try:
            print('查询报单回调', bIsLast)
            if nRequestID not in self.__temp_order_list_dict:
                self.__temp_order_list_dict[nRequestID] = []
            if not bIsLast:
                logger.info(
                    'OnRspQryOrder[%d]: SecurityID[%s] OrderLocalID[%s] Direction[%s] OrderRef[%d] OrderSysID[%s] VolumeTraded[%d] OrderStatus[%s] OrderSubmitStatus[%s], StatusMsg[%s]'
                    % (nRequestID, pOrderField.SecurityID, pOrderField.OrderLocalID, pOrderField.Direction,
                       pOrderField.OrderRef, pOrderField.OrderSysID,
                       pOrderField.VolumeTraded, pOrderField.OrderStatus, pOrderField.OrderSubmitStatus,
                       pOrderField.StatusMsg))
                self.__temp_order_list_dict[nRequestID].append(
                    {"securityID": pOrderField.SecurityID, "orderLocalID": pOrderField.OrderLocalID,
                     "direction": pOrderField.Direction, "orderSysID": pOrderField.OrderSysID,
                     "insertTime": pOrderField.InsertTime, "insertDate": pOrderField.InsertDate,
                     "acceptTime": pOrderField.AcceptTime, "cancelTime": pOrderField.CancelTime,
                     "limitPrice": pOrderField.LimitPrice, "accountID": pOrderField.AccountID,
                     "turnover": pOrderField.Turnover,
                     "volume": pOrderField.VolumeTotalOriginal,
                     "volumeTraded": pOrderField.VolumeTraded, "orderStatus": pOrderField.OrderStatus,
                     "orderSubmitStatus": pOrderField.OrderSubmitStatus, "statusMsg": pOrderField.StatusMsg})
        else:
            logger.info('查询报单结束[%d] ErrorID[%d] ErrorMsg[%s]'
                        % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
            threading.Thread(target=lambda: self.__data_callback(TYPE_LIST_DELEGATE, nRequestID,
                                                                 self.__temp_order_list_dict[nRequestID]),
                             daemon=True).start()
            self.__temp_order_list_dict.pop(nRequestID)
            else:
                logger.info('查询报单结束[%d] ErrorID[%d] ErrorMsg[%s]'
                            % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
                threading.Thread(target=lambda: self.__data_callback(TYPE_LIST_DELEGATE, nRequestID,
                                                                     self.__temp_order_list_dict[nRequestID]),
                                 daemon=True).start()
                self.__temp_order_list_dict.pop(nRequestID)
        except:
            pass
    def OnRspQryPosition(self, pPositionField: "CTORATstpPositionField", pRspInfoField: "CTORATstpRspInfoField",
                         nRequestID: "int", bIsLast: "bool") -> "void":
        if nRequestID not in self.__temp_position_list_dict:
            self.__temp_position_list_dict[nRequestID] = []
        if bIsLast != 1:
            self.__temp_position_list_dict[nRequestID].append(
                {"investorID": pPositionField.InvestorID, "tradingDay": pPositionField.TradingDay,
                 "securityName": pPositionField.SecurityName,
                 "securityID": pPositionField.SecurityID, "historyPos": pPositionField.HistoryPos,
                 "historyPosFrozen": pPositionField.HistoryPosFrozen,
                 "todayBSPos": pPositionField.TodayBSPos, "todayBSPosFrozen": pPositionField.TodayBSPosFrozen,
                 "historyPosPrice": pPositionField.HistoryPosPrice, "totalPosCost": pPositionField.TotalPosCost,
                 "prePosition": pPositionField.PrePosition, "availablePosition": pPositionField.AvailablePosition,
                 "currentPosition": pPositionField.CurrentPosition, "openPosCost": pPositionField.OpenPosCost,
                 "todayCommission": pPositionField.TodayCommission,
                 "todayTotalBuyAmount": pPositionField.TodayTotalBuyAmount,
                 "todayTotalSellAmount": pPositionField.TodayTotalSellAmount})
        else:
            logger.info('查询持仓结束[%d] ErrorID[%d] ErrorMsg[%s]'
                        % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
            threading.Thread(target=lambda: self.__data_callback(TYPE_LIST_POSITION, nRequestID,
                                                                 self.__temp_position_list_dict[nRequestID]),
                             daemon=True).start()
            self.__temp_position_list_dict.pop(nRequestID)
        try:
            if nRequestID not in self.__temp_position_list_dict:
                self.__temp_position_list_dict[nRequestID] = []
            if bIsLast != 1:
                self.__temp_position_list_dict[nRequestID].append(
                    {"investorID": pPositionField.InvestorID, "tradingDay": pPositionField.TradingDay,
                     "securityName": pPositionField.SecurityName,
                     "securityID": pPositionField.SecurityID, "historyPos": pPositionField.HistoryPos,
                     "historyPosFrozen": pPositionField.HistoryPosFrozen,
                     "todayBSPos": pPositionField.TodayBSPos, "todayBSPosFrozen": pPositionField.TodayBSPosFrozen,
                     "historyPosPrice": pPositionField.HistoryPosPrice, "totalPosCost": pPositionField.TotalPosCost,
                     "prePosition": pPositionField.PrePosition, "availablePosition": pPositionField.AvailablePosition,
                     "currentPosition": pPositionField.CurrentPosition, "openPosCost": pPositionField.OpenPosCost,
                     "todayCommission": pPositionField.TodayCommission,
                     "todayTotalBuyAmount": pPositionField.TodayTotalBuyAmount,
                     "todayTotalSellAmount": pPositionField.TodayTotalSellAmount})
            else:
                logger.info('查询持仓结束[%d] ErrorID[%d] ErrorMsg[%s]'
                            % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))
                threading.Thread(target=lambda: self.__data_callback(TYPE_LIST_POSITION, nRequestID,
                                                                     self.__temp_position_list_dict[nRequestID]),
                                 daemon=True).start()
                self.__temp_position_list_dict.pop(nRequestID)
        except:
            pass
    # 成交回报,参数pTradeField是一个CTORATstpTradeField类对象
    def OnRtnTrade(self, pTradeField: "CTORATstpTradeField") -> "void":
@@ -734,22 +762,25 @@
    # 查询成交响应,参数pTradeField是一个CTORATstpTradeField类对象
    def OnRspQryTrade(self, pTradeField: "CTORATstpTradeField", pRspInfoField: "CTORATstpRspInfoField",
                      nRequestID: "int", bIsLast: "bool") -> "void":
        logger.info("查询成交响应")
        if nRequestID not in self.__temp_order_list_dict:
            self.__temp_order_list_dict[nRequestID] = []
        if not bIsLast:
            self.__temp_order_list_dict[nRequestID].append(
                {"tradeID": pTradeField.TradeID, "securityID": pTradeField.SecurityID,
                 "orderLocalID": pTradeField.OrderLocalID,
                 "direction": pTradeField.Direction, "orderSysID": pTradeField.OrderSysID, "price": pTradeField.Price,
                 "tradeTime": pTradeField.TradeTime,
                 "volume": pTradeField.Volume, "tradeDate": pTradeField.TradeDate, "tradingDay": pTradeField.TradingDay,
                 "pbuID": pTradeField.PbuID, "accountID": pTradeField.AccountID})
        else:
            threading.Thread(target=lambda: self.__data_callback(TYPE_LIST_TRADED, nRequestID,
                                                                 self.__temp_order_list_dict[nRequestID]),
                             daemon=True).start()
            self.__temp_order_list_dict.pop(nRequestID)
        try:
            logger.info("查询成交响应")
            if nRequestID not in self.__temp_order_list_dict:
                self.__temp_order_list_dict[nRequestID] = []
            if not bIsLast:
                self.__temp_order_list_dict[nRequestID].append(
                    {"tradeID": pTradeField.TradeID, "securityID": pTradeField.SecurityID,
                     "orderLocalID": pTradeField.OrderLocalID,
                     "direction": pTradeField.Direction, "orderSysID": pTradeField.OrderSysID, "price": pTradeField.Price,
                     "tradeTime": pTradeField.TradeTime,
                     "volume": pTradeField.Volume, "tradeDate": pTradeField.TradeDate, "tradingDay": pTradeField.TradingDay,
                     "pbuID": pTradeField.PbuID, "accountID": pTradeField.AccountID})
            else:
                threading.Thread(target=lambda: self.__data_callback(TYPE_LIST_TRADED, nRequestID,
                                                                     self.__temp_order_list_dict[nRequestID]),
                                 daemon=True).start()
                self.__temp_order_list_dict.pop(nRequestID)
        except:
            pass
# 获取响应发送socket