🚀 AI 一键生成 qmt 策略代码
立即体验

QMT 平台如何使用 get_sector 获取指数历史与实时成分股?

qmt | 发布时间: 2026/7/27
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: QMT 指数成分股获取:`get_sector` 接口历史与实时对比

Question: 如何使用 ContextInfo.get_sector 提取沪深300或中证500的历史成分股?

解决方案

QMT 指数成分股获取:ContextInfo.get_sector 接口详解

在量化策略开发中,避免幸存者偏差(Look-ahead Bias)非常重要。获取准确的历史成分股(如沪深300、中证500等)是构建回测股票池的核心步骤。QMT 平台提供了 ContextInfo.get_sector() 接口来实现这一功能。


1. 接口语法与参数解析

接口定义

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'

2. 实时 vs 历史成分股对比调用示例

以下代码示范了如何在 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)}")

3. 注意事项与最佳实践

  1. 数据补充:在回测前,需通过 QMT 客户端【数据管理】补充对应指数的历史数据,否则可能获取不到历史成分股变化记录。
  2. 时间戳转换:结合 ContextInfo.get_bar_timetag(index) 可以动态获取当前 Bar 的时间戳并自动传入 get_sector,防止在回测中使用最新成分股引入未来数据。
  3. 其他成分股接口区别
    • ContextInfo.get_sector():专门用于获取指数成分股的历史与实时数据。
    • ContextInfo.get_stock_list_in_sector():支持客户端左侧板块列表中任意板块(包括自定义板块),同样支持传入时间戳获取成分股。