这张表记录了中证500指数从 2015 年至今每个时间段的成分股名单,是计算”市场广度”(breadth)的关键依据——要知道每天应该统计哪 500 只股票。
中证500指数的成分股不是固定的,每半年调整一次(6 月和 12 月),偶尔还有临时调整。在做历史回测时,不能拿今天的成分股名单去算 2019 年的广度,必须用当时实际有效的名单。
这张表就是用来查”某一天应该用哪 500 只股票”的。
表里的”取样日期”(asof_date)按以下规则生成:
| 规则 | 说明 |
|---|---|
| 每月 1 日 | 每个月固定记录一次 |
| 6 月/12 月第三周周一 | 中证500 每半年的定期调整日(第二周周五收盘后生效) |
对于每个取样日期,系统查找该日期之前最近一次实际的成分股发布记录,用那份名单。这样做的好处是不用考虑节假日顺延的问题——真正的成分股名单总是落在之前某个实际的发布日。
| 字段 | 含义 | 示例 |
|---|---|---|
| index_code | 指数代码 | 000905.SH(固定) |
| trade_date | 实际成分发布日(Tushare 返回的) | 20241213 |
| con_code | 成分股代码 | 000001.SZ |
| weight | 该成分股在指数中的权重(%) | 0.35 |
| asof_date | 取样日期(我们指定的) | 20250101 |
这是最容易搞混的两个字段:
比如查 asof_date = 20250101(2025 年 1 月 1 日),系统会找到之前最近的发布日 trade_date = 20241213(2024 年 12 月 13 日),返回那天的成分股名单。
| 项目 | 数值 |
|---|---|
| 取样日期数(asof_date) | 156 个 |
| 实际发布日数(trade_date) | 134 个 |
| 最早取样日期 | 2015-01-01 |
| 每个时间点的成分股数 | 500 只 |
| 理论总记录数 | 156 × 500 = 78,000 行 |
| 实际总记录数 | 77,999 行 |
600270.SH(外运发展)在 2018 年 12 月 28 日的成分股发布日当天退市。按规则 asof_date >= delist_date 时该股票不能出现在成分里,所以 2019-01-01 这期的名单剔除了它。
因为成分股不是每个月都调整。相邻的几个月可能共用同一份发布日期的名单——比如 2025 年 1 月、2 月、3 月的成分股可能都来自 2024 年 12 月的那次调整。
查询某个交易日的成分股:
这样就能得到目标日期当时实际有效的成分股列表,不会误用未来数据。