🚀 AI 一键生成 qmt 策略代码
立即体验
👉 AI 生成代码 👈

QMT量化交易:如何将日线策略无缝切换至15分钟周期运行?

qmt | 发布时间: 2026/5/29
以下内容由 EasyQuant 生成。

问题描述

用同样的交易策略,是不是可以在不同的周期去交易?

原有的交易策略是日线,是不是可以用在 15 分钟的周期去交易?在改动什么吗?

解决方案

在 QMT 量化平台中,同一个交易策略是完全可以在不同的周期(如从日线切换到 15 分钟线)去运行和交易的。QMT 的运行机制是基于 K 线驱动的,即每走完一根 K 线(无论是日线还是 15 分钟线),系统都会调用一次 handlebar(ContextInfo) 函数。

如果您想将原有的日线策略用在 15 分钟周期上,通常需要从以下几个方面进行检查和改动:

1. 界面设置的改动

最直接的改动是在 QMT 软件界面上:

  • 策略编辑器设置:在策略编辑器的【基本信息】面板中,将默认周期从“日线”修改为“15分钟线”。
  • 运行/回测界面:在点击“运行”或“回测”前,确保当前行情主图的周期已切换为 15 分钟,或者在回测参数中明确指定周期为 15 分钟。

2. 代码层面的改动

如果您的代码编写得比较规范(动态获取周期),可能一行代码都不用改。但如果存在硬编码,则需要修改:

A. 数据获取接口的周期参数

如果您在代码中使用了 ContextInfo.get_market_data_exContextInfo.get_history_data 获取数据,请检查 period 参数:

  • 错误示范(硬编码)period='1d'。这会导致即使主图是 15 分钟,获取的依然是日线数据。
  • 正确示范(动态跟随):将 period 设置为 'follow'(跟随主图周期),或者使用 ContextInfo.period 动态传入。
# 推荐写法:使用 'follow' 让数据周期自动跟随主图周期(如15分钟)
def handlebar(ContextInfo):
    # 获取当前主图周期的数据
    data = ContextInfo.get_market_data_ex(
        ['open', 'high', 'low', 'close'], 
        [ContextInfo.stockcode], 
        period='follow', # 自动跟随界面设置的周期
        count=20
    )

B. 定时执行逻辑(如果有)

如果您的日线策略中使用了 do_order() 配合时间判断(例如判断 14:55:00 尾盘下单),在 15 分钟周期下,这种基于特定时间点的逻辑可能需要重写,因为 15 分钟线的 Bar 结束时间是 09:45, 10:00 等。

3. 策略逻辑与参数的优化(关键)

虽然代码可以无缝切换,但金融市场的逻辑在不同周期下差异巨大,您必须重新评估策略参数:

  • 指标参数失效:日线级别的 MA5(5日均线)代表一周的交易成本;而在 15 分钟线上,MA5 只代表过去 75 分钟的成本。您可能需要将参数调整为 MA16(代表一天 4 小时共 16 个 15 分钟 Bar)等。
  • 交易频率与成本:15 分钟周期的信号频率远高于日线。原本在日线盈利的策略,在 15 分钟线上可能会因为频繁交易产生大量的手续费和滑点,导致策略亏损。务必在回测时设置真实的滑点和手续费(使用 ContextInfo.set_commissionContextInfo.set_slippage)。
  • 隔夜风险:15 分钟策略可能会在临近收盘时发出买入信号,导致被动持仓过夜。如果不想隔夜,需要在代码中增加时间过滤(如 if current_time > '14:45:00': 不开新仓)。

总结

技术上:只需在界面切换周期,并确保代码中的数据获取函数使用 period='follow' 即可。
策略上:必须重新进行回测,调整技术指标参数,并严格评估高频交易带来的手续费磨损。