🚀 AI 一键生成 qmt 策略代码

QMT 平台如何下载全量历史 Tick 数据?(附解决方案)

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

问题描述

xtdata.download_history_data 无法下载所有tick数据,仅能下载近一个月的

xtdata.download_history_data2(["204001.SH"],period="tick", start_time="", end_time="")

仅能下载近一个月的数据,怎么才能下载全量数据呢

解决方案

在 QMT 平台中,使用 xtdata.download_history_dataxtdata.download_history_data2 接口下载 period="tick"(分笔数据)时,确实会遇到只能下载近一个月数据的限制。这是因为 Tick 数据量极其庞大,为了保证服务器的稳定性和带宽,QMT 行情服务器对 API 直接拉取 Tick 数据的跨度做了严格限制。

要获取全量的历史 Tick 数据,您可以采用以下几种解决方案:

方案一:通过 QMT 客户端“数据管理”手动补充(推荐)

虽然 API 接口限制了单次下载的时间跨度,但您可以通过 QMT 客户端自带的 UI 界面来补充更长时间的历史 Tick 数据到本地:

  1. 打开 QMT 客户端,点击顶部菜单栏的 “数据管理”(或在左侧导航栏找到数据管理)。
  2. 选择 “补充数据” 选项卡。
  3. 在弹出的界面中,选择您需要的市场(如沪市、深市)和具体的品种(如 204001.SH)。
  4. 在数据周期中勾选 “分笔”(即 Tick 数据)。
  5. 设置您需要的开始时间结束时间
  6. 点击“开始补充”。

注:补充过程可能需要较长时间,请耐心等待。补充完成后,数据会保存在本地硬盘中。

方案二:分段下载并拼接(受限于券商服务器配置)

部分券商的 QMT 服务器允许通过 API 下载超过一个月的数据,但前提是必须分段请求。您可以尝试编写一个循环,每次请求一周或一个月的数据,然后将结果拼接起来。但请注意,如果券商服务器物理上只保留了近一个月的 Tick 数据,此方法依然无效。

import pandas as pd
from xtquant import xtdata
import datetime

# 示例:尝试分段下载(需视券商服务器是否支持)
def download_tick_in_chunks(stock, start_date, end_date):
    current_start = pd.to_datetime(start_date)
    end_dt = pd.to_datetime(end_date)
    
    while current_start < end_dt:
        current_end = current_start + pd.Timedelta(days=10) # 每次拉取10天
        if current_end > end_dt:
            current_end = end_dt
            
        str_start = current_start.strftime("%Y%m%d")
        str_end = current_end.strftime("%Y%m%d")
        
        print(f"Downloading {str_start} to {str_end}...")
        xtdata.download_history_data2([stock], period="tick", start_time=str_start, end_time=str_end)
        
        current_start = current_end + pd.Timedelta(days=1)

方案三:使用第三方数据源导入

如果 QMT 官方服务器确实没有提供更早的 Tick 数据,您只能依赖第三方数据源(如 Tushare、AkShare、米筐,或购买专业的 Tick 历史数据)。

获取到 CSV 格式的 Tick 数据后,您可以在 QMT 策略中直接使用 pandas 读取本地文件进行回测:

import pandas as pd

def init(ContextInfo):
    # 在初始化时加载本地第三方 Tick 数据
    ContextInfo.my_tick_data = pd.read_csv("D:/data/204001_SH_tick.csv")
    print("本地 Tick 数据加载完成")

总结建议

对于高频策略回测,强烈建议使用方案一,在周末或非交易时间通过 QMT 客户端的“数据管理”工具将所需的历史 Tick 数据一次性下载到本地。下载完成后,在策略中使用 ContextInfo.get_local_data()xtdata.get_market_data_ex(设置 subscribe=False)直接读取本地数据,这样既能绕过 API 的下载限制,又能大幅提升回测速度。