3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化策略开发中,避免幸存者偏差(Look-ahead Bias)非常重要。获取准确的历史成分股(如沪深300、中证500等)是构建回测股票池的核心步骤。QMT 平台提供了 ContextInfo.get_sector() 接口来实现这一功能。
ContextInfo.get_sector(sector, realtime)
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
sector |
string | 是 | 指数代码,必须是 'code.market' 格式。例如:沪深300 000300.SH,中证500 000905.SH,上证50 000016.SH |
realtime |
number | 否 | 毫秒级时间戳。缺省不填或设为0时返回最新实时成分股;传入对应时间戳则返回历史特定时刻的成分股 |
list: 包含成分股代码的列表,代码格式为 '000002.SZ'、'600000.SH'。以下代码示范了如何在 handlebar 函数中分别获取最新成分股与当前 K 线对应的历史成分股:
#encoding:gbk
def init(ContextInfo):
# 设置运行标的
ContextInfo.set_universe(['000300.SH'])
def handlebar(ContextInfo):
# 1. 获取当前 K 线的时间戳(毫秒级)
index = ContextInfo.barpos
timetag = ContextInfo.get_bar_timetag(index)
# 2. 获取历史特定时间点的沪深300成分股(避免未来函数)
history_300 = ContextInfo.get_sector('000300.SH', timetag)
# 3. 获取最新的沪深300成分股(实时最新)
realtime_300 = ContextInfo.get_sector('000300.SH')
# 打印对比结果(仅在最后一根 Bar 打印)
if ContextInfo.is_last_bar():
print(f"历史当前时间点成分股数量: {len(history_300)}")
print(f"最新实时成分股数量: {len(realtime_300)}")
ContextInfo.get_bar_timetag(index) 可以动态获取当前 Bar 的时间戳并自动传入 get_sector,防止在回测中使用最新成分股引入未来数据。ContextInfo.get_sector():专门用于获取指数成分股的历史与实时数据。ContextInfo.get_stock_list_in_sector():支持客户端左侧板块列表中任意板块(包括自定义板块),同样支持传入时间戳获取成分股。