年后第一更,解决粉丝朋友遇到的小问题。
痛点:QMT下载数据为什么让人抓狂?
用过miniQMT的朋友肯定遇到过这几个场景:
- 下载全市场K线,跑了一夜发现中途断连,白干
- 财务数据下了半天,回测时发现缺这缺那(约数据源问题)
- 想增量更新,结果API不按套路出牌,重复下载几小时
- 各种同功能函数中选哪个?数据下载莫名卡死,哪出问题不知道。出问题不知道哪只股票失败,排查靠猜
这些问题我都踩过。后来实在受不了,自己写了一套多进程+增量下载的脚本,现在全市场数据从一天压缩到10分钟,每天自动跑,稳如老狗。
核心解法:多进程分组 + 增量更新
直接上干货,只讲关键的代码片段,帮助 大家快速上手。
1. 全市场股票列表的正确获取
client = xtdata.get_client()
client.down_all_sector_data() # 必须先下载板块元数据
stock_list = xtdata.get_stock_list_in_sector('沪深A股')
很多人忘了down_all_sector_data(),导致列表为空。这一步是前置依赖,必须执行。
2. 分组多进程,并行下载
size = 500
stock_groups = [stock_list[i:i+size] for i in range(0, len(stock_list), size)]
process_list = []
for group in stock_groups:
p = Process(target=download_stock_group, args=(group, '1d'))
p.start()
process_list.append(p)
每组500只,实测平衡了效率和稳定性。每个子进程独立下载,互不干扰。
3. 子进程核心:财务+K线增量更新
def download_stock_group(stock_group, period='1d'):
# 财务数据一次性传入列表,效率最高
xtdata.download_financial_data2(stock_group, table_list=[], start_time='', end_time='', callback=None)
for stock_code in stock_group:
# 关键参数 incrementally=True 实现增量下载
xtdata.download_history_data(stock_code, period=period,
start_time='19900101', incrementally=True)
财务数据:用download_financial_data2批量下载,比循环单只快几十倍。table_list=[]表示下载所有表,start_time和end_time留空自动更新最新。
K线数据:incrementally=True会自动对比本地已有数据,只下载缺失部分。配合start_time='19900101'确保从最早开始,但实际只会补新数据。
4. 日志监控,失败一目了然
脚本配置了完善的日志,记录每只股票的下载状态和耗时:
2025-02-18 10:23:45 [Process-3] 下载成功: 000001.SZ
2025-02-18 10:23:46 [Process-3] 下载失败: 000002.SZ - 网络超时(假设)
我从没遇到过,如果你遇到,这样你就能精准重跑失败个股,不用全量再来。
实测效果
沪深A股约5000只,K线全量下载:
提速约60倍以上,节约您宝贵的时间(生命)。
使用注意
- 确保miniQMT已登录,
xtdata版本最新 - 网络带宽足够,电脑配置高,可增加线程数,每组数量可同步减少,以更快速度完成下载。
- 下载函数不要替换,或遇莫名卡死,这是qmt的老坑。增量更新或依赖本地文件时间戳,勿手动修改数据文件
这套脚本我已经用了半年,每天自动更新,再没出过问题。数据是量化的根基,把这个脏活自动化,才能专注策略。
🎁 源码获取
想获取完整脚本(含异常重试、断点续传、日志轮转等增强功能)?请关注下方公众号,后台回复“miniqmt数据下载”,即可获得可直接运行的源码文件。
公众号:[量化学习实战笔记]
[[传送🚪](https://mp.weixin.qq.com/s/L7cHEVeA-GufvroiNS7hpA)]
关键词:miniqmt数据下载
下期预告:基于miniqmt市场宽度全景图(含大、小盘、搅屎棍指数)
免责声明:本账号所有量化策略和量化技术仅作技术交流和量化思路分享,不构成任何投资建议,据此操作风险自负,本人不承担任何直接或间接责任。