一个账户跑多个期货策略:仓位与报单隔离思路 前言资金有限时很多团队想在一个期货资金账户上同时跑多套策略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 必须先合并 nTqMultiAccount天勤多资金账户并列模式是不同资金户不是同户自动分仓strategy_id团队自定的策略编号写进日志对账与拒单率分策略统计get_position柜台持仓真相汇总层也要以它核对二、隔离方式对比怎么选方式做法适用品种隔离策略 A 只交易 rb 列表B 只交易 i 列表最常见、最容易落地手数预算每策略有 max_lots汇总后再 set同品种多策略进程隔离 中央汇总各策略出信号主机进程合并复杂要防竞态多资金账户期货公司分账户或子账户最干净成本高很多初学者以为TqMultiAccount能在“一个资金户里自动分仓”实际它是多个不同TqAccount并列给同一个TqApi适合真的有两个资金账号不适合“一个账号两套逻辑”。三、品种隔离推荐第一步配置文件写死归属code review 禁止跨品种 set# 策略 A 配置SYMBOLS_A [SHFE.rb2510]task_rbTargetPosTask(api,SHFE.rb2510)# 策略 B 配置SYMBOLS_B [DCE.i2509]task_iTargetPosTask(api,DCE.i2509)主循环里各策略模块只操作自己列表内的 task。账户级risk_ratio超阈值时上层统一对所有 symbolset_target_volume(0)见组合风控、emergency 专题。四、同品种多策略必须加汇总层若策略 A 和 B 都对SHFE.rb2510有意见不能各创建一个 task也不能各 set 一次。应设汇总模块sig_astrategy_a_target()# 例如 2sig_bstrategy_b_target()# 例如 -1rawsig_asig_b target_rbclamp(raw,-MAX_LOTS,MAX_LOTS)task_rb.set_target_volume(target_rb)log(strategy_idmerged,sig_asig_a,sig_bsig_b,targettarget_rb)clamp限制在账户与风控允许范围内。汇总函数单独文件 单元测试避免某策略改信号时忘了上限。两策略信号相反时净仓可能为 0这是设计结果若业务上要有优先级A 覆盖 B在汇总规则里写死不要隐式竞争。五、报单、日志与风控日志每条带strategy_idget_trade对账时按时间段与 symbol 归属。拒单率、无成交监控分策略统计便于发现某一腿报单过频。天勤TqRiskRule系列如报单频率限制挂在TqApi层对全账户生效多策略共享额度要统一规划。六、切勿多进程抢同一 TqAccount两个 Python 进程各TqApi(TqAccount(...))登录同一资金账号报单、持仓查询会互相干扰极易重复开仓或撤单冲突。要么单进程多策略推荐要么多资金账户要么一进程一账户。七、回测要与实盘同一汇总逻辑TqBacktest里若回测“策略 A alone”实盘却 AB 汇总曲线会对不上。回测阶段就应使用与实盘相同的merge_targets()或明确标注“回测仅单策略”。总结一个账户跑多策略并非不能做前提是先把“谁能改哪个仓、同品种如何合并、冲突时谁优先”这三件事写清楚。天勤的设计使得同一 symbol 下通常只应由唯一的任务或唯一的汇总结果负责最终 set_target_volume因此多策略需要一个汇总层把各自信号合成目标仓位。TqMultiAccount解决的是不同资金账户并列的问题不会在同一资金户下自动完成分仓隔离所以更不能让多个进程抢同一个账户。把 OWNER 映射、汇总公式、以及冲突暂停规则都固化到文档与代码里多个策略才能形成协同增益而不是互相干扰。FAQ1task 能指定 account 吗多账户模式下构造 task 时可指定 account单账户默认操作全户净仓。2人工在 APP 改某一品种只同步该 symbol 的 target见人工对账专题。3子策略崩溃主进程还在子策略应用线程/进程间队列崩溃不应留下半拉子 set或全在一个进程里 try/except 隔离。4回测多策略资金共用TqSim 一个模拟户汇总逻辑与实盘一致即可。风险提示以上内容用于架构设计参考不构成投资建议。