MiniQMT 量化教程:历史数据下载全解析(上):核心概念与基础用法
在使用 MiniQMT 做量化策略开发时,历史行情数据是回测与分析的基础。很多刚接触 MiniQMT 的朋友经常会混淆miniQMT、xtquant、xtdata三者的关系,也搞不清下载数据和查询数据的区别。本文就带大家系统梳理 MiniQMT 中历史数据的下载方法,讲透核心概念与基础实操。
一、先理清关系:MiniQMT、XtQuant 与 xtdata
很多新手入门的第一个困惑,就是这三个名词到底是什么关系,其实它们是层层嵌套的「终端 - 接口 - 模块」关系:
- miniQMT:量化交易终端软件,运行在本地作为服务端,负责对接交易所、接收并存储行情数据,同时提供数据下载与交易接口能力。
- XtQuant:miniQMT 的 Python 接口库,是 Python 程序和 miniQMT 本地服务之间的通信桥梁,通过 TCP 连接交互,内部包含两大核心模块:行情模块
xtdata和交易模块xttrader。 - xtdata:XtQuant 中专职行情数据的模块,提供各类行情数据的 API 接口,本质是向 miniQMT 发送数据请求并处理返回结果,同时支持历史数据查询和实时行情订阅。
简单理解:miniQMT 是后台数据源,XtQuant 是 Python 对接工具,xtdata 是工具里专门拿行情数据的功能包。
二、xtdata 模块核心功能全景
xtdata 是 MiniQMT 体系里的行情数据核心,覆盖了从行情到基本面、从股票到衍生品的全品类数据能力:
- 历史行情数据:支持日线、分钟线、周线等多周期 K 线,以及分笔成交 Tick 数据,同时提供前复权、后复权等多种复权方式。
- 实时行情订阅:支持单标的单周期订阅、全市场 Tick 订阅两种模式;额外支持 Level2 深度行情获取(需单独开通权限),满足高频交易数据需求。
- 基本面与基础数据:提供资产负债表、利润表、现金流量表等完整财务报表及核心财务指标,同时支持股票列表、交易日历、除权除息等基础信息查询。
- 指数与板块数据:支持指数成分股、成分股权重、指数行情获取,覆盖行业分类、概念板块、地域板块等多维度板块数据。
- 基金与衍生品数据:支持 ETF 申赎清单、成分股、净值数据;同时提供期货主力合约、期权链、商品期权等衍生品数据查询。
三、历史数据获取的底层逻辑:缓存 + 查询两步走
xtdata 获取历史数据的核心逻辑分为两步,这是很多新手容易踩坑的地方:
- 第一步:缓存历史数据调用下载函数从服务器拉取数据,缓存到 miniQMT 安装目录下的
userdata_mini文件夹中,数据为二进制格式,无法直接读取和处理。 - 第二步:查询历史数据调用查询函数从本地缓存中读取数据,转化为可处理的格式(如 DataFrame),支持多标的、多字段、多周期读取,也可设置复权方式。
注意:必须先执行下载缓存,才能成功查询到历史数据;同时由于接口迭代,目前存在多组功能相近但细节有别的下载 / 查询函数,需要根据需求选择。
四、步骤一:缓存历史数据(下载到本地)
数据缓存阶段,核心有两个函数:download_history_data()和download_history_data2(),执行完成后数据就会持久化存储到本地。
两者的核心差异如下:
| 函数 | 支持标的数量 | 执行方式 | 核心特点 |
|---|---|---|---|
download_history_data | 单只股票 / 标的 | 同步执行 | 用法简单,适合单标的少量数据下载 |
download_history_data2 | 批量多标的 | 异步执行 | 可监控下载进度,适合多标的、长周期批量下载 |
两个函数均支持增量下载(设置incrementally=True)和全量下载,日常维护数据时用增量下载可以大幅提升效率。
五、步骤二:查询历史数据(读取本地数据)
数据缓存到本地后,需要通过查询函数读取为可分析的数据,常用的查询函数有三个:
get_market_data():基础查询函数,支持指定标的、周期、时间范围、字段和复权方式。get_market_data_ex():增强版查询函数,返回格式更丰富,适配更多进阶参数。get_local_data():纯本地数据读取,直接从本地缓存拉取,不触发服务器请求。
六、实操案例:单只股票日线数据下载与读取
下面以平安银行(000001.SZ)为例,演示「下载 - 查询」的完整基础流程,代码可直接复制运行(需先启动 MiniQMT 并安装 xtquant)。
from xtquant import xtdata # ====================== # 1. 下载并缓存历史数据 # ====================== xtdata.download_history_data( stock_code="000001.SZ", # 股票代码,格式:代码.交易所 period="1d", # 数据周期:1d=日线 start_time="20240101", # 起始日期 end_time="20240301" # 结束日期 ) # ====================== # 2. 查询本地已缓存的数据 # ====================== data = xtdata.get_market_data( field_list=["time", "close"], # 需要获取的字段:时间、收盘价 stock_list=["000001.SZ"], # 股票代码列表 period="1d", # 数据周期,与下载保持一致 start_time="20240101", # 起始日期 end_time="20240301" # 结束日期 ) # ====================== # 3. 打印结果 # ====================== print("平安银行日线收盘价数据:") print(data["close"])七、总结与下篇预告
本文梳理了 MiniQMT 中历史数据获取的核心体系,重点讲解了「下载缓存 + 本地查询」的两步逻辑,以及基础函数的用法和单标的实操。
在下篇内容中,我会继续讲解批量下载函数download_history_data2的用法、多标的批量数据获取实操,以及不同查询函数的适用场景和进阶参数,帮助大家高效搭建本地行情数据库。
本文为「MiniQMT 量化入门」系列文章,后续会持续更新数据处理、策略回测、实盘交易相关内容,欢迎关注专栏一起交流。投资有风险入市需谨慎,本文只做教学不做投资建议。
