4. 超额收益定义与计算

在板块轮动与相对强弱分析中,绝对涨跌幅只能说明“涨了多少”,而超额收益回答的是“比基准多涨或少跌了多少”。本节聚焦超额收益的两种常见定义——算术差与几何差,并给出板块相对基准的日度、区间超额收益实现方式,以及结果合理性的验证思路。

一、两种定义的本质区别

设板块在某一区间的收益率为 R_p,基准(如沪深300、中证全指或行业等权指数)同期收益率为 R_b。两种定义分别为:

  • 算术差(Arithmetic Excess):E_arith = R_p − R_b。直接相减,单位是百分点,含义直观,适合单期、短周期(如日度)比较,也是多数行情软件“相对收益”列的默认口径。
  • 几何差(Geometric Excess):E_geo = (1 + R_p) / (1 + R_b) − 1。先还原为净值比再减 1,衡量的是“相对净值增长倍数”,具有可连乘性,适合多期累计与长期区间比较。

两者在单期数值接近,但区间越长、波动越大,差异越明显。举例:板块两期分别 +50%、−30%,基准两期分别 +10%、+10%。算术差逐期相加为 (40%) + (−40%) = 0;而几何口径下板块累计净值为 1.5×0.7 = 1.05(+5%),基准为 1.1×1.1 = 1.21(+21%),几何超额为 1.05/1.21 − 1 ≈ −13.22%。可见算术差在跨期累加时会失真,几何差才与真实持有体验一致。

同一组输入,两条计算路径 输入 板块收益 R_p 基准收益 R_b (日度或区间) 算术差路径 E = R_p − R_b 单位:百分点 可逐期相加 几何差路径 E = (1+R_p)/(1+R_b) − 1 先还原净值再相除 可跨期连乘 适用场景 单日强弱、盘中对比 多板块横向排序 快速归因 适用场景 区间累计超额 组合相对净值曲线 长期业绩评价 提示:区间超额优先用几何差;若用算术差累加,需说明口径,避免与净值曲线不一致

二、日度超额收益的实现

日度计算的关键是“对齐”。板块指数与基准指数的交易日、复权方式、停牌处理必须一致,否则超额收益会混入口径噪声。实操中建议按以下顺序处理:

  1. 取板块与基准的后复权收盘价序列,按交易日取交集对齐,缺失值不填充、直接剔除该日。
  2. 计算日收益率:r_t = P_t / P_{t-1} − 1,首日无收益。
  3. 按定义计算日超额:算术差 e_t = r_p,t − r_b,t;几何差 e_t = (1+r_p,t)/(1+r_b,t) − 1。
  4. 对日超额做描述统计:均值、标准差、胜率(e_t > 0 的占比)、信息比率近似值 mean(e)/std(e)×√252。

下面是一段可直接运行的 Python 示例(示例数据为构造值,仅用于演示计算流程):

import numpy as np
import pandas as pd

# 示例:构造 5 个交易日的板块与基准后复权收盘价
dates = pd.date_range("2024-01-02", periods=5, freq="B")
p_board = pd.Series([1000, 1012, 1005, 1020, 1035], index=dates)
p_bench = pd.Series([3800, 3819, 3805, 3830, 3845], index=dates)

r_p = p_board.pct_change().dropna()
r_b = p_bench.pct_change().dropna()

e_arith = r_p - r_b
e_geo   = (1 + r_p) / (1 + r_b) - 1

summary = pd.DataFrame({
    "板块收益": r_p, "基准收益": r_b,
    "算术超额": e_arith, "几何超额": e_geo
})
print(summary.round(6))
print("日超额均值(算术):", round(e_arith.mean(), 6))
print("日超额胜率:", round((e_arith > 0).mean(), 4))

运行后可观察到:单日算术差与几何差数值非常接近(差异在万分之几量级),这正是短周期下两者近似的原因;但胜率、均值等统计量会随口径略有不同,报告中应注明所用定义。

三、区间超额收益的实现

区间超额不能简单把日超额相加。正确做法是先算区间累计收益,再套用定义:

  • 区间累计:R = ∏(1 + r_t) − 1,等价于 P_end / P_start − 1。
  • 区间算术超额:R_p − R_b。
  • 区间几何超额:(1+R_p)/(1+R_b) − 1,也可写成 (P_p,end/P_p,start) / (P_b,end/P_b,start) − 1,即相对净值比。

若需要“逐日累计超额净值曲线”,应使用几何口径的连乘:NAV_t = ∏(1 + e_geo,s),该曲线终点即等于区间几何超额 +1。用算术差累加得到的曲线会随波动放大而偏离真实相对净值,只适合做粗略的强弱观察。

四、结果合理性验证

计算完成后,建议做四项交叉校验,避免“算得出但算错了”:

校验项方法合理预期
端点一致性用首尾收盘价直接算区间收益,与逐日连乘结果比对差异应小于 1e-8(浮点误差级)
口径一致性同一区间分别用算术、几何计算两者同号;数值差异随区间波动增大而扩大
基准自比令板块 = 基准超额恒为 0(两种定义都应严格为 0)
极端值排查检查单日超额绝对值是否异常大若超过 ±15%,优先怀疑复权、停牌或数据错位
验证小技巧:把板块和基准互换,几何超额应满足 E(A,B) = −E(B,A)/(1+E(B,A)),而算术超额满足简单反号。用这一关系可快速判断实现是否写反了分子分母。
常见错误:①用不复权价格计算,除权日会产生虚假超额;②板块与基准交易日未对齐,错位一天导致超额符号翻转;③把日度算术超额直接累加当作区间超额,长区间下误差可达数个百分点。报告与图表中务必标注“算术口径”或“几何口径”。

把上述流程固化为函数后,日度与区间超额即可在同一套代码中复用:输入两张对齐的价格序列,输出日度明细表、区间汇总与累计超额净值曲线,再配合四项校验,就能保证超额收益的计算既符合定义,也经得起复核。