🚀 AI 一键生成 qmt 策略代码

QMT平台download_history_data取不到当天Tick数据怎么办?

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

问题描述

download_history_data取不到当天上交所的tick数据

xtdata.download_history_data('600000.SH', period='tick', start_time='20250618', end_time='20250618', incrementally = False)

data_dict=xtdata.get_local_data(field_list=[], stock_list=['600000.SH'], period='tick', start_time='20250618', end_time='20250618', count=-1,dividend_type='none', fill_data=False, data_dir='')

这几天取不到数,为什么

解决方案

在 QMT 平台中,使用历史数据下载接口(如 download_history_data)获取当天tick 数据时,经常会遇到取不到数据的情况。这通常是由以下几个原因导致的:

1. 历史数据接口的延迟性(盘中无法获取当天历史Tick)

download_history_dataget_local_data 是针对历史数据的接口。QMT 的数据服务器通常会在每天收盘后(通常在 15:30 甚至更晚)才会将当天的 tick 数据打包并更新到历史数据服务器上。因此,如果您在盘中刚收盘不久调用该接口,服务器上还没有当天的历史 tick 文件,自然就下载不到数据。

2. 盘中获取当天 Tick 数据的正确姿势

如果您需要在盘中获取当天的 tick 数据,不能使用历史数据下载接口,而应该使用实时行情订阅接口实时快照接口

根据 QMT 内置 Python API 文档,推荐使用以下方法:

方法一:使用 ContextInfo.subscribe_quote 订阅实时 Tick

这是最推荐的盘中获取 Tick 的方式,当有新的 Tick 到来时会触发回调函数。

def on_quote(datas):
    print("收到实时Tick数据:", datas)

def init(ContextInfo):
    # 订阅 600000.SH 的实时 tick 数据
    ContextInfo.subscribe_quote('600000.SH', period='tick', dividend_type='none', callback=on_quote)

def handlebar(ContextInfo):
    pass

方法二:使用 ContextInfo.get_full_tick 获取最新分笔快照

如果您只需要在特定时刻(如每根 K 线结束时)获取最新的一个 Tick 状态,可以使用此接口。

def handlebar(ContextInfo):
    if not ContextInfo.is_last_bar():
        return
    # 获取最新分笔数据
    tick_data = ContextInfo.get_full_tick(['600000.SH'])
    print("最新Tick快照:", tick_data)

方法三:使用 ContextInfo.get_market_data_ex 获取当天已走完的 Tick 序列

如果您在盘中需要获取当天从开盘到当前时刻的所有 Tick 序列,可以使用 get_market_data_ex 并开启 subscribe=True

def handlebar(ContextInfo):
    if not ContextInfo.is_last_bar():
        return
    # 获取当天的 tick 序列
    data = ContextInfo.get_market_data_ex(
        fields=[], 
        stock_code=['600000.SH'], 
        period='tick',
        start_time='', 
        end_time='', 
        count=-1,
        subscribe=True
    )
    print("当天Tick序列:", data)

3. 盘后获取当天 Tick 数据的注意事项

如果您确实是在盘后(例如晚上)运行代码,但依然取不到数据,请检查以下几点:

  1. 时间格式:确保 start_timeend_time 是有效的交易日。您示例代码中的 20250618 如果是未来的日期或非交易日,肯定是取不到数据的。
  2. 数据补充:在 QMT 客户端界面,点击【数据管理】->【补充数据】,手动勾选“分笔线”并补充当天的行情,看看是否能成功下载。如果客户端也无法补充,说明券商的数据服务器当天存在异常或尚未就绪。
  3. 参数设置get_local_dataperiod 参数应为 'tick',且确保本地确实已经通过 download_history_data 下载成功(可以通过检查 QMT 安装目录下的 userdata_mini/datadir 目录是否有对应日期的文件来确认)。