迅投QMT社区 门户 查看主题

量化研究--QMT怎么样下载全部ETF数据

发布者: 落花忆流年 | 发布时间: 2026-8-24 17:30| 查看数: 26| 评论数: 0|帖子模式

风险提示:本内容为量化技术及平台操作的纯知识分享,不构成任何投资建议,不推荐任何具体证券或交易时机。部分内容可能理解包含错误,请自行核实。市场有风险,投资需谨慎

上次我们结束了怎么样下载全市场股票的数据量化研究--QMT下载全部的股票历史数据,今天我们详细的介绍一下,怎么样把QMT的数据保存在本地研究,比如做因子分析,回测,交易的模拟等需求

5ec44b76fe94c725a0e9df4e8cd0b346.png

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

f8d0469a8f2a20d92c38d695b1070aec.png

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

296a78bdd3d9789d5e9d757ef414f15d.png

比如桌面没有这个文件夹的话会自动建立,路径设置对就可以

读取板块的成分股,就是qmt界面行情左边的板块名称,全部板块名称都可以读取

ad371179f18646b108af2ae40299622b.png

行情左边的全部板块

8bbad98aa2ef6fd7576613f73ab3b735.png

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

b6e8fe45a1da38b38d0d9a97f4f2bf99.png

比如

# coding:gbk
def init(C):
pass
def handlebar(C):
print(C.get_stock_list_in_sector('上证50'))

3下载历史行情数据,如果订阅实时读取的话,数据下载会比较慢,我们补充好数据一次性读取下载就可以,点击界面的操作,下面的数据管理下载

26af340348f0af15786a64f581b300c8.png

798cc5c31e4e9876e9e6ab36b7cd5741.png

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

23568ab3713638124c6e99691f58135a.png

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

955e07f6ef181c2b9ef76fa61770f781.png

参数说明

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

0300d4f1803846e31b3e281cc0d2c7a3.png

1ecfa38865ca8123bf20155df468670b.png

例子说明

# 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)


最后一步选择模型交易,把策略挂交易,点击运行就会下载行情数据,运行的结果

1f6248c1ac7263bcda0cf48f1a1986a5.png

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

9a6aae49630ec57c5d8867bed5a9574b.png

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

81d3c6ebfe330341b3c1df3acdc47a3e.png

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

30b70b30ec6a625bb7462e129dc5ccd8.jpg

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

30bfd98894db3456886fd14fd6d2dad1.png

下载代码参考学习使用

#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

最新评论

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2026 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表