本地的qmt不能使用,可以使用的数据源越来越少,需要研究策略,做可转债策略回测需要历史的行情数据做分析,我们可以利用qmt的行情函数,把历史数据下载到本地比如保存卫csv,xlsx,json都可以,做研究分析使用,大QMT下载本地保存数据是加密的.data格式文件不方便读取,自己保存就可以,前面介绍了下载,股票,基金的教程
量化研究--QMT下载全部的股票历史数据
量化研究--QMT怎么样下载全部ETF数据
第一步,补充历史数据,如果订阅读取在下载速度会很慢,可以一次性下载保存在本地,在读取本地的数据保存到excel就可以,这样快,点击界面的数据管理,下载历史数据

选择自己需要数据长度补充就可以,也可以自定义标的下载

点击下载就可以

第二部,看一下板块名称,保护全部可转债成分股的板块,点击行情
里面有一个沪深转债板块包含了全部的可转债成分股

第三步,编写代码下载全部可转债行情数据
先读取版本的成分股,设置保存文件的路径

读取全部板块的成分股,输入板块的名称就可以
读取历史行情数据,读取本地的不订阅行情


把策略挂模型交易就可以下载历史数据保存在本地

下载的结果

下载数据随便看看,要求补充完整好数据

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

开量化qmt,ptrade都可以找我专业量化支持

简单的代码参考
#coding:gbk
'''
作者:小果
微信:xg_quant
全市场可转债数据下载器
功能:读取全部沪深可转债板块成分股,循环下载每只股票的历史日线数据,
保存为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("正在获取全部可转债板块成分股...")
stock_list = c.get_stock_list_in_sector('沪深转债')
# 如果"全部A股"拿不到,尝试"沪深A股"
if not stock_list or len(stock_list) == 0:
print("'全部可转债'板块未找到,尝试'沪深转债'...")
stock_list = c.get_stock_list_in_sector('沪深转债')
# 过滤:只保留正常A股(6位数字.市场标识)
stock_list = [s for s in stock_list if s.count('.') == 1 and s.split('.')[0].isdigit()]
print(f"共获取到 {len(stock_list)} 只可转债\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
|