问题描述
原有的交易策略是日线,是不是可以用在 15 分钟的周期去交易?在改动什么吗?
解决方案
是的,完全可以用同样的交易逻辑在不同的周期去交易。在 QMT 平台中,将原有的日线策略应用到 15 分钟周期是非常方便的。
QMT 平台的模型是**数据驱动(逐 K 线运行)**的,handlebar(ContextInfo) 函数会在每根 K 线上被调用一次。因此,如果主图周期变成了 15 分钟,策略就会每 15 分钟执行一次逻辑。
要将日线策略改为 15 分钟周期,您主要需要做以下几个方面的改动和确认:
1. 界面设置的改动(最基础)
在 QMT 的【策略编辑器】右侧的基本信息面板中,找到 默认周期,将其从“日线”修改为“15分钟线”。
注:如果在回测模式下,还需要在“回测参数”或主图行情界面将周期切换为 15 分钟。
2. 代码层面的改动(检查数据获取函数)
检查您的 Python 代码中是否“写死”了周期参数。主要检查以下几个函数:
ContextInfo.get_market_data()或ContextInfo.get_history_data()
如果您在获取数据时,period参数写死了'1d',需要将其改为'15m',或者更推荐的做法是改为动态获取当前主图周期:# 错误示范(写死了日线): # df = ContextInfo.get_market_data(['close'], stock_code, period='1d') # 正确示范1(直接改为15分钟): df = ContextInfo.get_market_data(['close'], stock_code, period='15m') # 正确示范2(动态跟随主图周期,推荐): current_period = ContextInfo.period # 如果主图是15分钟,这里会返回 '15m' df = ContextInfo.get_market_data(['close'], stock_code, period=current_period)
3. 策略参数的重新调优(逻辑层面)
虽然代码逻辑可以无缝迁移,但金融市场的特性在不同周期下差异很大。日线级别的参数在 15 分钟级别通常不再适用,需要重新回测调优:
- 均线/指标周期:日线策略中的 20 日均线代表近一个月的趋势;如果在 15 分钟线用 20 周期均线,它只代表过去 5 个小时(20 * 15分钟)的趋势。您可能需要成倍放大参数(例如改为 320 周期)或者寻找适合 15 分钟级别的新参数。
- 滑点与手续费影响:15 分钟周期的交易频率通常远高于日线,这意味着交易成本(手续费和滑点)对策略收益的侵蚀会显著增加。在回测 15 分钟策略时,务必在
ContextInfo.set_commission()和ContextInfo.set_slippage()中设置真实的费率,以验证策略在扣除成本后是否依然盈利。 - 日内效应:15 分钟策略会受到开盘(9:30-10:00)和尾盘(14:30-15:00)剧烈波动的影响,可能需要增加时间过滤条件(例如:
if current_time > '14:45:00': 不开新仓)。
总结:在 QMT 中跨周期运行策略在技术实现上非常简单,只需改动 UI 设置和数据接口的 period 参数(改为 '15m')即可;但从量化研究的角度,务必重新进行回测和参数优化。