QMT中的多周期数据获取与对齐:避免未来函数
发布时间:8小时前阅读:6

许多策略需要同时使用不同周期的数据,例如用日线判断趋势,用60分钟线找入场点。在QMT中获取多周期数据时,最容易犯的错误是未来函数。本文讲解正确的对齐方法。
在QMT回测中,handle_bar是按你选择的主周期调用的。如果你选择日线,那么每次调用时,只能获取到当天及之前的数据。获取分钟线时,只能获取到当天已完成的分钟线(即如果当前是T日日线,分钟线只能取到T-1日收盘时的数据)。下面是正确获取多周期数据的示例。
假设主周期为日线,需要用到60分钟线判断趋势:
`python
def handle_bar(context):
获取日线数据(当前是T日)
daily_close = history_bars(context.stock, 20, '1d', 'close')
获取60分钟线数据,注意end_time设置为前一个交易日收盘,避免用到当天未完成数据
minute_data = get_market_data(['close'], stock_list=[context.stock], period='60m',
end_time=context.now - timedelta(days=1), count=50)
`
关键点:end_time设置为昨天,确保不会用到今天未完成的60分钟数据。如果你需要盘中使用实时分钟数据,可以将主周期设置为分钟线,然后在分钟线中获取日线数据(取前一天的日线)。
另一个常用技巧:使用get_kline_serial函数,它可以获取指定周期的K线序列,但注意最新一根K线可能未完成。可以通过参数include_now=False排除未完成K线。
多周期策略示例:日线MACD金叉时,等待60分钟线回踩不破,再开仓。代码逻辑:
`python
def handle_bar(context):
日线条件
daily_macd = get_macd('1d')
if daily_macd['dif'] > daily_macd['dea']:
60分钟线条件
minute_close = get_kline_serial(context.stock, 30, '60m', include_now=False)
if minute_close[-1] > ma(minute_close, 20)[-1]:
order_target_percent(context.stock, 0.5)
`
多周期数据对齐是量化开发中容易出错的地方。建议在回测中打印少量样本,手动验证数据日期是否正确。QMT官方文档有详细说明。
国金证券的QMT提供全面的多周期数据接口,10万资金即可开通。量化社群中有多周期策略的代码模板。同时,两融全线上办理,多周期策略同样适用于信用账户。正确对齐数据,你的回测结果才值得信赖。
温馨提示:投资有风险,选择需谨慎。
-
国常会力挺“六张网”,利好哪些板块?普通人如何稳健布局?
2026-05-18 15:52
-
REITs打新: 风电项目 ⌈中核新能⌋ 今日发售!点击领取认购操作指南~
2026-05-18 15:52
-
华泰AI涨乐APP超实用提示词分享,直接复制使用~
2026-05-18 15:52


问一问

+微信
分享该文章
