🚀 AI 一键生成 joinquant 策略代码

JoinQuant 指数投资实战:如何获取指数成分股的权重?

joinquant | 发布时间: 2025/12/2
以下内容由 EasyQuant 生成。

问题描述

怎样才能查到指数里每只成分股的权重?

解决方案

在 JoinQuant 聚宽平台上,查询指数中每只成分股权重的专用 API 函数是 get_index_weights

以下是该函数的详细使用说明、代码示例及注意事项。

核心函数:get_index_weights

该函数用于获取指数成分股的权重信息,数据通常每月更新一次(一般在月底或月初)。

函数原型

get_index_weights(index_id, date=None)

参数说明

  • index_id (必选): 指数的标准代码字符串,例如 '000300.XSHG' (沪深300) 或 '000016.XSHG' (上证50)。
  • date (可选): 查询权重的日期,格式为 'YYYY-MM-DD'
    • 回测/模拟环境中:默认为 context.current_dt.date()
    • 研究环境中:默认为 datetime.now().date()

返回值

返回一个 pandas.DataFrame 对象,包含以下列:

  • code: 股票代码
  • display_name: 股票名称
  • date: 权重对应的日期
  • weight: 权重值(通常为百分比形式,例如 1.5 代表 1.5%)

代码示例

以下代码展示了如何在研究环境或策略中获取沪深300指数的成分股权重:

# -*- coding: utf-8 -*-
from jqdata import *

# 获取沪深300指数(000300.XSHG)在2023-01-01的成分股权重
# 注意:如果指定日期是非交易日或无数据更新,系统会返回距离该日期最近的权重数据
df = get_index_weights(index_id='000300.XSHG', date='2023-01-01')

# 打印前5行查看结果
print(df.head())

# 示例输出格式:
#            code display_name        date  weight
# 000001.XSHE         平安银行  2022-12-30    0.60
# 000002.XSHE          万科A  2022-12-30    0.65
# ...

注意事项

  1. 数据更新频率:指数权重数据一般每月更新一次。如果您查询的日期没有当天的权重数据,API 会自动返回距离查询日期最近的一次更新数据。
  2. 权重单位:返回的 weight 字段通常表示百分比。例如,如果某只股票的权重显示为 0.93,表示它占该指数权重的 0.93%。
  3. 数据缺失处理:如果找不到对应日期的权重信息,函数会返回距离查询日期最近日期的权重信息。
  4. 代码格式:请确保 index_id 包含后缀(如 .XSHG.XSHE),否则会报错。

Q&A

Q: get_index_weightsget_index_stocks 有什么区别?
A: get_index_stocks 仅返回指数成分股的代码列表(List),不包含权重信息;而 get_index_weights 返回一个 DataFrame,其中包含了成分股代码、名称以及具体的权重数值。

Q: 为什么我查询出来的日期和输入的 date 参数不一致?
A: 因为指数权重通常是按月更新的,而不是每天更新。API 会返回距离您输入日期最近的那个发布日的权重数据。

Q: 这个函数可以在回测中使用吗?
A: 可以。在回测中如果不填 date 参数,默认会使用回测当前的逻辑时间(context.current_dt)来获取当时已知的最新权重数据,这避免了未来函数的问题。

Q: 如何获取某个行业板块的成分股权重?
A: get_index_weights 仅适用于指数。对于行业板块,通常没有官方定义的“权重”概念(除非是行业指数)。如果您需要获取行业成分股,请使用 get_industry_stocks,然后根据市值或其他指标自行计算权重。