期货策略 tick 与 K 线一起用:订阅顺序与触发规则怎么定 前言国内期货行情有两层常用粒度一是 tick每笔或每次盘口更新在 quote 的last_price、买卖价量上体现二是 K 线按 1 分钟、5 分钟等把价格合成 OHLC表里有datetime列标记每根 bar 的时间。有的策略“大方向看 5 分钟 K 线入场看 tick 突破”有的“K 线收盘定方向下单看对价盘口”。若两套节奏没有写进文档就会出现K 线还没收盘 tick 已开仓、或 K 线已信号 tick 过滤又把单挡住两套逻辑互相打架。下面说明在同一策略里同时用 tick 与 K 线时先订什么、谁触发谁、主循环怎么组织基于天勤 TqSdk 的get_quote与get_kline_serial并给出可落地的分层触发示例。一、先理解两个数据从哪来quoteapi.get_quote(SHFE.rb2510)# tick/盘口级字段随 wait_update 更新klapi.get_kline_serial(SHFE.rb2510,300,data_length200)# 300秒5分钟K线quotelast_price、bid_price1、ask_price1等在交易时段随成交和挂单变化。kl每一行一根 K 线datetime由行情服务写入当新 5 分钟 bar 生成时最后一行datetime会变配合is_changing判断。两者都依赖api.wait_update()才会更新没有 wait_update任何一层都是旧数据。二、订阅顺序先 quote 再 K 线或反之天勤里订阅顺序通常不强制但建议在策略启动时一次性订齐本策略需要的 quote 与 kl并至少一次wait_update()等到有效datetime和非 nan 的last_price再进入主循环。避免在循环里反复新建订阅。多合约时每个 symbol 各一对quotekl不要共用一个 quote 变量。三、推荐分层触发明确主从原则K 线层定“是否允许交易方向”tick 层定“是否在这一刻下单”。示例流程5 分钟趋势 tick 对价过滤仅当is_changing(kl.iloc[-1], datetime)时用iloc[-2]更新方向缓存allow_long/allow_short。每个循环wait_update后若方向不允许直接 continue不读 tick 下单逻辑。若方向允许再用is_changing(quote, last_price)或盘口价差判断满足才set_target_volume。bias{long:False,short:False}whileTrue:api.wait_update()ifapi.is_changing(kl.iloc[-1],datetime):# 用 [-2] 更新 5 分钟趋势 biasc,mkl.close.iloc[-2],tafunc.ma(kl.close,20).iloc[-2]bias[long]cm bias[short]cmifnot(bias[long]orbias[short]):continueifapi.is_changing(quote,last_price):spreadquote.ask_price1-quote.bid_price1ifspread2*quote.price_tick:continue# 点差过大不下ifbias[long]:task.set_target_volume(1)切忌用每个 tick 重算 5 分钟均线应用上一节的 datetime 触发切忌K 线未更新方向却每个 tick 开平仓。四、tick 级策略若也要参考 K 线若主逻辑是 tickK 线只作过滤例如“只在 5 分钟均线多头时做 tick 突破”仍应 K 线 datetime 变时更新缓存tick 触发时只读缓存不要每 tick 重算整段 K 线指标。五、执行层注意TargetPosTask在wait_update里发单tick 触发频繁时避免每个 tick 都set_target_volume改目标会频繁撤单。可设“本 5 分钟 bar 只 set 一次”或“目标不变不重复 set”。总结tick 和 K 线并用本身没有问题问题通常出在两套节奏缺少明确主从关系最后导致重复触发或错过该做与不该做的时机。把 K 线放在“方向/过滤”层用 datetime 变更来更新缓存把 tick 放在“进入/执行”层用 quote 字段做当前时点的细节判断并在同一个 wait_update 主循环里串起来。这样一来策略的行为会从“看起来很忙”变成“有节奏、可复盘”你能解释为什么某分钟触发、为什么某 tick 没触发也能在回放与实盘对照时快速定位差异来自哪里。FAQ1dur_sec0 是 tick 吗实时用 quote历史 tick 下载见 DataDownloader 的 dur_sec0专业版能力。2能否只订 K 线不订 quote执行要价格时仍建议订 quote尤其用 ACTIVE 对价下单。3多周期 K 线 tick每个周期独立 datetime 缓存再统一 tick 入场见多周期专题。4回测 tickK 线逻辑可一致回测帧密度与实盘不同需模拟验证。风险提示本文讨论程序结构不构成投资建议。