当前位置: 首页 > news >正文

期货多合约策略目标持仓怎么更新才不乱

前言

一个策略同时做螺纹钢、铁矿石、豆粕时,最怕的是:A 合约信号还没执行完,B 合约又把全局变量覆盖了;或者两个TargetPosTask抢同一账户的净仓。多合约场景要把“每个 symbol 一条状态线”写进代码结构,而不是在一个position变量里搅在一起。

天勤TargetPosTask同一账户、同一合约保证单例(源码里用account_key + '#' + symbol做 key),适合一合约一 task。下面讲目标仓怎么维护、参数怎么隔离、以及和信号层的接口约定。

一、推荐的数据结构

为每个交易合约维护独立记录,例如:

字段含义
symbol如 SHFE.rb2510
target_vol策略给出的目标净仓(手)
last_signal_bar上次下单对应的 K 线时间,防重复
task对应的TargetPosTask实例

不要用单个全局target = 1表示“做多”,多合约会立刻乱套。

symbols=["SHFE.rb2510","DCE.i2509"]tasks={s:TargetPosTask(api,s)forsinsymbols}targets={s:0forsinsymbols}

二、TargetPosTask 单例规则(源码依据)

TargetPosTask元类说明:每个账户下每个合约只能有一个实例。重复创建时,若offset_priorityprice等参数不一致会直接抛错;参数一致则返回同一实例。

含义:

  1. 初始化时把priceoffset_priority定好,全程不要变
  2. 调仓只改set_target_volume,不要反复TargetPosTask(api, s, price=...)换参数
  3. 多账户模式要传account=,否则 task 挂在默认账户上

文档还强调:set_target_volume不会立刻下单,而是在后续wait_update里执行;多合约循环里必须保证每个合约 set 之后仍有足够的wait_update调用。

三、更新目标仓的节奏

原则:信号层只写targets[symbol],执行层统一在 wait_update 后应用。

whileTrue:api.wait_update()fors,klinklines.items():ifnotapi.is_changing(kl.iloc[-1],"datetime"):continuesig=calc_signal(kl)# 返回 -1, 0, 1 等ifsigisNone:continuetargets[s]=sig*LOTS[s]tasks[s].set_target_volume(targets[s])

避免在calc_signal里直接insert_order,多合约混用手写报单更难维护。

四、offset_priority 按品种配置

上期所等需要平今/昨的品种,常用offset_priority="今昨,开";股指平今贵时可设"昨开"。多合约策略应为不同 symbol 建不同 task(构造参数可 per-symbol),不要把上期所和股指共用一个 task 实例——它们本身就不是同一 symbol。

五、价差与对冲组合

双腿价差:两个 symbol、两个 task,目标仓成对变化(例如 leg1 +1、leg2 -1)。更新时同一帧内先算好两条腿目标,再依次set_target_volume,减少一条腿先成交、另一条腿还没动的敞口时间。

若用组合合约代码(如 SP),则按组合的一个 symbol 订行情和 task,逻辑与单合约相同,但代码写法不同,勿与双腿混用两套规则。

六、和 insert_order 的边界

官方要求:勿在同一合约上同时使用 TargetPosTask 与 insert_order。多合约若部分手写、部分 task,要按 symbol 划清界限,并在 code review 里禁止合并。

七、日志与核对

每个 symbol 单独打日志行:symbol, target, pos.pos, 活跃委托数。收盘后用get_position(s)targets[s]对照,发现偏差先查部分成交和 task 是否还在撤单改价。

总结

多合约策略应为每个 symbol 维护独立的target_volTargetPosTask和信号触发记录;利用 task 单例,构造参数一次定终身,调仓只set_target_volume。主循环里先wait_update,再按各合约 K 线datetime变化更新目标,避免全局变量共用。

价差腿成对更新目标仓;不要与 insert_order 混用。按 symbol 打日志和收盘核对,能快速发现单腿滞后。

FAQ

1)十个合约会创建十个后台任务吗?

每个 task 在 wait_update 时有机会发单,合约越多,单次循环工作量越大,必要时降频或合并无关合约。

2)能否一个 task 管多个合约?

不能,一个TargetPosTask只对应一个symbol

3)targets 与 position 不一致怎么办?

get_position为准排查成交;检查是否 set 后未 wait_update、或部分成交。

4)多账户怎么分?

每个账户一套 api 或传account=建 task,勿跨账户共用一个 task 字典。

风险提示

本文讨论仓位管理技术,不构成投资建议。

http://www.jsqmd.com/news/952388/

相关文章:

  • 2026年更新:山东地区铅房施工商综合实力与推荐解析 - 2026年企业资讯
  • 手把手教你用STM32CubeMX配置TIM2通道2做输入捕获(附代码和避坑点)
  • 从core文件命名到多线程堆栈导出:一份GDB调试Linux C/C++程序的避坑指南
  • 如何用Pixelorama零基础成为像素艺术创作高手:从入门到精通的完整指南
  • 2026年北京有名的砂石分离机制造厂深度分析:如何选择可靠合作伙伴 - 2026年企业资讯
  • 别再乱装PyTorch了!手把手教你用conda搞定CUDA 10.1 + PyTorch 1.7.1黄金组合(避坑cuDNN报错)
  • 2026年近期潮州高性价比不锈钢挂衣架生产商综合解析与选择指南 - 2026年企业资讯
  • 神经渲染可编辑性:从概念到产业,一文读懂未来3D内容创作新范式
  • 深入TMS320F28379D中断嵌套与优先级:如何设计高效可靠的实时控制程序
  • 手把手配置STM32H7的CAN FD:从CubeMX初始化到收发测试的避坑指南
  • 你的ARM设备也能运行Windows应用吗?Box64+Wine组合技揭秘
  • 元宝 LeetCode 2977. 转换字符串的最小成本 II C语言实现
  • 大模型|大模型中的RAG 的评估
  • 【AI工具产品路线图预测权威指南】:20年实战经验总结的5大关键信号与3年趋势推演模型
  • 别再只懂MSE了!PyTorch实战:用Smooth L1 Loss搞定目标检测中的边界框回归
  • VcXsrv魔法级配置:让Windows变身Linux图形工作站
  • Qwen3.6-Plus工程落地实战:国产编程模型如何支撑企业级Java/Python开发
  • 实战演练:基于快马ai快速构建电商后台商品数据库管理系统的全流程
  • ai辅助测试开发:让快马平台智能生成用户密码修改功能测试用例与代码
  • 手把手教你用TwinCAT 3为EtherCAT设备生成XML配置文件(附避坑指南)
  • 别再死记硬背了!用这4种方法搞定正激拓扑的磁复位,选型避坑指南
  • 客户拜访回来攒了7段对接短视频要转文字,这款短视频文字提取选手胜出适配2026提效需求
  • 2026年新消息:东莞诚信的圆瓶贴标机定做厂家选型指南与骐麟新创智能推荐 - 2026年企业资讯
  • RTX5凭啥通过汽车级安全认证?深入剖析其在STM32F407上的零中断延迟与确定性
  • 3分钟快速安装Figma中文界面插件:设计师人工翻译校验的终极指南
  • 告别重装!用Win32DiskImager给树莓派做“系统快照”,实现多设备一键部署
  • Kimi k2.6 LeetCode 2983. 回文串重新排列查询 Java实现
  • 别再在PyCharm里直接敲pip install了!SyntaxError报错的真正原因和3种正确安装姿势
  • 保姆级教程:用MATLAB处理CSV实测数据,从频谱到1/3倍频程的完整分析流程
  • 中小企业数字基建怎么选?兜客互动的一站式服务为何值得优先考虑