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

QMT 平台为什么获取不到最新的 Tick 数据?

qmt | 发布时间: 2026/5/27
以下内容由 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. 数据下载是异步的(最常见原因)

如果您使用的 download_history_data 是基于 xtdata 模块的下载函数,该函数默认是异步执行的。这意味着代码触发下载请求后,会立刻执行下一行代码 ContextInfo.get_market_data_ex,而此时数据根本还没有下载到本地硬盘。

解决方法
在策略中不建议直接混用下载和读取。正确的做法是:

  • 手动补充:在 QMT 终端右下角的“数据管理” -> “补充数据”中,手动勾选对应的品种和 tick 周期,补充所需时间段的数据。
  • 同步等待:如果必须用代码下载,请确保使用回调函数或循环检查数据是否下载完毕后再进行读取。

2. 券商服务器的 Tick 数据保留期限

Tick 数据的数据量非常庞大,绝大多数券商的 QMT 服务器不会保留长期的历史 Tick 数据。通常情况下,服务器只保留最近 1 个月到 3 个月的 Tick 数据。如果您尝试下载距离当前时间较远的五月份数据,服务器上可能根本没有这些数据,因此下载操作实际上没有获取到任何内容。

解决方法

  • 在 QMT 终端的“数据管理”中尝试手动补充该时间段的 Tick 数据,观察是否有进度条和数据量提示。如果提示“无数据”或瞬间完成且数据量为0,说明服务器端已不提供该时段的 Tick 数据。
  • 对于长期的历史回测,建议使用 1m(一分钟)数据代替 tick 数据。

3. subscribe=False 参数的限制

在您的代码中,ContextInfo.get_market_data_ex 的参数设置了 subscribe=False。这表示该函数仅从本地硬盘读取数据,不会向服务器发起实时请求。如果前面的下载步骤失败或未完成,本地没有数据,该函数就会返回空。

4. 时间参数格式问题

虽然您使用了 strftime("%Y%m%d%H%M%S") 进行了格式化,但请确保传入 get_market_data_exstart_timeend_time 严格符合 QMT 的要求(通常为 YYYYMMDDYYYYMMDDHHMMSS 字符串)。

总结建议流程

  1. 验证数据源:先不要用代码,直接去 QMT 客户端的【数据管理】里,手动补充 123056.SZ123089.SZ 在 2025年4月到5月的 Tick 数据,看能否补充成功。
  2. 修改读取代码:确认本地有数据后,再运行 ContextInfo.get_market_data_ex 进行读取。
  3. 实盘/模拟获取最新 Tick:如果是为了获取当天的最新 Tick,不需要调用 download_history_data,直接将 subscribe=True,或者使用 ContextInfo.get_full_tick() 获取最新快照。