☰
TqSdk 本地众期多策略系统实战指南:用 TqTradingUnit 在单一实盘账户下隔离运行多个策略
2026/10/14 16:03:51 网站建设 项目流程
  • 金融科技

【免费下载链接】tqsdk-python

天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易

项目地址:https://gitcode.com/gh_mirrors/tq/tqsdk-python
点击查看免费下载

对于一个期货实盘账户同时运行多个策略的场景,多个策略交易同一标的时会出现持仓归属不清、绩效无法归因的问题。天勤量化(tqsdk-python)在企业版中提供了本地众期多策略系统:把同一个实盘账户在本地拆分为多个策略(前端账户),各策略的持仓、委托、资金与盈亏相互隔离且跨交易日有效,并通过TqTradingUnit账户对象让策略代码像登录普通账户一样登录前端账户。读完本文,你将掌握本地环境的初始化、Web 管理页的多策略组配置、TqTradingUnit登录与源码层面的连接机制、异常委托的处置规则,以及日志导出和环境重置等运维操作。

一、多策略系统要解决的问题与整体方案

多策略系统的背景在 企业版文档 中有明确说明:随着对收益曲线稳定的追求,较多用户需要在一个账户下运行多个策略;当多个策略交易同一标的时,就面临不同策略的持仓管理、绩效归因等问题。

本地众期多策略系统的方案要点(见 多策略使用手册):

  • 支持用户在本地将一个实盘账户拆分为多个策略(多个前端账户),每个策略的交易数据相互隔离,且跨日有效;
  • 提供多策略的管理界面,可可视化观察各个策略的持仓、委托、资金和盈亏情况;
  • 支持以策略维度(前端账户)登录快期专业版进行管理与交易。

需要注意的前提:该功能属于TqSdk 企业版能力,企业版说明 中写明企业版支持直连 CTP/融航/杰宜斯等柜台,与专业版的区别主要在柜台支持方式;使用前需按企业版流程申请试用或购买。

系统配置要求

组件要求
Windows>= Windows 10
Linux>= Ubuntu 22.04
tqsdk>= 3.8.0(当前仓库版本为 3.10.1,见 tqsdk/version.py)
快期专业版>= 2504.659

二、安装与本地环境初始化

安装 tqsdk-zq

使用本地众期多策略系统需要安装tqsdk-zq包,用来初始化本地环境:

pip install tqsdk-zq

对于 Windows 用户,还需要安装 Microsoft Visual C++ Redistributable(x64 版vc_redist.x64.exe,可从微软官方渠道获取),这是本地众期服务端进程在 Windows 上运行的运行库依赖。

初始化本地环境

tqsdk-zq init --kq-name=xx --kq-password=xx --web-port=xx

参数说明:

参数是否必填说明
--kq-name必填快期账户
--kq-password必填快期密码
--web-port可选多策略管理页端口,不指定时使用默认端口

初始化行为要点:

  • 初始化完成后,控制台会输出多策略管理页的账户、密码以及网址,默认账户密码均为admin;
  • 后续跨交易日、重启电脑后不需要再执行初始化步骤,直接运行 Python 策略代码即可;
  • 初始化后打开浏览器访问控制台输出的网址,进入众期管理页。

打印/拉起多策略控制台地址

tqsdk-zq web

适用场景:

  • 机器重启后或网页打不开了,执行该命令重新拉起进程,控制台会输出管理页网址;
  • web 管理端在跨交易日后,需要重新执行tqsdk-zq web拉起。

源码印证:策略进程如何拉起本地众期服务

tqsdk-zq init会在用户主目录生成配置文件~/.tqsdk/zq/config/zq.json(记录td_url与 Python 解释器路径)。策略代码通过TqApi启动交易连接时,TqConnect会根据连接地址的 scheme 自动拉起本地众期进程,相关实现如下:

  • tqsdk/connect.py:当交易地址的 scheme 以zq开头时创建ZqContext,以zqotg开头时创建ZqOtgContext,并通过cm.get_url(url_info)解析出真实的 websocket 地址后再建连;
  • tqsdk/zq.py:ZqContext.get_url读取~/.tqsdk/zq/config/zq.json中的td_url与interpreter,然后以子进程方式执行python -m tqsdk_zq.cli start拉起本地众期服务(Windows 与非 Windows 平台分别用subprocess.Popen和asyncio.create_subprocess_exec实现)。进程返回码非 0 时抛出TqContextManagerError;配置文件缺失或损坏时,会明确提示"加载配置文件失败,请尝试重新初始化: tqsdk-zq init"。

这也解释了文档中"重启电脑后不用再执行初始化"的原因:策略进程每次启动时会自动尝试拉起本地众期服务;而 web 管理端不随策略进程启动,因此跨交易日后需要手动执行tqsdk-zq web。

三、访问众期管理页:配置多策略组

在管理页完成策略组配置的核心步骤:

  1. 在运维和日常管理页添加组;
  2. 在组中选择模式为多策略;
  3. 在策略组中,选择账户及交易模式,然后点击右侧的+号,添加后端账号(实盘账户或 simnow 账户);
  4. 继续点击+号添加前端账户(多策略)并设置入金金额;
  5. 如果后端账户已有持仓,则需要在资金监控和强平强撤页的持仓明细中,把持仓分配到各个前端账户。

"后端账户—前端账户"的层级关系可以理解为:后端账户是真正对接期货公司柜台的资金与持仓载体,前端账户是分配了入金额度后的策略子账户;策略代码登录的正是前端账户。

四、使用 TqTradingUnit 登录前端账户

策略侧登录前端账户只需两行核心代码(注意:在天勤中登录前端账户时,只需输入账户名,不用输入前端账户密码):

from tqsdk import TqApi, TqTradingUnit, TqAuth # 在天勤中登录前端账户时,只用输入账户名即可,不用输入前端账户密码 account = TqTradingUnit(account_id="前端账户号") api = TqApi(account, auth=TqAuth("快期账户", "账户密码"))

TqTradingUnit支持tags参数用于策略标签:

from tqsdk import TqApi, TqTradingUnit, TqAuth account = TqTradingUnit(account_id="众期子账户", tags=["铜品种策略", "套利策略"]) api = TqApi(account, auth=TqAuth("快期账户", "账户密码"))

参数与实现细节(源码级)

TqTradingUnit的定义在 tqsdk/tradeable/otg/tqtradingunit.py,可从源码确认以下事实:

  • 参数:account_id(必填,众期子账户/前端账户号);tags(可选,策略标签列表,默认为调用TqTradingUnit的文件名及account_id,见_convert_tags中使用inspect.stack()取调用方文件名的实现);
  • 内部固定值:broker_id=""、password="tqsdk_zq"、td_url="zq://localhost/",即前端账户无需密码,交易地址固定指向本地众期服务,与第二节的zqscheme 自动拉起机制正好衔接;
  • 登录包:_send_login_pack发送aid=req_login、bid=tqsdk_zq的登录请求,携带user_name(前端账户号)与tags,因此策略标签会随登录传入众期系统,便于管理端识别策略来源;
  • 账户标识:_get_account_key返回md5(account_id + td_url),用作该账户在 tqsdk 内部的唯一键;
  • 能力范围:该类继承BaseOtg与FutureMixin(见 tqsdk/tradeable/otg/tqtradingunit.py),从源码结构看其面向期货类账户的交易能力;_account_auth中feature="tq_trading_unit"标识了该账户类型,auto_add=False表示不会被自动加入默认账户。

TqTradingUnit在 API 层的暴露情况:

  • 由 tqsdk/tradeable/otg/init.py 导出,并通过 tqsdk/init.py 直接从tqsdk顶层包导入;
  • tqsdk/api.py 中TqApi的账户类型UnionTradeable包含TqTradingUnit,即它可以作为TqApi(account, auth=...)的账户参数使用;
  • tqsdk/multiaccount.py 的TqMultiAccount多账户列表同样支持TqTradingUnit实例,可以在一个TqApi下组合多个前端账户与其他账户;多账户模式下insert_order、set_target_volume等函数必须显式指定account参数;
  • 风控规则相关接口(tqsdk/risk_rule.py)的account参数说明中也列出了TqTradingUnit,多账户模式下需指定发送下单指令的账户实例。

与"多实例运行策略"方案的关系

如果多个策略不交易同一标的,官方还准备了更轻量的方案——多进程或多异步任务运行同一策略的不同实例(见 交易策略的多实例运行)。而本地众期多策略系统解决的是同一账户、同一标的下多策略的持仓归属与绩效归因问题,两者的定位不同,可对照选择。

五、异常委托分配

异常委托是众期多策略特有的概念,处置规则如下:

  • 使用众期多策略交易后,系统默认该后端账户下的所有交易指令均由前端账户发出;当后端账户发出了某笔委托而未指定前端账户时,该委托会被归类为异常委托范围(例如人工在快期专业版后端账户上直接下单);
  • 当系统存在异常委托时,会每隔固定时间向前端账户推送通知,提醒用户将异常委托分配到具体前端账户;
  • 如果本交易日未进行分配,会导致下一个交易日众期系统初始化失败;
  • 下一交易日因此初始化失败后,前端账户的持仓将都会被清空,用户需要重新从后端账户往前端账户分配持仓。

实践建议:凡是在后端账户维度发生的人工交易、改单或外部委托,当天就应在管理页完成异常委托归属分配,避免跨日后持仓被清空带来手工重建持仓的额外风险。

六、在快期专业版中登录多策略(前端账户)

如需以策略维度登录快期专业版管理或交易前端账户:

  1. 点击左上角交易按钮中的"配置众期服务器";
  2. 在备注项设置站点名称,服务器地址项设置本地交易地址:本地交易地址为ws://localhost,端口号在用户不设置的情况下默认为 8342;
  3. 在登录站点列表中选择刚刚添加的站点登录。

七、日志导出与重置本地环境(补充运维操作)

以下内容补充自 进阶版多策略手册,供问题排查与环境重建时使用。

日志导出

遇到使用问题时,可点击管理页面左下角"日志导出"按钮导出日志,再打包日志目录发送以便排查。日志目录为~/.tqsdk/zq/log:

Linux:

tar -czf ~/tqsdk_zq_log.tar.gz -C ~ .tqsdk/zq/log

Windows(PowerShell):

cd $env:USERPROFILE tar -czf tqsdk_zq_log.tar.gz .tqsdk/zq/log

重置本地环境

若想彻底清空本地数据重新开始,需先停止本地众期相关进程再删除数据目录(~/.tqsdk/zq),删除后重新执行tqsdk-zq init初始化。Linux 下相关进程包括zq_server_history_go、service_daemon、sock-proxy、postgres;Windows 下对应zq_server_history_go.exe、service_daemon.exe、sock-proxy.exe、postgres.exe。具体命令以 进阶手册中的"重置本地环境"小节 为准,注意该操作会删除全部本地多策略数据。

从 tqsdk/zq_otg.py 与 tqsdk/zq.py 的目录常量可以印证:本地众期服务的数据、日志、配置均集中存放在用户主目录的~/.tqsdk/zq/下(配置为~/.tqsdk/zq/config/zq.json),这既是日志导出路径的来源,也是重置环境时删除目标所在。

八、其他事项

来自 多策略使用手册 的边界说明:

  • 在众期多策略系统中添加实盘账户时,仍然占用企业版 3 个实盘账户的名额,如需额外购买实盘账户名额需联系天勤商务;
  • 多策略的拆分和运行均在本地,不支持跨电脑使用多策略功能(与~/.tqsdk/zq/本地数据及zq://localhost/的连接方式一致);
  • 如需删除前端账户,需要先清除持仓(平仓,或者通过持仓划转),然后将出入金转出,才可以删除。

九、版本升级与变更记录

升级多策略功能所有依赖包使用:

pip install -U --upgrade-strategy eager tqsdk-zq

手册中记录的版本变更(节选自 doc/tq_trading_unit.rst):

日期tqsdk-zqtqsdk-zq-server其他包变更内容
2025/12/101.0.31.0.6history 1.0.0 / pgserver 1.0.0 / proxy 1.0.0修复:撤单失败的问题
2025/06/161.0.31.0.5history 1.0.0 / pgserver 1.0.0 / proxy 1.0.0新增:历史结算信息查询功能
2025/06/031.0.21.0.4pgserver 1.0.0 / proxy 1.0.0修复:快期模拟添加进用户实盘账户列表
2025/04/291.0.21.0.3pgserver 1.0.0 / proxy 1.0.0修复:与本地其他 postgres 进程端口冲突、持仓划转失败、风控规则高级模式未正确传递 enable 参数的问题

从变更历史也可以看出该系统的技术构成:本地运行有server(服务)、history(历史结算)、pgserver(本地 PostgreSQL,用于数据存储)、proxy(代理)等多个组件,这也与"重置本地环境"时需要停止 postgres 等进程的操作相呼应。

小结

本地众期多策略系统的完整使用链路为:pip install tqsdk-zq安装 →tqsdk-zq init初始化本地环境 →tqsdk-zq web拉起管理页(跨交易日需重复)→ 管理页配置"后端账户 + 前端账户 + 入金/持仓分配" → 策略代码用TqTradingUnit(account_id="前端账户号")登录前端账户后照常编写交易逻辑。源码层面,TqTradingUnit固定使用zq://localhost/交易地址,TqConnect识别该 scheme 后由ZqContext自动拉起本地众期进程并完成登录,使得策略侧代码无需关心本地服务细节;同时务必关注异常委托的当日分配要求,避免跨日后前端账户持仓被清空。

  • 金融科技

【免费下载链接】tqsdk-python

天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易

项目地址:https://gitcode.com/gh_mirrors/tq/tqsdk-python
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询