对应实盘演示视频与完整运行代码见 A股自动化交易QMT教程
最终数据集也可直接 下载
首先需要打开小qmt,公共模拟账号点 这里 也可以联系客服直接申请实盘账号或者自用模拟账号
具体函数介绍
xtdata.download_sector_data()
# 获取所有板块名称
sectors = xtdata.get_sector_list()
可获取所有板块名称

获取该板块下所有股票列表接口如下
# 获取该板块下的股票列表
stocks = xtdata.get_stock_list_in_sector(sector)
如何获取个股的名称
detail = xtdata.get_instrument_detail(stock_code)
可以直接拿里面的InstrumentName字段,为个股的名称

主要函数如下,原理:获取所有板块,遍历所有板块,得到板块个股,同时每个个股属性上加上这个板块名称
def get_all_stocks_with_industry():
"""
获取所有个股的代码、名称(通过get_instrument_detail)和所属行业
"""
# 下载最新板块分类信息
print("正在下载板块数据...")
xtdata.download_sector_data()
# 获取所有板块名称
sectors = xtdata.get_sector_list()
print(f"共获取到 {len(sectors)} 个板块")
# 将sectors保存到本地文件
save_sectors_to_file(sectors, 'qmt_概念版块.txt')
# 存储所有股票信息
all_stocks_info = {}
# 遍历所有板块,收集股票信息
for i, sector in enumerate(sectors):
try:
# 获取该板块下的股票列表
stocks = xtdata.get_stock_list_in_sector(sector)
for stock_code in stocks:
if stock_code not in all_stocks_info:
all_stocks_info[stock_code] = {
'code': stock_code,
'name': '', # 稍后通过get_instrument_detail获取名称
'industries': [] # 可能属于多个行业
}
all_stocks_info[stock_code]['industries'].append(sector)
print(f"进度: {i + 1}/{len(sectors)} - 板块 '{sector}' 有 {len(stocks)} 只股票")
# 添加延迟避免请求过于频繁
time.sleep(0.01)
except Exception as e:
print(f"处理板块 '{sector}' 时出错: {e}")
# break
# 获取股票名称(改用get_instrument_detail)
print("正在获取股票名称...")
for idx, stock_code in enumerate(list(all_stocks_info.keys())):
try:
# 调用get_instrument_detail获取详细信息
detail = xtdata.get_instrument_detail(stock_code)
# 提取名称(字段为InstrumentName)
stock_name = detail.get('InstrumentName', '未知')
all_stocks_info[stock_code]['name'] = stock_name
# 打印进度(每100只股票显示一次)
if (idx + 1) % 100 == 0:
print(f"已获取 {idx + 1}/{len(all_stocks_info)} 只股票名称")
except Exception as e:
print(f"获取股票 {stock_code} 名称失败: {e}")
all_stocks_info[stock_code]['name'] = '未知'
# 控制请求频率,避免接口限制
# time.sleep(0.005)
return all_stocks_info
最终获取所有个股的所属指数与行业分类

1090

被折叠的 条评论
为什么被折叠?



