金融科技【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址https://gitcode.com/gh_mirrors/tq/tqsdk-python点击查看免费下载本文围绕tqsdk的TqYida易达交易类展开说明如何在策略代码中创建易达账户实例、五个构造参数各自的含义与取值要求以及使用前提安装tqsdk_zq_otg、申请程序化外接授权。同时结合开源仓库源码深入剖析TqYida的继承结构、登录报文组装、账户 key 计算与本地 OTG 适配进程otg_adapter的启动流程帮助读者在接入易达柜台实盘前建立完整的调用链认知并能将TqYida与TqMultiAccount多账户模式配合使用。一、TqYida 是什么TqApi 支持的易达柜台直连账户tqsdk的天勤量化开发包支持多种交易账户类型TqYida是其中面向易达交易柜台的实盘账户类。它被导出在包顶层可直接从tqsdk导入from tqsdk import TqYida这一导出定义在 tqsdk/init.py 中同时TqYida也被TqApi的account参数类型联合UnionTradeable接纳见 tqsdk/api.py 中的类型定义与参数说明:py:class:~tqsdk.TqYida : 使用易达账号。从 tqsdk/tradeable/otg/tqyida.py 的类定义可以看到它的继承关系class TqYida(BaseOtg, FutureMixin): 易达账户类BaseOtgtqsdk/tradeable/otg/base_otg.py是天勤外接柜台OTG账户的公共基类负责交易通道连接、登录与数据分发FutureMixintqsdk/tradeable/mixin.py提供期货账户的get_account()、get_position()、get_order()、get_trade()四个查询接口并声明_account_type FUTURE即TqYida是期货类型账户返回Account、Position、Order、Trade等期货业务对象。按 版本说明TqYida是在 3.7.32024/09/20版本中新增的账户类型与TqRohon、TqJees、TqCtp同属多柜台直连系列。二、创建 TqYida 实例五个参数逐项说明TqYida的构造函数签名为TqYida(account_id: str, password: str, front_url: str, app_id: str, auth_code: str)各参数含义取自 tqsdk/tradeable/otg/tqyida.py 的官方文档字符串参数类型说明account_idstr易达账户帐号passwordstr易达账户密码front_urlstr易达柜台地址格式为tcp://ip:port如tcp://129.211.138.170:10001app_idstr易达 AppIDauth_codestr易达 AuthCode官方示例同样定义在类文档字符串中from tqsdk import TqApi, TqAuth, TqYida account TqYida( account_id易达账户, password易达密码, front_url易达柜台地址, app_id易达 AppID, auth_code易达 AuthCode, ) api TqApi(account, authTqAuth(快期账户, 账户密码))两点必须注意的使用前提原文档字符串中的注意部分使用TqYida账户需要安装tqsdk_zq_otg包pip install -U tqsdk_zq_otg。自 3.7.2 起tqsdk_zq_otg已从tqsdk的安装依赖中移除见 版本说明 中的 BREAKING 记录多柜台用户必须手动安装front_url、app_id和auth_code信息需要向易达申请程序化外接后取得不是 tqsdk 侧可以自行生成的配置。TqApi仍需提供authTqAuth(快期账户, 账户密码)这是因为行情通道与数据服务依赖快期账户授权交易通道才走易达柜台直连。三、参数如何被使用源码级实现细节3.1 构造时固定了交易通道地址zqotg://127.0.0.1:0/tradetqyida.py构造函数在保存五个参数后调用基类构造super(TqYida, self).__init__( broker_id, account_idaccount_id, passwordpassword, td_urlzqotg://127.0.0.1:0/trade, )注意这里broker_id固定为空字符串交易服务地址td_url被写死为zqotg://协议的本地回环地址。从源码结构看zqotg://并非真实远端地址而是一个协议标记告诉TqConnect该账户的交易通道需要经由ZqOtgContext启动本地 OTG 适配进程后再替换为真实 WebSocket 地址。在 tqsdk/connect.py 中可以看到对应分支elif url_info.scheme.startswith(zqotg): cm ZqOtgContext(self._api)ZqOtgContexttqsdk/zq_otg.py在get_url()中做两件事检查tqsdk_zq_otg是否安装且版本不低于3.10.1否则抛出使用 ... 账户需要安装/更新 tqsdk_zq_otg 包的异常——这就是文档中第一条注意事项的底层来源启动tqsdk_zq_otg包携带的原生进程otg_adapter--modecmd监听其写出的port.json把127.0.0.1:port组装成ws://地址返回给TqConnect。因此整个链路是策略代码 → TqYidaPython 账号对象→ 本地 WebSocket → otg_adapter原生进程负责与易达柜台通信→ 易达柜台。OTG 日志与配置文件分别落在~/.tqsdk/otg_logs与~/.tqsdk/otg_config目录下排查柜台侧问题时应优先查看这些目录。3.2 登录报文把五个参数交给适配进程BaseOtg._run()在建立通道后会触发await self._send_login_pack()见 tqsdk/tradeable/otg/base_otg.py。TqYida重写了该方法将五个构造参数打包为登录请求并通过交易通道发出async def _send_login_pack(self): req { aid: req_login, bid: tqsdk_zq_otg, user_name: self._account_id, password: self._password, broker_id: , front: self._front_url, app_id: self._app_id, auth_code: self._auth_code, backend: yida } await self._td_send_chan.send(req)其中backend: yida是区分易达柜台的关键字段——同系列账户如TqRohon的rohon、TqJees的jees结构一致仅backend与参数组合不同。bid固定为tqsdk_zq_otg表示由本地适配进程处理该登录请求。3.3 账户 key多账户隔离的身份标识TqYida重写了_get_account_key()def _get_account_key(self): s self._broker_id self._account_id s self._front_url if self._front_url else return hashlib.md5(s.encode(utf-8)).hexdigest()与基类仅用broker_id account_id不同TqYida把front_url也纳入哈希输入。从源码结构看这样设计的意义在于同一易达账号若经由不同柜台地址接入会产生不同的account_key从而在api._data[trade]数据截面中获得独立的数据空间避免账户间串号。业务数据账户资金、持仓、委托、成交均以该 key 为一级索引存储FutureMixin的四个查询方法正是通过[trade, self._account_key, ...]路径取数。3.4_account_auth声明与登录行为TqYida还定义了_account_auth属性property def _account_auth(self): return { feature: tq_direct, account_id: self._account_id, auto_add: True, }ZqOtgContext在初始化时会筛选_account_auth.get(feature) tq_direct的账户来确定需要启动 OTG 适配进程的账户类型TqYida因此会被正确识别为直连柜台类账户并纳入适配进程管理流程。四、拿到 TqApi 之后行情、账户数据与下单创建TqYida并传入TqApi后使用方式与TqAccount等实盘账户一致。典型的账户数据读取循环from tqsdk import TqApi, TqAuth, TqYida account TqYida( account_id易达账户, password易达密码, front_urltcp://x.x.x.x:10001, app_id易达 AppID, auth_code易达 AuthCode, ) api TqApi(account, authTqAuth(快期账户, 账户密码)) acc account.get_account() pos account.get_position(DCE.i2501) while api.wait_update(): print(acc.dynamic_balance, pos.pos_long)get_account()/get_position(symbol)/get_order(order_id)/get_trade(trade_id)返回的是对象引用其内容在api.wait_update()时更新而不是每次调用都会产生新的网络请求委托、撤单使用api.insert_order(...)、api.cancel_order(...)多账户模式下这些 API 必须传account参数指定账户实例参见 tqsdk/risk_rule.py 中对account参数多账户模式下必须指定的说明。五、与 TqMultiAccount 组合一个 API 驱动多个柜台账户tqsdk的 TqMultiAccount 支持在一个TqApi下同时操作不同账户其accounts列表类型中明确包含TqYida见 tqsdk/multiaccount.py 构造函数的参数说明。示例from tqsdk import TqApi, TqAuth, TqMultiAccount, TqYida, TqAccount yida_acc TqYida( account_id易达账户, password易达密码, front_urltcp://x.x.x.x:10001, app_id易达 AppID, auth_code易达 AuthCode, ) broker_acc TqAccount(某期货公司, 123456, 123456) api TqApi(TqMultiAccount([yida_acc, broker_acc]), authTqAuth(快期账户, 账户密码)) order1 api.insert_order(symbolDCE.i2501, directionBUY, offsetOPEN, volume1, accountyida_acc) order2 api.insert_order(symbolSHFE.rb2510, directionBUY, offsetOPEN, volume1, accountbroker_acc) while order1.status ! FINISHED or order2.status ! FINISHED: api.wait_update() print(yida_acc.get_account().dynamic_balance) print(broker_acc.get_account().dynamic_balance) api.close()两点细节TqMultiAccount构造函数会用_account_key去重并拒绝重复的账户实例多账户列表中不允许使用重复的账户实例.异常。由于TqYida的 key 计算包含front_url同一账号不同柜台地址被视为不同账户多账户模式下对get_position、account、insert_order、set_target_volume等函数必须指定account参数否则会报多账户模式下, 需要指定账户实例 account。六、排错要点对照源码确认报错位置现象来源处理方向使用 TqYida 账户需要安装 tqsdk_zq_otg 包: pip install -U tqsdk_zq_otgtqsdk/zq_otg.py 中ImportError分支执行pip install -U tqsdk_zq_otg使用 TqYida 账户需要更新 tqsdk_zq_otg 包到最新版本同上版本低于3.10.1分支升级tqsdk_zq_otg获取交易服务地址失败ZqOtgContext.get_url()在 30 秒内未拿到非零port时抛出TqContextManagerError检查本地是否成功拉起otg_adapter进程查看~/.tqsdk/otg_logs下最新日志目录柜台侧鉴权失败、登录无响应登录报文经otg_adapter转发到易达柜台_send_login_pack中的req_login核对front_url/app_id/auth_code是否为易达程序化外接下发的值tcp://ip:port格式是否正确TqConnect层还具备交易通道断线重连能力BaseOtg._connect_td中为每个通道创建了TdReconnectHandler见 tqsdk/tradeable/otg/base_otg.py因此网络抖动后不必手工重建TqApi。七、小结TqYida是tqsdk直连易达柜台的期货账户类继承BaseOtgOTG 通道与登录与FutureMixin账户/持仓/委托/成交查询在 tqsdk/tradeable/otg/tqyida.py 中实现构造需五个参数account_id、password、front_urltcp://ip:port格式、app_id、auth_code后三者须由易达程序化外接申请获得使用前必须pip install -U tqsdk_zq_otgTqApi仍需TqAuth快期账户授权行情与数据服务底层经由本地zqotg://协议占位地址与otg_adapter原生进程通信登录报文以backend: yida标识柜台可与TqMultiAccount组合在一个TqApi中驱动多柜台账户此时所有下单与账户敏感 API 都要显式传入account实例。赞分享金融科技【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址https://gitcode.com/gh_mirrors/tq/tqsdk-python点击查看免费下载相关推荐TqXuntou 迅投柜台直连详解tqsdk-python 中期货账户接入迅投交易柜台的完整实现TqXuntou 迅投柜台直连详解tqsdk python 中期货账户接入迅投交易柜台的完整实现 天勤量化开发包tqsdk python通过 TqXunt金融科技TqJees 杰宜斯资管账户接入指南tqsdk 多柜台直连交易架构与源码级解析TqJees 杰宜斯资管账户接入指南tqsdk 多柜台直连交易架构与源码级解析 在 tqsdk python天勤量化开发包中 TqJees 是用于直连杰金融科技tqsdk-python 的 TqKq 与 TqKqStock快期模拟交易类详解——账户体系、源码机制与多账户实战tqsdk python 的 TqKq 与 TqKqStock快期模拟交易类详解——账户体系、源码机制与多账户实战 TqKq 快期模拟交易类与 TqKqS金融科技创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考