🚀 AI 一键生成 qmt 策略代码

QMT 平台获取不到最新 tick 数据怎么办?

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

问题描述

获取不到最新的tick数据

ContextInfo.start = '2025-01-22 09:30:00'
ContextInfo.end = '2025-05-08 15:00:45'
A.start_time = datetime.strptime(ContextInfo.start, "%Y-%m-%d %H:%M:%S")
A.end_time = datetime.strptime(ContextInfo.end, "%Y-%m-%d %H:%M:%S")
download_history_data("123056.SZ","tick","20250401093000","")
download_history_data("123089.SZ","tick","20250401093000","")
data_now = ContextInfo.get_market_data_ex(['lastClose','high','low','lastPrice','volume','amount','settle','preClose','suspendFlag'],['123056.SZ','123089.SZ'], period='tick',start_time=A.start_time.strftime("%Y%m%d%H%M%S"),end_time =A.end_time.strftime("%Y%m%d%H%M%S"), dividend_type='none',fill_data=False,subscribe = False)

下载数据后,为什么获取不到五月份的 tick 数据

解决方案

在 QMT 平台中获取不到指定的 tick 数据,通常由以下几个原因导致。针对您提供的代码,请按照以下步骤进行排查和修改:

1. 检查时间是否为“未来时间”

您代码中设置的结束时间是 2025-05-08。如果当前现实时间还未到 2025 年 5 月,交易所自然没有产生这些 tick 数据,您是无法获取到的。请确保您请求的时间段是已经发生的历史时间。

2. 数据下载的异步问题(最常见原因)

在 QMT 中,通过代码调用下载数据的函数(如 download_history_data,通常 QMT 原生 API 中没有直接暴露这个全局函数,可能是您封装的或使用了 XTQuant 的方法)通常是异步的。这意味着发出下载请求后,程序会立刻执行下一行代码,而此时数据可能还没有完全下载并保存到本地硬盘。

紧接着您调用了 ContextInfo.get_market_data_ex(..., subscribe=False)subscribe=False 表示只读取本地已有的数据。因为数据还没下载完,本地没有 5 月份的数据,所以返回为空。

解决方法

  • 手动补充数据:强烈建议在运行策略前,直接在 QMT 客户端的【数据管理】->【补充数据】中,手动勾选对应的品种和 tick 周期,将历史数据补充完整。
  • 开启订阅模式:如果您是在实盘/模拟盘中运行,可以将 subscribe=True。这样如果本地没有数据,系统会尝试向服务器订阅并获取。

3. 字段 (fields) 匹配问题

您在 get_market_data_ex 中传入了特定的字段列表:['lastClose','high','low','lastPrice','volume','amount','settle','preClose','suspendFlag']
在 QMT 的 tick 数据结构中,部分字段名称可能与您请求的不完全一致(例如 tick 数据通常包含 lastPrice, volume, amount, askPrice, bidPrice 等,但不一定包含 suspendFlaglastClose)。

解决方法
建议先将 fields 参数传入空列表 [],这样会返回该周期下所有支持的字段。您可以打印出来查看具体的列名,然后再按需提取。

# 建议的调试代码
data_now = ContextInfo.get_market_data_ex(
    fields=[],  # 先传空列表,获取所有字段
    stock_code=['123056.SZ','123089.SZ'], 
    period='tick',
    start_time=A.start_time.strftime("%Y%m%d%H%M%S"),
    end_time=A.end_time.strftime("%Y%m%d%H%M%S"), 
    dividend_type='none',
    subscribe=True  # 尝试开启订阅
)

print(data_now)

4. 回测模式下的时间轴限制

如果您是在回测模式下运行这段代码,ContextInfo.get_market_data_ex 获取的数据范围会受到当前 K 线时间(ContextInfo.barpos 对应的时间)的限制。回测时,策略无法“偷看”当前 K 线时间之后的 tick 数据。请确保您的主图周期和回测时间设置正确。

总结建议

  1. 确认请求的时间是历史已发生的时间。
  2. 提前在 QMT 客户端的【数据管理】中下载好 123056.SZ123089.SZ 的 tick 数据。
  3. fields 设为 [] 测试返回的数据结构。
  4. 如果是盘中运行,将 subscribe 改为 True