问题描述
解决方案
在 QMT 量化交易平台中,获取特定行业(如证监会行业分类)下的所有股票代码,主要使用 ContextInfo.get_industry() 函数。
以下是具体的代码实现和说明。
代码实现
# -*- coding: gbk -*-
def init(ContextInfo):
# 定义目标行业名称,例如 'CSRC医药制造业'
target_industry = 'CSRC医药制造业'
# 使用 get_industry 接口获取该行业下的所有成分股代码
# 返回值为包含股票代码字符串的列表 (list)
stock_list = ContextInfo.get_industry(target_industry)
# 打印结果进行验证
print(f"行业名称: {target_industry}")
print(f"成分股数量: {len(stock_list)}")
# 为了避免日志过长,这里只打印前 10 只股票代码作为示例
if len(stock_list) > 0:
print("部分成分股代码示例:", stock_list[:10])
else:
print("未找到该行业的成分股,请检查行业名称是否正确。")
def handlebar(ContextInfo):
# 该策略主要在 init 中演示获取数据,handlebar 中无需执行逻辑
pass
函数说明
ContextInfo.get_industry(industry)
- 描述:获取指定行业的成份股列表。
- 参数:
industry(string):行业名称。例如'CSRC采矿业','CSRC医药制造业'等。
- 返回值:
- 返回一个 Python
list,列表包含该行业下的所有股票代码(格式如'000001.SZ')。
- 返回一个 Python
- 注意事项:
- 输入的行业名称必须严格匹配 QMT 系统中定义的行业名称。
- 该函数通常用于
init初始化阶段来设定股票池 (ContextInfo.set_universe)。
常见 CSRC 行业名称示例
如果您需要获取其他行业的代码,请确保使用标准的 CSRC 行业名称,例如:
CSRC金融业CSRC房地产业CSRC软件和信息技术服务业CSRC农、林、牧、渔业
Q&A
Q: 如何获取申万行业(SW)分类的成分股?
A: QMT 的 get_industry 主要针对 CSRC 行业。如果要获取申万行业或自定义板块,通常使用 ContextInfo.get_stock_list_in_sector(sectorname) 函数,例如 ContextInfo.get_stock_list_in_sector('申万一级行业名称'),前提是客户端左侧板块列表中存在该板块。
Q: 获取到的股票代码列表可以直接用于回测吗?
A: 可以。获取到的 stock_list 可以直接传入 ContextInfo.set_universe(stock_list) 来设置策略的股票池,或者用于 ContextInfo.get_market_data_ex 批量获取行情数据。
Q: 为什么我输入的行业名称返回空列表?
A: 这通常是因为行业名称拼写不准确。请检查名称是否与 QMT 附录中的标准名称完全一致(包括标点符号)。例如,应该是 'CSRC医药制造业' 而不是 '医药制造业'。