不少量化朋友在搭建策略时,常需要全市场股票列表、个股对应的申万行业分类以及概念标签。这类数据变动频率低,却是行业轮动或题材筛选的基础素材。今天分享一套完整的 Python 实现方案,直接调用 QMT 原生接口,无需额外对接第三方数据源。
环境准备
核心依赖是 xtquant(QMT 官方库)和 pandas(数据处理)。安装命令如下:
pip install xtquant pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
运行前请确保已安装并登录 QMT 终端,接口依赖客户端连接环境。建议终端版本为 QMT 8.0+,行业和概念数据更新较少,每周同步一次即可。
核心逻辑与代码实现
1. 下载板块基础数据
QMT 内置的板块数据有时会导致接口卡死,这里封装一个函数替代原生 download_sector_data(),确保数据拉取稳定。
from xtquant import xtdata
import pandas as pd
def down_load_sector():
client = xtdata.get_client()
client.down_all_sector_data()
2. 获取沪深 A 股股票池
返回全部沪深 A 股的股票代码和名称(不含北交所),导出为 CSV 文件方便后续读取。
def get_stock_pool():
stocks = xtdata.get_stock_list_in_sector("沪深 A 股")
info_list = xtdata.get_instrument_detail_list(stocks)
ret = []
for stock in stocks:
name = info_list[stock]['InstrumentName']
ret.append({"stock": stock, "name": name})
df = pd.DataFrame(ret)
df = df.sort_values(by="stock")
df.to_csv("沪深 A 股股票池.csv", index=False)
return df
3. 匹配申万行业分类
通过筛选 SW2 或 SW3 前缀的板块数据,建立个股与申万二级/三级行业的对应关系。逻辑类似,以二级行业为例:
def get_sw2_industry():
down_load_sector()
sector_list = xtdata.get_sector_list()
sw2_list = [s for s in sector_list if s[:3].lower() == s]
stocks = xtdata.get_stock_list_in_sector()
ret = []
sw2 sw2_list:
s_list = xtdata.get_stock_list_in_sector(sw2)
stock stocks:
stock s_list:
ret.append({: stock, : sw2[:]})
df = pd.DataFrame(ret)
df = df.sort_values(by=)
df.to_csv(, index=)
df


