期货量化5分钟信号30分钟过滤对不齐:天勤多周期 K 线共振写法

前言

多周期策略最常见的翻车,是 5 分钟已经金叉开多,30 分钟其实还在空头排列——因为两个周期的 K 线各算各的,没有在同一决策时点对齐。天勤 TqSdk 允许同时 get_kline_serial 订阅多个周期,但触发顺序、用哪根 bar 判定、谁先更新,都要在策略里写清楚。

回测里若用大周期“未来函数”式对齐,曲线往往过于好看;实盘用未完成 bar 或小周期抢先入场,又会出现方向频繁反复。问题不在多订几条 K 线,而在缺少“大周期方向状态变量”和统一的已收盘 bar 规则。

下面用“30 分钟定方向、5 分钟找入场”的趋势框架,给一套对齐写法。读完应能解释:为何要在 30 分钟 bar 切换时更新方向、为何 5 分钟只在方向允许时入场,以及如何抽查对齐是否正确。

一、订阅与触发顺序

from tqsdk import TqApi, TqAuth, TqSim, TargetPosTask

api = TqApi(TqSim(), auth=TqAuth("账户", "密码"))
symbol = "SHFE.rb2510"
kl5 = api.get_kline_serial(symbol, 300, data_length=200)    # 5分钟
kl30 = api.get_kline_serial(symbol, 1800, data_length=200)  # 30分钟
task = TargetPosTask(api, symbol)
dir30 = 0

def trend30(df):
    if len(df) < 32:
        return 0
    m8 = df.close.rolling(8).mean().iloc[-2]
    m21 = df.close.rolling(21).mean().iloc[-2]
    if m8 > m21:
        return 1
    if m8 < m21:
        return -1
    return 0

def entry5(df, direction):
    if direction == 0 or len(df) < 22:
        return 0
    # 示意:5分钟短均上穿长均才做多
    s = df.close.rolling(5).mean().iloc[-2]
    l = df.close.rolling(20).mean().iloc[-2]
    if direction > 0 and s > l:
        return 1
    if direction < 0 and s < l:
        return -1
    return 0

while True:
    api.wait_update()
    # 大周期更新时刷新方向;小周期更新时尝试入场
    if api.is_changing(kl30.iloc[-1], "datetime"):
        dir30 = trend30(kl30)
    if api.is_changing(kl5.iloc[-1], "datetime"):
        sig = entry5(kl5, dir30)
        task.set_target_volume(sig)

上面示例里 dir30 应用状态变量保存,避免未定义;生产代码应初始化为 0 并在 30 分钟 bar 切换时更新。要点是:大周期方向不必每根 5 分钟 K 线重算,但 5 分钟入场必须引用“最近一次已收盘的 30 分钟方向”。

二、统一用 iloc[-2] 已收盘 bar

两个周期都应使用已收盘 bar(如 iloc[-2])做信号,避免未完成 bar 抖动。否则会出现 5 分钟已入场、30 分钟收盘后方向反转的割裂。

周期角色更新触发
30 分钟过滤方向is_changing(kl30..., "datetime")
5 分钟入场时机is_changing(kl5..., "datetime")

三、data_length 分别估算

30 分钟均线周期若用到 21,则 kl30data_length 至少 21 + 缓冲;5 分钟同理。不要两个周期共用一个偏小的长度。

四、性能与订阅负担

每多一条 get_kline_serial 就多一份更新。品种不多时问题不大;多品种多周期时,应只在对应周期 bar 切换时计算指标,避免每帧对两条序列全量 rolling。

五、回测验证建议

固定一段行情,打印每次 5 分钟入场时的 dir30 与两根 30 分钟均线值,人工抽查是否一致。多周期策略最怕“看起来逻辑对、时点错了”。

总结

多周期共振的关键是时点与状态变量,不是多订几条 K 线。天勤支持多周期订阅,策略应固定“大周期更新方向、小周期在方向允许时入场”,并统一已收盘 bar 规则。

上线前建议导出一段行情,手工核对几次 5 分钟入场时刻的 30 分钟均线方向,作为回归用例。多周期越多,CPU 负担越高,应只在对应周期 bar 切换时重算指标。若再加 tick 入场,须在文档里写明与 K 线周期的优先级,避免三套时钟打架。

对齐做对了,多周期过滤才是真正降频;对齐做错了,只是增加复杂度而不增加胜率。

FAQ

1)能否用 tick 代替 5 分钟入场?

可以,但触发更频,需额外降频与时段过滤。

2)方向为 0 时是否平仓?

由策略定义:可以空仓观望,也可以维持原仓,需写进规则。

3)换月后两个周期会断吗?

换月后序列刷新,冷启动与 data_length 要重新满足。

4)三个以上周期怎么办?

仍建议一个主过滤周期 + 一个执行周期,周期过多易过拟合。

风险提示

本文用于期货量化技术实践讨论,不构成任何投资建议。多周期策略请充分样本外验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值