2. 板块与基准指数选择

做板块涨跌幅与超额收益对比,第一步不是算,而是“选对尺子”。同一只板块指数,用沪深300做基准可能显示持续跑赢,换成中证500却可能只是持平;同一段行情,用价格指数和全收益指数计算,超额收益也会出现系统性差异。本节要解决的就是:根据分析目的选代表性板块指数与基准指数,理解指数编制规则对涨跌幅的影响,并完成指数数据的对齐与预处理,让后续的超额收益计算建立在可比、干净的数据之上。

一、先明确分析目的,再决定“选谁”

指数选择本质上是为问题匹配参照系。常见分析目的与对应选择思路如下:

  • 判断某行业整体强弱:选该行业的申万一级或二级行业指数,基准选市场宽基(沪深300或中证全指),看的是行业相对全市场的超额。
  • 判断大小盘风格轮动:板块侧用沪深300(大盘)与中证500/中证1000(中小盘)对比,基准可用中证全指,观察风格价差。
  • 评估主题/概念热度:选对应主题指数(如中证新能源、中证半导体),但要注意主题指数成分股集中、编制规则特殊,基准宜选同风格宽基而非沪深300,否则超额会被风格偏差污染。
  • 基金或组合业绩归因:基准应尽量贴近组合的业绩比较基准,而不是随手拿沪深300。

关键原则是:板块指数与基准指数在市值风格、行业分布、成分数量上尽量可比。用沪深300去衡量一个小盘成长板块,超额收益里混入了大量风格beta,结论会失真。

二、指数编制规则如何影响涨跌幅

选完指数还要理解它“怎么算”,否则涨跌幅不可比。需要重点关注的规则有四项:

  1. 加权方式:自由流通市值加权(沪深300、中证500)与等权、价格加权差异明显。等权指数中小市值成分影响被放大,波动通常更高。
  2. 样本空间与调整频率:沪深300每半年调整一次样本,中证500同样定期调样。调样日前后成分变化会造成指数“跳变”,跨调样期做区间收益时需注意。
  3. 价格指数 vs 全收益指数:价格指数不含分红,全收益指数将分红再投资。高股息板块用价格指数会低估其真实回报,超额收益被系统性压低。做长期对比应优先使用全收益指数,或至少保证板块与基准口径一致。
  4. 基日与基点:不同指数基日不同,直接比较点位无意义,必须统一转换为区间涨跌幅或归一化净值。
实操建议:板块与基准必须使用同一口径——同为价格指数或同为全收益指数;同一复权方式;同一时间区间与同一交易日历。口径不一致是对齐阶段最常见的错误来源。

三、数据对齐与预处理的标准流程

拿到板块指数与基准指数的日收盘序列后,按以下步骤处理:

  1. 统一交易日历:以基准指数的交易日为准,对板块序列做左连接,缺失交易日标记为NaN,不要用前值填充后直接算收益(会制造零收益假象)。
  2. 处理停牌与缺失:板块指数一般不停牌,但数据源可能缺行。缺失日可用前收盘价填充点位,但需在收益计算时跳过该日,或改用区间首尾点位计算区间收益。
  3. 归一化:将两序列在起始日都除以各自起始点位,得到以1为起点的净值曲线,便于同图对比。
  4. 计算日收益率:r = P_t / P_{t-1} − 1,注意首日为NaN。
  5. 计算超额收益:日超额 = 板块日收益 − 基准日收益;累计超额可用净值比(板块净值 / 基准净值)或逐日超额累加(近似)。

下面用一段示例代码展示对齐与预处理的核心逻辑(示例数据为假设值,仅用于说明流程):

import pandas as pd

# 假设已读取两个DataFrame:sector、benchmark,均含 date、close 两列
df = pd.merge(
    benchmark[['date', 'close']].rename(columns={'close': 'bm'}),
    sector[['date', 'close']].rename(columns={'close': 'sec'}),
    on='date', how='left'          # 以基准交易日历为准
).sort_values('date').reset_index(drop=True)

df['sec'] = df['sec'].ffill()       # 缺失日沿用前收盘点位
df['bm_nav']  = df['bm']  / df['bm'].iloc[0]
df['sec_nav'] = df['sec'] / df['sec'].iloc[0]
df['bm_ret']  = df['bm'].pct_change()
df['sec_ret'] = df['sec'].pct_change()
df['excess']  = df['sec_ret'] - df['bm_ret']
df['cum_excess'] = df['sec_nav'] / df['bm_nav'] - 1

处理完成后应做一次校验:两序列起止日期一致、无重复日期、首日净值均为1、累计超额与净值比结果一致。若发现某段区间板块净值长期横盘而基准正常波动,多半是缺失值被错误填充,需要回查原始数据。

四、选择与对齐的决策关系

下图把“分析目的—指数选择—口径校验—对齐处理”的关系串起来,帮助在实际操作中快速定位该选哪类指数、该检查哪些口径。

分析目的 行业强弱 / 风格轮动 / 主题 板块指数选择 申万行业 / 主题 / 宽基风格 基准指数选择 沪深300 / 中证500 / 中证全指 可比性校验(口径一致) 市值风格相近 · 价格/全收益同口径 · 同一交易日历 · 同一区间 数据对齐与预处理 统一日历 → 缺失处理 → 归一化净值 → 日收益 → 超额收益 校验:起止一致 · 无重复日期 · 首日净值=1 · 累计超额与净值比一致 可计算的超额收益序列 日超额 · 累计超额 · 区间超额(口径一致、可复现) 常见口径陷阱 • 价格指数 vs 全收益 • 大小盘风格错配 • 调样日前后跳变 • 缺失值前值填充 • 交易日历不一致 • 直接比较点位 • 区间起止不统一 任一陷阱都会让超额 收益结论失真

五、一个选择示例

假设要分析“2023年新能源板块相对市场的超额表现”。板块侧选中证新能源指数,基准侧若选沪深300,则新能源板块中大量中小市值成分与沪深300的大盘风格不匹配,超额里混入小盘beta。更合理的做法是:基准选中证全指或与新能源市值分布更接近的宽基,并确认两者均为价格指数或均为全收益指数。若分析目的是“新能源相对大盘蓝筹的强弱”,则沪深300反而是合适基准——没有绝对正确的基准,只有与分析目的匹配的基准。