问题描述
解决方案
在 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
# ...
注意事项
- 数据更新频率:指数权重数据一般每月更新一次。如果您查询的日期没有当天的权重数据,API 会自动返回距离查询日期最近的一次更新数据。
- 权重单位:返回的
weight字段通常表示百分比。例如,如果某只股票的权重显示为0.93,表示它占该指数权重的 0.93%。 - 数据缺失处理:如果找不到对应日期的权重信息,函数会返回距离查询日期最近日期的权重信息。
- 代码格式:请确保
index_id包含后缀(如.XSHG或.XSHE),否则会报错。
Q&A
Q: get_index_weights 和 get_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,然后根据市值或其他指标自行计算权重。