风险提示:本内容为量化技术及平台操作的纯知识分享,不构成任何投资建议,不推荐任何具体证券或交易时机。部分内容可能理解包含错误,请自行核实。市场有风险,投资需谨慎
最近小伙伴问我,本地的qmt使用不方便,需要历史行情数据做研究,问我怎么样找数据源,目前市场的数据源很大,但是有的收费,可以利用qmt的数据,把历史行情数据保存到本地,比如csv,xlsx。json等都可以,可以给策略读取做研究交易

用来计算技术指标,因子等分析,数据导出到本地可以多线程计算比如qmt平台快


第一步下载全市场的股票数据需要读取市场板块的成分股,qmt界面的左边板块都可以读取

使用这个接口数据读取

第二步建立保存数据的文件夹,可以的话会自动建立,需要最近设置一下保存路径比如桌面

第三步,下载历史数据函数,因为订阅太慢,所以我没有订阅,直接读取本地保存的数据导出

需要先补充一下历史数据,在qmt的界面操作上面,点击数据管理

选择直接需要的周期下载就可以,比如全部

读取本地的下载数据导出

使用这个函数读取

没有问题的话把策略挂模型交易,点击下载就可以

开始下载数据

保存的数据结果

随便打开一个数据看看,重点是要补充下载好数据,如果是订阅的方式下载不需要


不懂的问我就可以,加我备注入群可以加入量化交流群

需要开户的也可以找我,专业的量化技术支持服务
代码思路参考
#coding:gbk
'''
作者:小果
微信:xg_quant
全市场A股历史数据下载器
功能:读取全部A股板块成分股,循环下载每只股票的历史日线数据,保存为xlsx文件
'''
import pandas as pd
import os
import datetime
def init(c):
c.account = '55001947'
download_all_a_stock_data(c)
def download_all_a_stock_data(c):
"""
下载全部A股历史日线数据
参数 c: ContextInfo 对象(QMT回调传入)
"""
# ========== 设置 ==========
save_path = r'C:\Users\lxg123456\Desktop\data'
# 创建文件夹
if not os.path.exists(save_path):
os.makedirs(save_path)
print(f"已创建文件夹: {save_path}")
# ========== 1. 获取全部A股股票池 ==========
current_time = int(datetime.datetime.now().timestamp() * 1000)
print("正在获取全部A股板块成分股...")
stock_list = c.get_stock_list_in_sector('沪深A股')
# 如果"全部A股"拿不到,尝试"沪深A股"
if not stock_list or len(stock_list) == 0:
print("'全部A股'板块未找到,尝试'沪深A股'...")
stock_list = c.get_stock_list_in_sector('沪深A股')
# 过滤:只保留正常A股(6位数字.市场标识)
stock_list = [s for s in stock_list if s.count('.') == 1 and s.split('.')[0].isdigit()]
print(f"共获取到 {len(stock_list)} 只A股\n")
# ========== 2. 循环下载每只股票 ==========
success = 0
fail = 0
for i, stock in enumerate(stock_list, 1):
file_path = os.path.join(save_path, f"{stock}.xlsx")
print(f"[{i}/{len(stock_list)}] 下载 {stock} ...", end="")
try:
# 获取历史日线数据
data = c.get_market_data_ex(
[], # 获取全部字段
[stock], # 股票代码
period='1d', # 日线
start_time='19900101', # 从1990年开始
end_time='20500101', # 到足够远的时间
count=-1, # 全部数据
dividend_type='front', # 前复权
fill_data=True,
subscribe=False
)
if stock in data and data[stock] is not None:
df = data[stock]
if not df.empty:
df.to_excel(file_path)
success += 1
print(f" 完成 ({len(df)}条)")
else:
fail += 1
print(" 数据为空")
else:
fail += 1
print(" 无数据")
except Exception as e:
fail += 1
print(f" 失败 - {e}")
# ========== 3. 打印结果 ==========
print(f"\n{'='*50}")
print(f"下载完成!")
print(f"总计: {len(stock_list)} 只股票")
print(f"成功: {success} 只")
print(f"失败: {fail} 只")
print(f"数据保存在: {save_path}")
print(f"{'='*50}")
def handlebar(c):
pass
|