news 2026/6/8 15:21:29

一个账户跑多个期货策略:仓位与报单隔离思路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一个账户跑多个期货策略:仓位与报单隔离思路

前言

资金有限时,很多团队想在一个期货资金账户上同时跑多套策略:A 做螺纹钢趋势,B 做铁矿石均值回归,C 做日内波段。国内期货交易所按合约记净持仓,账户里螺纹的 3 手就是 3 手,不会自动贴上“属于策略 A 还是 B”的标签。若两套逻辑共改同一symbol的目标仓,或各起一个进程各连同一TqAccount,就会出现 A 刚平、B 又开,或重复报单、拒单、持仓对不上。

天勤 TqSdk 在单TqApi、单资金账户下,每个具体合约通常只应有一个TargetPosTask实例管理净仓(官方约定:同一 symbol 重复创建 task 会报错)。多策略隔离的不是交易所账户,而是策略逻辑边界和“谁有权对哪个 symbol 调用 set_target_volume”。下面说明品种隔离、同品种汇总、多进程禁忌,以及TqMultiAccount到底解决什么问题。

一、先弄清几个容易混淆的名词

名词指什么多策略场景
TqApi天勤主连接对象,变量常写作 api单账户单进程通常一个实例
TqAccount期货公司实盘资金账户连接方式两进程各连同一账号会冲突
TargetPosTask把某 symbol 净仓调到目标值的工具每 symbol 单例
set_target_volume(n)设置目标净仓为 n 手多策略对同 symbol 必须先合并 n
TqMultiAccount天勤多资金账户并列模式是不同资金户,不是同户自动分仓
strategy_id团队自定的策略编号,写进日志对账与拒单率分策略统计
get_position柜台持仓真相汇总层也要以它核对

二、隔离方式对比(怎么选)

方式做法适用
品种隔离策略 A 只交易 rb 列表,B 只交易 i 列表最常见、最容易落地
手数预算每策略有 max_lots,汇总后再 set同品种多策略
进程隔离 + 中央汇总各策略出信号,主机进程合并复杂,要防竞态
多资金账户期货公司分账户或子账户最干净,成本高

很多初学者以为TqMultiAccount能在“一个资金户里自动分仓”,实际它是多个不同TqAccount并列给同一个TqApi,适合真的有两个资金账号,不适合“一个账号两套逻辑”。

三、品种隔离(推荐第一步)

配置文件写死归属,code review 禁止跨品种 set:

# 策略 A 配置:SYMBOLS_A = ["SHFE.rb2510"]task_rb=TargetPosTask(api,"SHFE.rb2510")# 策略 B 配置:SYMBOLS_B = ["DCE.i2509"]task_i=TargetPosTask(api,"DCE.i2509")

主循环里各策略模块只操作自己列表内的 task。账户级risk_ratio超阈值时,上层统一对所有 symbolset_target_volume(0)(见组合风控、emergency 专题)。

四、同品种多策略:必须加汇总层

若策略 A 和 B 都对SHFE.rb2510有意见,不能各创建一个 task,也不能各 set 一次。应设汇总模块:

sig_a=strategy_a_target()# 例如 +2sig_b=strategy_b_target()# 例如 -1raw=sig_a+sig_b target_rb=clamp(raw,-MAX_LOTS,MAX_LOTS)task_rb.set_target_volume(target_rb)log(strategy_id="merged",sig_a=sig_a,sig_b=sig_b,target=target_rb)

clamp限制在账户与风控允许范围内。汇总函数单独文件 + 单元测试,避免某策略改信号时忘了上限。

两策略信号相反时,净仓可能为 0,这是设计结果;若业务上要有优先级(A 覆盖 B),在汇总规则里写死,不要隐式竞争。

五、报单、日志与风控

  • 日志每条带strategy_idget_trade对账时按时间段与 symbol 归属。
  • 拒单率、无成交监控分策略统计,便于发现某一腿报单过频。
  • 天勤TqRiskRule系列(如报单频率限制)挂在TqApi层,对全账户生效,多策略共享额度,要统一规划。

六、切勿多进程抢同一 TqAccount

两个 Python 进程各TqApi(TqAccount(...))登录同一资金账号,报单、持仓查询会互相干扰,极易重复开仓或撤单冲突。要么单进程多策略(推荐),要么多资金账户,要么一进程一账户。

七、回测要与实盘同一汇总逻辑

TqBacktest里若回测“策略 A alone”,实盘却 A+B 汇总,曲线会对不上。回测阶段就应使用与实盘相同的merge_targets(),或明确标注“回测仅单策略”。

总结

一个账户跑多策略并非不能做,前提是先把“谁能改哪个仓、同品种如何合并、冲突时谁优先”这三件事写清楚。天勤的设计使得同一 symbol 下通常只应由唯一的任务或唯一的汇总结果负责最终 set_target_volume,因此多策略需要一个汇总层把各自信号合成目标仓位。TqMultiAccount解决的是不同资金账户并列的问题,不会在同一资金户下自动完成分仓隔离,所以更不能让多个进程抢同一个账户。把 OWNER 映射、汇总公式、以及冲突暂停规则都固化到文档与代码里,多个策略才能形成协同增益,而不是互相干扰。

FAQ

1)task 能指定 account 吗?

多账户模式下构造 task 时可指定 account;单账户默认操作全户净仓。

2)人工在 APP 改某一品种?

只同步该 symbol 的 target,见人工对账专题。

3)子策略崩溃,主进程还在?

子策略应用线程/进程间队列,崩溃不应留下半拉子 set;或全在一个进程里 try/except 隔离。

4)回测多策略资金共用?

TqSim 一个模拟户,汇总逻辑与实盘一致即可。

风险提示

以上内容用于架构设计参考,不构成投资建议。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 15:20:05

从一次线上金额比对Bug说起:手把手教你用BigDecimal.compareTo做可靠比较

从一次线上金额比对Bug说起:手把手教你用BigDecimal.compareTo做可靠比较凌晨三点,支付系统的告警铃声突然响起——某商户的结算金额比预期少了37.42元。这个看似微小的差异,最终让我们排查出整个系统中潜伏已久的金额比较逻辑缺陷。本文将带…

作者头像 李华
网站建设 2026/6/8 15:14:01

i.MX 8M嵌入式Linux开发:在Windows上配置VS与Eclipse远程调试环境

1. 项目概述与核心价值如果你正在为NXP i.MX 8M系列这类高性能嵌入式平台开发应用,并且厌倦了在简陋的文本编辑器、命令行和终端之间反复横跳,那么这篇文章就是为你准备的。在嵌入式Linux开发中,高效的编码、编译和调试流程能极大提升生产力&…

作者头像 李华
网站建设 2026/6/8 15:13:35

如何用Final2x轻松实现4倍图像超分辨率:完整免费指南

如何用Final2x轻松实现4倍图像超分辨率:完整免费指南 【免费下载链接】Final2x a cross-platform image super-resolution tool 项目地址: https://gitcode.com/gh_mirrors/fi/Final2x Final2x是一款功能强大的跨平台图像超分辨率工具,能够将低分…

作者头像 李华