admin
2025-04-14 cb915e263516ee74bbf37ac702241954fb5e92d8
参数修改
1个文件已修改
56 ■■■■■ 已修改文件
huaxin_client/trade_client.py 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
huaxin_client/trade_client.py
@@ -36,9 +36,6 @@
FRONT_ADDRESS = "tcp://192.168.84.31:6500"
FRONT_ADDRESS1 = "tcp://192.168.84.32:26500"
TYPE_ORDER = 0
TYPE_CANCEL_ORDER = 1
TYPE_LIST_DELEGATE = 2
@@ -50,17 +47,28 @@
ENABLE_ORDER = True
class TradeSimpleApi:
    req_id = 0
    __buy_sinfo_set = set()
    __sell_sinfo_set = set()
    __cancel_buy_sinfo_set = set()
    __cancel_sell_sinfo_set = set()
    __req_lock = threading.Lock()
    @classmethod
    def set_login_info(cls, session_id, front_id):
        cls.__session_id = session_id
        cls.__front_id = front_id
    def __create_req_id(self):
        try:
            self.__req_lock.acquire(blocking=True)
            self.req_id += 1
            req_id = self.req_id
            return req_id
        finally:
            self.__req_lock.release()
    # sinfo char(32)
    def buy(self, code, count, price, sinfo, order_ref, shadow_price=None):
@@ -72,7 +80,7 @@
        async_log_util.info(logger_local_huaxin_trade_debug,
                            f"进入买入方法:code-{code} sinfo-{sinfo} order_ref-{order_ref}")
        self.__buy_sinfo_set.add(sinfo)
        self.req_id += 1
        req_id = self.__create_req_id()
        # 请求报单
        req_field = traderapi.CTORATstpInputOrderField()
        # TORA_TSTP_EXD_COMM(0): 通用(内部使用)
@@ -125,7 +133,7 @@
        '''
        # 给L2发送消息
        ret = api.ReqOrderInsert(req_field, self.req_id)
        ret = api.ReqOrderInsert(req_field, req_id)
        if ret != 0:
            raise Exception('ReqOrderInsert fail, ret[%d]' % ret)
        # 常态化监听不需要单独设置
@@ -145,8 +153,8 @@
                req_field.SInfo = shadow_sinfo
                req_field.OrderRef = shadow_order_ref
                req_field.VolumeTotalOriginal = constant.SHADOW_ORDER_VOLUME
                self.req_id += 1
                ret = api.ReqOrderInsert(req_field, self.req_id)
                req_id = self.__create_req_id()
                ret = api.ReqOrderInsert(req_field, req_id)
                if ret != 0:
                    raise Exception('ReqOrderInsert fail, ret[%d]' % ret)
                # 影子订单撤单
@@ -169,7 +177,7 @@
        async_log_util.info(logger_local_huaxin_trade_debug,
                            f"进入撤单方法:code-{code} order_sys_id-{order_sys_id}  order_ref-{order_ref} sinfo-{sinfo}")
        self.__cancel_buy_sinfo_set.add(sinfo)
        self.req_id += 1
        req_id = self.__create_req_id()
        # 请求撤单
        req_field = traderapi.CTORATstpInputOrderActionField()
        if tool.is_sz_code(code):
@@ -206,7 +214,7 @@
        委托方式字段根据券商要求填写,无特殊说明置空即可
        其它字段置空
        '''
        ret = api.ReqOrderAction(req_field, self.req_id)
        ret = api.ReqOrderAction(req_field, req_id)
        if ret != 0:
            raise Exception('ReqOrderAction fail, ret[%d]' % ret)
        return
@@ -216,7 +224,7 @@
        if sinfo in self.__sell_sinfo_set:
            raise Exception(f'下单请求已经提交:{sinfo}')
        self.__sell_sinfo_set.add(sinfo)
        self.req_id += 1
        req_id = self.__create_req_id()
        # 请求报单
        req_field = traderapi.CTORATstpInputOrderField()
        # TORA_TSTP_EXD_COMM(0): 通用(内部使用)
@@ -287,7 +295,7 @@
        '''
        其它字段置空
        '''
        ret = api.ReqOrderInsert(req_field, self.req_id)
        ret = api.ReqOrderInsert(req_field, req_id)
        if ret != 0:
            raise Exception('ReqOrderInsert fail, ret[%d]' % ret)
        return
@@ -297,7 +305,7 @@
        if sinfo in self.__cancel_sell_sinfo_set:
            raise Exception(f'撤单请求已经提交:{sinfo}')
        self.__cancel_sell_sinfo_set.add(sinfo)
        self.req_id += 1
        req_id = self.__create_req_id()
        # 请求撤单
        req_field = traderapi.CTORATstpInputOrderActionField()
        if tool.is_sz_code(code):
@@ -327,15 +335,14 @@
        委托方式字段根据券商要求填写,无特殊说明置空即可
        其它字段置空
        '''
        ret = api.ReqOrderAction(req_field, self.req_id)
        ret = api.ReqOrderAction(req_field, req_id)
        if ret != 0:
            raise Exception('ReqOrderAction fail, ret[%d]' % ret)
        return
    # 查询当日可撤销的委托
    def list_delegate_orders(self, is_cancel):
        self.req_id += 1
        req_id = self.req_id
        req_id = self.__create_req_id()
        req_field = traderapi.CTORATstpQryOrderField()
        # 以下字段不填表示不设过滤条件,即查询所有报单
        # req_field.SecurityID = '600000'
@@ -352,8 +359,7 @@
    # 查询当日成交的订单
    def list_traded_orders(self):
        self.req_id += 1
        req_id = self.req_id
        req_id = self.__create_req_id()
        req_field = traderapi.CTORATstpQryTradeField()
        ret = api.ReqQryTrade(req_field, req_id)
        if ret != 0:
@@ -362,8 +368,7 @@
    # 查询持仓
    def list_positions(self):
        self.req_id += 1
        req_id = self.req_id
        req_id = self.__create_req_id()
        req_field = traderapi.CTORATstpQryPositionField()
        ret = api.ReqQryPosition(req_field, req_id)
        if ret != 0:
@@ -372,8 +377,7 @@
    # 查询资金账户
    def get_money_account(self):
        self.req_id += 1
        req_id = self.req_id
        req_id = self.__create_req_id()
        req_field = traderapi.CTORATstpQryTradingAccountField()
        req_field.CurrencyID = traderapi.TORA_TSTP_CID_CNY
        ret = api.ReqQryTradingAccount(req_field, req_id)
@@ -920,7 +924,8 @@
                                  request_id)
    def OnDealList(self, client_id, request_id, sk):
        async_log_util.info(logger_local_huaxin_trade_debug, f"请求成交列表:client_id-{client_id} request_id-{request_id}")
        async_log_util.info(logger_local_huaxin_trade_debug,
                            f"请求成交列表:client_id-{client_id} request_id-{request_id}")
        try:
            # printlog("开始请求成交列表")
            req_id = self.__tradeSimpleApi.list_traded_orders()
@@ -930,7 +935,8 @@
            SendResponseSkManager.send_error_response("common", request_id, client_id, str(e))
    def OnDelegateList(self, client_id, request_id, sk, is_cancel):
        async_log_util.info(logger_local_huaxin_trade_debug, f"请求委托列表:client_id-{client_id} request_id-{request_id}")
        async_log_util.info(logger_local_huaxin_trade_debug,
                            f"请求委托列表:client_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)
@@ -1064,7 +1070,8 @@
                json.dumps({"type": "response", "data": {"code": 0, "data": data}, "client_id": client_id,
                            "request_id": request_id}), type, client_id, request_id)
            async_log_util.info(logger_local_huaxin_trade_debug, "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)
        else:
            async_log_util.info(logger_local_huaxin_trade_debug, "非API回调 req_id-{}", req_id)
            send_response(
@@ -1111,5 +1118,6 @@
    while True:
        time.sleep(2)
if __name__ == '__main__':
    run()