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

前言

资金有限时,很多团队想在一个期货资金账户上同时跑多套策略: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:

python 复制代码
# 策略 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 超阈值时,上层统一对所有 symbol set_target_volume(0)(见组合风控、emergency 专题)。

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

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

python 复制代码
sig_a = strategy_a_target()   # 例如 +2
sig_b = strategy_b_target()   # 例如 -1
raw = 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 一个模拟户,汇总逻辑与实盘一致即可。

风险提示

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

相关推荐
机汇五金_3 小时前
影响交换机箱体使用寿命的几个关键因素
运维·服务器·网络·python
子午3 小时前
基于DeepSeek的酒店客房管理系统~Python+DeepSeek智能问答+Vue3+Web网站系统
开发语言·前端·python
编程大师哥3 小时前
最高效的 IO 并发方案
linux·网络·python
Hello:CodeWorld3 小时前
Dify 从入门到实战:部署、模型对接与企业级 AI 应用开发全教程
人工智能·python·架构·ai编程
本地化文档3 小时前
black-docs-l10n
python·github·gitcode·sphinx
Dream_ksw3 小时前
Python 基础
开发语言·python
清水白石0083 小时前
从打印对象到高质量调试:彻底理解 Python 中 `__repr__` 和 `__str__` 的区别
开发语言·python
Sammyyyyy4 小时前
Google I/O 2026 Antigravity 更新解析与 SDK 实战指南
python·ai编程·servbay
嫂子的姐夫4 小时前
047-MD5:飞卢网
爬虫·python·js逆向·逆向