风险提示:本内容为量化技术及平台操作的纯知识分享,不构成任何投资建议,不推荐任何具体证券或交易时机。部分内容可能理解包含错误,请自行核实。市场有风险,投资需谨慎
上次我们结束了怎么样下载全市场股票的数据量化研究--QMT下载全部的股票历史数据,今天我们详细的介绍一下,怎么样把QMT的数据保存在本地研究,比如做因子分析,回测,交易的模拟等需求

第一步打开QMT,点击策略编辑,进入下载数据策略,设置里面的参数

设置下载文件保存的路径比如桌面

比如桌面没有这个文件夹的话会自动建立,路径设置对就可以
读取板块的成分股,就是qmt界面行情左边的板块名称,全部板块名称都可以读取

行情左边的全部板块

读取的函数注意不要输入时间,输入时间有问题读取不到,realtime参数我输入有问题读取不到成分股,不输入可以正常读取

比如
# coding:gbk
def init(C):
pass
def handlebar(C):
print(C.get_stock_list_in_sector('上证50'))
3下载历史行情数据,如果订阅实时读取的话,数据下载会比较慢,我们补充好数据一次性读取下载就可以,点击界面的操作,下面的数据管理下载


选择自己需要的数据,时间周期下载就可以

支持多周期数据下载可以自己选择

参数说明
ContextInfo.get_market_data_ex(
fields=[],
stock_code=[],
period='follow',
start_time='',
end_time='',
count=-1,
dividend_type='follow',
fill_data=True,
subscribe=True)


例子说明
# coding:gbk
import pandas as pd
import numpy as np
def init(C):
C.stock_list = ["0001.SZ","609.SH", "5100.SH"]# 指定获取的标的
C.start_time = "20230901"# 指定获取数据的开始时间
C.end_time = "20231101"# 指定获取数据的结束时间
def handlebar(C):
# 获取多只股票,多个字段,一条数据
data1 = C.get_market_data_ex([],C.stock_list, period = "1d",count = 1)
# 获取多只股票,多个字段,指定时间数据
data2 = C.get_market_data_ex([],C.stock_list, period = "1d", start_time = C.start_time, end_time = C.end_time)
# 获取多只股票,多个字段,指定时间15m数据
data3 = C.get_market_data_ex([],C.stock_list, period = "15m", start_time = C.start_time, end_time = C.end_time)
# 获取多只股票,指定字段,指定时间15m数据
data4 = C.get_market_data_ex(["close","open"],C.stock_list, period = "15m", start_time = C.start_time, end_time = C.end_time)
# 获取多只股票,历史tick
tick = C.get_market_data_ex([],C.stock_list, period = "tick", start_time = C.start_time, end_time = C.end_time)
# 获取期货5档盘口tick
future_lv2_quote = C.get_market_data_ex([],["rb25.SF","ec4.INE"], period = "l2quote", count = 1)
print(data1)
print(data2["01.SZ"].tail())
print(data3)
print(data4["001.SZ"])
print(data4["0001.SZ"].to_csv("your_path")) # 导出文件为csv格式,路径填本机路径
print(tick["0001.SZ"])
print(future_lv2_quote)
最后一步选择模型交易,把策略挂交易,点击运行就会下载行情数据,运行的结果

可惜大qmt是单线程的,不然多线程一分钟就下载好了,下载的数据参考

随便打开看看,前提是需要把数据补充完整

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

找我开户也可以专业的量化支持服务

下载代码参考学习使用
#coding:gbk
'''
作者:小果
微信:xg_quant
全市场ETF数据下载器
功能:读取全部沪深ETF板块成分股,循环下载每只股票的历史日线数据,保存为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("正在获取全部ETF板块成分股...")
stock_list = c.get_stock_list_in_sector('沪深ETF')
# 如果"全部A股"拿不到,尝试"沪深A股"
if not stock_list or len(stock_list) == 0:
print("'全部ETF'板块未找到,尝试'沪深A股'...")
stock_list = c.get_stock_list_in_sector('沪深ETF')
# 过滤:只保留正常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