TqJees 杰宜斯资管账户接入指南:tqsdk 多柜台直连交易架构与源码级解析

发布时间:2026/10/14 15:15:56
TqJees 杰宜斯资管账户接入指南:tqsdk 多柜台直连交易架构与源码级解析
金融科技【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址https://gitcode.com/gh_mirrors/tq/tqsdk-python点击查看免费下载在 tqsdk-python天勤量化开发包中TqJees是用于直连杰宜斯JYS资管柜台的期货交易账户类。本文以 tqsdk.tqjees.rst 参考文档为主体结合 tqsdk/tradeable/otg/tqjees.py 的完整实现讲清TqJees的六个构造参数、与TqApi的配合方式、依赖包tqsdk_zq_otg的安装要求以及登录报文、账户密钥生成、OTG 本地适配进程等底层机制帮助使用者将量化策略接入杰宜斯程序化外接通道。TqJees 在 tqsdk 账户体系中的定位tqsdk 提供多种交易账户类TqJees是其中一类企业多柜台OTG直连账户。从源码结构看它与其他 OTG 账户共享同一套基类体系class TqJees(BaseOtg, FutureMixin): 杰宜斯资管账户类BaseOtg负责交易连接管理_connect_td、登录流程_send_login_pack、收发数据包的分发_handle_recv_data/_handle_req_data并把行情与交易两条通道的数据统一合并进TqApi的数据模型FutureMixin提供期货账户通用的get_account()、get_position(symbol)、get_order(order_id)、get_trade(trade_id)四个查询方法返回的对象在api.wait_update()时被更新。TqJees通过 tqsdk/tradeable/otg/init.py 导出并在 tqsdk/__init__.py 中作为顶层 API 暴露TqApi 的account参数文档见 tqsdk/api.py明确列出TqJees支持使用杰宜斯资管账号。版本背景见 doc/version.rst3.7.3 (2024/09/20)新增TqJees账户类型支持杰宜斯资管柜台3.7.2 (2024/09/12)BREAKING 变更从安装依赖中移除tqsdk_zq_otg模块使用多柜台需要手动安装3.7.5 (2024/11/13)为TqCtp、TqJees、TqRohon、TqYida补充了front_url格式示例。因此适用前提是使用 tqsdk ≥ 3.7.3 且手动安装tqsdk_zq_otg依赖。构造参数详解TqJees的构造函数签名为TqJees(account_id: str, password: str, front_broker: str, front_url: str, app_id: str, auth_code: str)六个参数均为必填字符串含义如下参数类型说明account_idstr杰宜斯资管账户passwordstr账户密码front_brokerstr杰宜斯柜台代码front_urlstr杰宜斯柜台地址格式为tcp://ip:port如tcp://129.211.138.170:10001app_idstr杰宜斯 AppIDauth_codestr杰宜斯 AuthCode两条使用注意来自源码 docstring见 tqsdk/tradeable/otg/tqjees.py使用TqJees账户需要安装tqsdk_zq_otg包pip install -U tqsdk_zq_otgfront_broker、front_url、app_id和auth_code四项信息需要向杰宜斯申请程序化外接后取得。构造完成时tqsdk/tradeable/otg/tqjees.py实例会把六个字段保存下来然后以broker_id、td_urlzqotg://127.0.0.1:0/trade调用BaseOtg.__init__。这里有两点值得注意broker_id固定为空字符串真正的柜台标识由front_broker承担td_url中的zqotg://是一个伪协议端口0表示尚未确定实际连接地址由后文介绍的ZqOtgContext在运行时替换为ws://127.0.0.1:动态端口。账户密钥与账户标识OTG 账户的数据在 tqsdk 内部按trade/account_key/...的键路径组织。TqJees重写了 _get_account_keydef _get_account_key(self): s self._broker_id self._account_id s self._front_broker if self._front_broker else s self._front_url if self._front_url else return hashlib.md5(s.encode(utf-8)).hexdigest()即account_key是account_id front_broker front_url拼接后的 MD5 摘要。这意味着同一账户只要柜台代码或柜台地址不同就会被视为不同的账户实例同时它也解释了为什么TqJees能安全地出现在TqMultiAccount多账户列表中——各账户的键互不冲突。另外TqJees的 _account_auth 属性声明了feature: tq_direct这个标记被 tqsdk/zq_otg.py 用来识别哪些账户需要拉起 OTG 适配进程。快速上手最小可运行示例参考文档给出的标准用法from tqsdk import TqApi, TqAuth, TqJees account TqJees( account_id杰宜斯账户, password杰宜斯密码, front_broker杰宜斯柜台代码, front_url杰宜斯柜台地址, # 形如 tcp://129.211.138.170:10001 app_id杰宜斯 AppID, auth_code杰宜斯 AuthCode, ) api TqApi(account, authTqAuth(快期账户, 账户密码)) # 账户资金内容在 wait_update 时更新 acc account.get_account() print(acc.balance, acc.float_profit) quote api.get_quote(SHFE.rb2610) while api.wait_update(): print(quote.last_price)要点说明TqAuth为必填项即使使用实盘账户也需要快期账户授权参见 tqsdk/api.py 中auth参数说明行情仍然走 tqsdk 的行情服务交易走杰宜斯柜台下单、撤单使用TqApi的标准接口多账户场景下需通过account参数或account_obj指定目标账户由于TqJees混入了FutureMixin可直接调用get_account()/get_position()/get_order()/get_trade()获取资金、持仓、委托、成交对象其字段语义与期货标准对象Account、Position、Order、Trade一致实现见 tqsdk/tradeable/mixin.py。多账户模式TqMultiAccount 下的 TqJeesTqMultiAccount 的文档明确支持在账户列表中包含TqJees见 tqsdk/multiaccount.py。一个策略同时操作资管账户与模拟账户的写法from tqsdk import TqApi, TqAuth, TqMultiAccount, TqJees, TqSim jees TqJees(account_id..., password..., front_broker..., front_urltcp://ip:port, app_id..., auth_code...) sim TqSim() api TqApi(TqMultiAccount([jees, sim]), authTqAuth(快期账户, 账户密码)) acc1 jees.get_account() acc2 sim.get_account() while api.wait_update(): print(acc1.float_profit, acc2.float_profit)注意多账户模式下insert_order、cancel_order、get_account等对账户敏感的接口必须显式传入account参数参见 tqsdk/risk_rule.py 等处的参数说明否则会触发多账户模式下, 需要指定账户实例 account错误。底层连接链zqotg 伪协议与本地适配进程TqJees的td_url为zqotg://127.0.0.1:0/trade这条 URL 在 tqsdk/connect.py 中被特殊处理elif url_info.scheme.startswith(zqotg): cm ZqOtgContext(self._api)ZqOtgContext 是本地进程级的上下文管理器其职责与关键约束如下依赖检查__init__中尝试from tqsdk_zq_otg import get_zq_otg_path导入失败抛出使用 TqJees 账户需要安装 tqsdk_zq_otg 包: pip install -U tqsdk_zq_otg版本低于3.10.1时抛出需要更新 tqsdk_zq_otg 包到最新版本的异常。错误信息中的账户类型列表正是通过匹配_account_auth.feature tq_direct统计出来的tqsdk/zq_otg.py拉起 otg_adapter 进程get_url 中以--modecmd启动tqsdk_zq_otg包提供的otg_adapter可执行文件并把LD_LIBRARY_PATH指向包安装路径启动参数指定了日志目录、用户配置目录以及host127.0.0.1、port0系统分配空闲端口动态端口协商适配进程启动后会在数据目录写入port.jsonZqOtgContext最多轮询 30 秒读取其中的port成功后把伪协议 URL 改写为ws://127.0.0.1:port/trade随后TqConnect用 WebSocket 连接到该本地进程日志与配置目录每次运行在~/.tqsdk/otg_logs/时间戳-uuid/下创建独立日志目录用户配置存于~/.tqsdk/otg_config/日志目录超过TQ_OTG_MAX_LOG_DIRS环境变量默认 30时自动清理但 3 天内的目录受保护见 tqsdk/zq_otg.py 与_clear_otg_logs。因此从源码结构看TqJees的实际数据流是Python 策略 → WebSocket → 本机 otg_adapter 进程 → 杰宜斯柜台front_url适配进程负责把杰宜斯柜台协议翻译成 tqsdk 统一的req_login/rtn_data报文格式。进程退出时由__aexit__关闭 stdin 并等待进程结束保证 TqApi 关闭时子进程不泄漏。登录报文与数据回流连接建立后BaseOtg._run 首先调用账户自身的_send_login_pack。TqJees的登录报文tqsdk/tradeable/otg/tqjees.py为req { aid: req_login, bid: tqsdk_zq_otg, user_name: self._account_id, password: self._password, broker_id: self._front_broker, front: self._front_url, app_id: self._app_id, auth_code: self._auth_code, backend: jees } await self._td_send_chan.send(req)其中backend: jees是柜台路由关键字——它告诉本地otg_adapter进程使用杰宜斯后端协议。对比同族的 TqRohonbackend: rohon可以看到OTG 账户家族在 tqsdk 侧几乎同构差异仅在于登录报文的backend字段与 docstring 中的柜台名称。收到柜台回执后BaseOtg的 _handle_recv_data 会把交易通道rtn_data中的 notify 补上_account_name字段用于 Web 界面展示而 _td_handler 会把 OTG 返回的成交记录中trade的键从原始user_id替换为统一的_account_key与行情通道数据合并后进入TqApi._data——这正是get_trade()等接口能按trade/account_key/trades路径取数的原因。下单与撤单的路由交易类请求insert_order、cancel_order等由 Tradeable._is_self_trade_pack 依据account_key匹配到对应账户实例再经 _handle_req_data 发往该账户自己的_td_send_chan。因此在多账户场景下请求不会被错发到其他柜台。运行环境与排障要点结合上述实现使用TqJees时建议按以下清单核对tqsdk 版本≥ 3.7.3TqJees引入版本pip install -U tqsdk保持升级依赖包pip install -U tqsdk_zq_otg且版本 ≥ 3.10.1由 tqsdk/zq_otg.py 的版本比较逻辑强制检查自 tqsdk 3.7.2 起该依赖不再随主包自动安装参数获取front_broker/front_url/app_id/auth_code来自杰宜斯程序化外接申请其中front_url必须为tcp://ip:port形式启动失败排查若提示使用 TqJees 账户需要安装 tqsdk_zq_otg 包说明依赖缺失或版本过低若提示获取交易服务地址失败tqsdk/zq_otg.py 抛出的TqContextManagerError说明 30 秒内port.json未就绪可检查~/.tqsdk/otg_logs/下对应时间戳目录中的适配进程日志以及到杰宜斯柜台的网络连通性Windows 与 Linux/macOS 的进程拉起方式不同前者subprocess.Popen后者asyncio.create_subprocess_exec见 tqsdk/zq_otg.py跨平台部署时以各自系统实测为准日志管理每次运行都会生成新的~/.tqsdk/otg_logs/时间戳-uuid目录长期运行环境可通过环境变量TQ_OTG_MAX_LOG_DIRS调整保留上限默认 30 个目录。小结tqsdk.TqJees以六个构造参数封装了杰宜斯资管柜台的直连信息复用BaseOtg的连接管理与FutureMixin的期货数据查询能力其底层通过zqotg://伪协议触发ZqOtgContext拉起tqsdk_zq_otg提供的本地otg_adapter进程再以动态端口的 WebSocket 完成 Python 层与杰宜斯柜台协议之间的桥接。掌握account_key生成、登录报文backend路由、port.json端口协商这三个机制即可独立排查接入问题并将其平滑扩展到TqMultiAccount多账户策略中。相关源码入口tqsdk/tradeable/otg/tqjees.py、tqsdk/tradeable/otg/base_otg.py、tqsdk/zq_otg.py、tqsdk/connect.py。赞分享金融科技【免费下载链接】tqsdk-python天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易项目地址https://gitcode.com/gh_mirrors/tq/tqsdk-python点击查看免费下载相关推荐TqSdk 企业版实战指南本地多策略拆分与 CTP/融航/O32/迅投多柜台直连详解TqSdk 企业版实战指南本地多策略拆分与 CTP/融航/O32/迅投多柜台直连详解 TqSdk 企业版Enterprise是 TqSdk 在专业版之外提金融科技tqsdk-python TqSdk 模块参考指南从 TqApi 核心接口到账户接入、指标与工具tqsdk python TqSdk 模块参考指南从 TqApi 核心接口到账户接入、指标与工具 本文围绕 doc/reference/index.rst h金融科技TqSdk 账户类型全解析从本地模拟到实盘交易的选型指南TqSdk 账户类型全解析从本地模拟到实盘交易的选型指南 TqSdk 围绕 TqApi account... 提供了从本地模拟 TqSim / TqSim金融科技创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考