3. 涨跌幅计算与复权处理

在板块与基准的对比分析中,最基础也最容易出错的环节,就是收益率序列的构造。很多初学者会直接拿行情软件上显示的“涨跌幅”列做对比,结果发现长期曲线与真实持有体验严重不符——问题往往出在复权处理上。本节围绕三个核心问题展开:日涨跌幅怎么算、区间涨跌幅怎么算、复权为什么会影响长期对比,并给出可复现的计算流程。

一、先明确参照约定:收盘价与收益率方向

本节统一采用“后向收益率”定义:第 t 日收益率 rt = (Pt − Pt−1) / Pt−1,其中 P 为收盘价(或收盘点位)。正号表示上涨,负号表示下跌,全文与图示保持一致。若使用对数收益率 ln(Pt/Pt−1),其可加性更好,适合多日累加,但单日展示仍以简单收益率为主,二者在单日小幅波动下差异极小。

二、日涨跌幅的计算

板块指数的日涨跌幅,本质是成分股按权重加权的价格变动。实务中我们通常直接取板块指数点位计算,而不必逐只成分股重算,因为指数编制方已完成加权。计算时要注意三点:

  • 停牌与缺失值:若某日指数无成交或数据缺失,不能简单用前值填充后算 0 收益,应先确认数据源是否已做前向填充,避免把“无数据”误判为“零波动”。
  • 除权除息日:个股在分红送转日会出现价格跳空,若指数未复权,当日涨跌幅会被低估甚至为负,这是复权问题的直接来源。
  • 基准对齐:板块与基准(如沪深300)必须使用同一交易日历,遇到一方停市需对齐后再计算,否则收益率序列错位。

以某示例板块为例(以下数据为教学假设,非实测):假设板块指数前收 1250.00,当日收 1268.75,则日涨跌幅 = (1268.75 − 1250.00) / 1250.00 = 1.50%。基准前收 3800.00,当日收 3819.00,日涨跌幅 = 0.50%。当日超额收益 = 1.50% − 0.50% = 1.00 个百分点。注意超额收益用“百分点”表述,而非百分比,避免混淆。

三、区间涨跌幅:不能把日收益率简单相加

区间涨跌幅的正确算法是链式累乘:R区间 = ∏(1 + rt) − 1。若区间内日收益分别为 +1.50%、−0.80%、+0.60%,则区间收益 = 1.015 × 0.992 × 1.006 − 1 ≈ 1.29%,而不是 1.50 − 0.80 + 0.60 = 1.30%。两者接近但不等,区间越长、波动越大,差异越明显。这也是为什么长期对比必须用累乘而非求和。

实操建议:在表格中同时保留“日收益率”“累计净值(从1开始累乘)”“区间涨跌幅”三列。累计净值曲线是判断复权影响最直观的工具,净值曲线的斜率变化能立刻暴露除权跳空。

四、复权处理:长期对比的关键分水岭

不复权价格在除权除息日会产生向下跳空,若直接用不复权价计算收益率,会把“分红送转导致的机械下跌”误读为“真实亏损”。复权分为前复权与后复权:前复权以当前价为基准向前调整历史价,适合看近期走势;后复权以历史价为基准向后调整,适合计算长期真实收益。做板块与基准的长期超额对比时,应统一使用后复权(或统一使用前复权),且两者不可混用。

下图展示了同一板块在除权日附近,不复权与后复权两条价格路径的分叉,以及由此导致的日收益率与累计净值差异。图中标注了除权跳空点、复权修正后的连续路径,以及区间累乘得到的净值终点对比。

复权处理对价格路径与累计净值的影响(教学示意) 交易日 价格 除权跳空 复权修正后连续 不复权价格(含跳空) 后复权价格(连续) 区间累计净值对比 不复权累乘 0.86 后复权累乘 1.12 基准累乘 1.02 超额(后复权−基准)≈ +10 个百分点

从图中可以读出两个关键判断:第一,不复权路径在除权日出现明显向下跳空,若直接累乘,区间净值被低估为 0.86;第二,后复权路径连续,累乘净值 1.12,与基准 1.02 相比超额约 +10 个百分点。若误用不复权数据,会得出“板块跑输基准”的错误结论。这就是复权处理对长期对比的决定性影响。

五、实战计算流程:构造日度收益率序列

下面给出一个可直接套用的计算流程,以板块指数与基准指数为对象,输出对齐后的日收益率与累计净值表。示例参数为教学假设:板块代码 BK0001,基准代码 000300,区间为 2024-01-02 至 2024-01-10,共 7 个交易日。

步骤1 取数:分别拉取板块与基准的后复权收盘价,按交易日升序排列
步骤2 对齐:取两序列交易日的交集,缺失日剔除并记录
步骤3 日收益:r_t = P_t / P_{t-1} - 1(首日无收益,置空)
步骤4 累乘:NAV_t = NAV_{t-1} × (1 + r_t),NAV_0 = 1
步骤5 超额:excess_t = r_板块,t - r_基准,t(百分点)
步骤6 区间:R = NAV_末 / NAV_初 - 1,分别对板块与基准计算

假设示例数据如下(教学假设,非实测):板块后复权收盘价依次为 1000、1015、1007、1013、1025、1018、1030;基准依次为 3800、3819、3805、3812、3825、3818、3830。按上述流程,板块首日收益为空,次日 1.50%,第三日 −0.79%,第四日 0.60%……累乘至末日净值约 1.030;基准累乘净值约 1.008。区间超额约 +2.2 个百分点。读者可用这段数据在表格软件中复算,验证链式累乘与简单求和的差异。

常见错误:把“区间涨跌幅”直接写成末日收盘价除以首日收盘价再减 1,却使用了不复权价;或在拼接多段数据时混用了前复权与后复权。前者会低估长期收益,后者会造成净值曲线在拼接点突变。务必在数据表中标注复权方式与数据来源日期。

六、结果如何判断

完成序列构造后,先看三件事:一是日收益率序列是否存在异常跳变(超过 ±10% 的单日值需回查除权或数据错误);二是累计净值曲线是否平滑,出现台阶式突变通常意味着复权不一致;三是区间超额收益的符号与量级是否与日度超额均值方向一致,若长期超额为正但日度均值接近零,说明收益集中在少数交易日,需进一步做胜率与盈亏比分析。只有确认复权口径统一、交易日对齐、累乘无误,后续的板块与基准对比才具备可信度。