QMT中的多周期数据获取与对齐:避免未来函数
发布时间:2026-5-18 15:38阅读:127

许多策略需要同时使用不同周期的数据,例如用日线判断趋势,用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万资金即可开通。量化社群中有多周期策略的代码模板。同时,两融全线上办理,多周期策略同样适用于信用账户。正确对齐数据,你的回测结果才值得信赖。
温馨提示:投资有风险,选择需谨慎。
-
REITs扩募是什么?普通人能参与吗?附APP实操指南
2026-06-17 17:19
-
理财问答选哪个?知乎vs叩富问财全面对比,一文搞懂
2026-06-17 17:19
-
@所有人,2026年端午节A股休市安排出炉!
2026-06-17 17:19


问一问

+微信
分享该文章
