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

前言

资金有限时,很多团队想在一个期货资金账户上同时跑多套策略: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 一个模拟户,汇总逻辑与实盘一致即可。

风险提示

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

相关推荐
ikun_文2 小时前
Django框架路由Router的使用
python·pycharm·django
IvanCodes2 小时前
Python 基础语法(二):字符串与常用操作
python
昭昭日月明3 小时前
LangChain 生态:从链到代理,开发者需要掌握的三大核心
python·langchain·agent
Csvn3 小时前
🐍 Day 8:面向对象编程
后端·python
程序员天天困3 小时前
向量检索不准怎么办:混合检索与 Rerank 重排序召回优化实战
后端·python·ai编程
alphaTao4 小时前
LeetCode 每日一题 2026/8/24-2026/8/30
python·算法·leetcode
苏灿烤鱼4 小时前
当 AI Agent 遇见真实科学环境:深度拆解 Scientific Agent Skills,把"聊天机器人"变成"AI 科学家"
python·开源·agent
张文君4 小时前
ubuntu26.04坏道坏块分区隔离急速版260831-V0.12
linux·python
lupai15 小时前
手机在网状态接口实测效果与质量评估
大数据·python·智能手机·api接口
荷蒲16 小时前
【小白量化Qbuddy】用AI设计miniQMT指标公式计算量化平台
人工智能·python·机器人