Administrator
2023-09-04 939c5bfb0943cea1b373e6ca1977ed6b7195d2e9
交易回调异常保护
2个文件已修改
39 ■■■■ 已修改文件
code_attribute/gpcode_manager.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
huaxin_client/trade_client.py 35 ●●●●● 补丁 | 查看 | 原始文档 | 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,6 +514,7 @@
    def OnRspOrderInsert(self, pInputOrderField: "CTORATstpInputOrderField", pRspInfoField: "CTORATstpRspInfoField",
                         nRequestID: "int") -> "void":
        try:
        if pRspInfoField.ErrorID == 0:
            logger.info('[%d] OnRspOrderInsert: OK! [%d]' % (round(time.time() * 1000), nRequestID))
        else:
@@ -523,10 +524,13 @@
                                                                 {"sinfo": pInputOrderField.SInfo, "orderStatus": -1,
                                                                  "orderStatusMsg": pRspInfoField.ErrorMsg}),
                             daemon=True).start()
        except:
            pass
    # 撤单响应
    def OnRspOrderAction(self, pInputOrderActionField: "CTORATstpInputOrderActionField",
                         pRspInfoField: "CTORATstpRspInfoField", nRequestID: "int") -> "void":
        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,
@@ -543,6 +547,8 @@
                                                                  "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":
        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":
        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,8 +593,7 @@
                   pOrderField.OrderRef, pOrderField.OrderLocalID,
                   pOrderField.LimitPrice, pOrderField.VolumeTotalOriginal, pOrderField.OrderSysID,
                   pOrderField.OrderStatus, pOrderField.InsertTime))
        except:
            pass
        OrderIDManager.set_system_order_id(pOrderField.SecurityID, pOrderField.SInfo, pOrderField.OrderSysID)
        if pOrderField.OrderStatus != traderapi.TORA_TSTP_OST_Unknown:
@@ -594,12 +605,17 @@
                                                                                 "orderSysID": pOrderField.OrderSysID,
                                                                                 "accountID": pOrderField.AccountID}),
                             daemon=True).start()
        except:
            pass
    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))
        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): 开盘集合竞价
        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,6 +668,7 @@
    def OnRspQryTradingAccount(self, pTradingAccountField: "CTORATstpTradingAccountField",
                               pRspInfoField: "CTORATstpRspInfoField", nRequestID: "int", bIsLast: "bool") -> "void":
        try:
        if nRequestID not in self.__temp_money_account_list_dict:
            self.__temp_money_account_list_dict[nRequestID] = []
        if bIsLast != 1:
@@ -670,9 +690,12 @@
                             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":
        try:
        print('查询报单回调', bIsLast)
        if nRequestID not in self.__temp_order_list_dict:
            self.__temp_order_list_dict[nRequestID] = []
@@ -701,9 +724,12 @@
                                                                 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":
        try:
        if nRequestID not in self.__temp_position_list_dict:
            self.__temp_position_list_dict[nRequestID] = []
        if bIsLast != 1:
@@ -726,6 +752,8 @@
                                                                 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,6 +762,7 @@
    # 查询成交响应,参数pTradeField是一个CTORATstpTradeField类对象
    def OnRspQryTrade(self, pTradeField: "CTORATstpTradeField", pRspInfoField: "CTORATstpRspInfoField",
                      nRequestID: "int", bIsLast: "bool") -> "void":
        try:
        logger.info("查询成交响应")
        if nRequestID not in self.__temp_order_list_dict:
            self.__temp_order_list_dict[nRequestID] = []
@@ -750,6 +779,8 @@
                                                                 self.__temp_order_list_dict[nRequestID]),
                             daemon=True).start()
            self.__temp_order_list_dict.pop(nRequestID)
        except:
            pass
# 获取响应发送socket