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

发布时间:2026/6/5 2:34:20

期货多合约策略目标持仓怎么更新才不乱 前言一个策略同时做螺纹钢、铁矿石、豆粕时最怕的是A 合约信号还没执行完B 合约又把全局变量覆盖了或者两个TargetPosTask抢同一账户的净仓。多合约场景要把“每个 symbol 一条状态线”写进代码结构而不是在一个position变量里搅在一起。天勤TargetPosTask对同一账户、同一合约保证单例源码里用account_key # symbol做 key适合一合约一 task。下面讲目标仓怎么维护、参数怎么隔离、以及和信号层的接口约定。一、推荐的数据结构为每个交易合约维护独立记录例如字段含义symbol如 SHFE.rb2510target_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_priority、price等参数不一致会直接抛错参数一致则返回同一实例。含义初始化时把price、offset_priority定好全程不要变调仓只改set_target_volume不要反复TargetPosTask(api, s, price...)换参数多账户模式要传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):continuesigcalc_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_vol、TargetPosTask和信号触发记录利用 task 单例构造参数一次定终身调仓只set_target_volume。主循环里先wait_update再按各合约 K 线datetime变化更新目标避免全局变量共用。价差腿成对更新目标仓不要与 insert_order 混用。按 symbol 打日志和收盘核对能快速发现单腿滞后。FAQ1十个合约会创建十个后台任务吗每个 task 在 wait_update 时有机会发单合约越多单次循环工作量越大必要时降频或合并无关合约。2能否一个 task 管多个合约不能一个TargetPosTask只对应一个symbol。3targets 与 position 不一致怎么办以get_position为准排查成交检查是否 set 后未 wait_update、或部分成交。4多账户怎么分每个账户一套 api 或传account建 task勿跨账户共用一个 task 字典。风险提示本文讨论仓位管理技术不构成投资建议。

相关新闻