2026-09-16 修订。 我重新检查了旧 notebook、逐日价格路径和 Carr and Wu (2016) 的经验实现。2025 年的更新把两种 OEV 口径说反了:原文的经验步骤仍先估计历史 ORV,再将 ORV 映射为 BMS 价值、进行指数加权并反推出 OEV;“使历史 delta-hedged P&L 的指数加权平均为零”则是我这次采用的 direct-P&L 口径。它更直接对应 OEV 的定义,但不等于原文的经验估计程序。
旧结果偏高也不只是因为选择了哪一种 OEV 口径。更直接的原因包括:同一价格路径内让执行价随现货变动、把周频路径按日频年化、Pandas 索引错位、跨不同时点直接平均美元期权价格,以及接受未经变号区间和残差检验的
fsolve输出。下文已经按修正后的计算重写,并在相应位置说明旧结论为何不再成立。
这篇文章来自一门 Seminar 的论文复现。我尝试复现 Carr and Wu (2016)1 的 OEV、VGVV 状态空间模型和收益预测结果。
1 问题与结论
Carr and Wu (2016) 提出 VGVV model2,直接描述 BSM implied volatility 和 option expected volatility3 的动态。其经验分析可以分成三层:
- 在风险中性测度和统计测度下分别指定标的、波动率和 return–volatility correlation 的局部动态。未知状态为 $(m_t,m_t^{\mathbb P},w_t,\eta_t,v_t,v_t^{\mathbb P},\rho_t,\rho_t^{\mathbb P})$。
- 从无动态套利条件得到两个关于 implied variance 与 expected variance 的二次方程。给定八个状态,便能计算同一天各 $(k,\tau)$ 格点上的 IV 和 OEV;反过来,两张波动率曲面也约束这些状态。
- 使用 Unscented Kalman Filter(UKF)4从每周曲面中提取状态,再由状态构造 volatility risk premium 和 return risk premium。
模型关注波动率曲面而不是期权价格本身。这和市场以 BSM implied volatility 报价的习惯一致,也避免为瞬时方差过程指定一套长期不变的完整参数。代价是状态识别高度依赖 IV/OEV 曲面的构造:OEV 中的估计错误会沿着 measurement equation 进入统计测度状态,最终影响风险溢价和收益预测。
修正后,direct-P&L OEV 的 25 个无条件均值已接近原文,UKF 对 OEV 曲面的拟合也明显改善;但由状态构造的 RRP 没有恢复原文报告的中长期预测优势。这个差异在更接近原文经验步骤的 BMS-value OEV 下仍然存在。本文因此把 OEV 均值、状态识别和样本外预测分开评价。
2 模型与估计量
2.1 BSM 隐含波动率曲面的动态假设
市场中存在无风险债券、风险资产以及写在该资产上的连续欧式期权。风险中性测度下,标的资产、隐含波动率及两者的相关结构满足
$$ \begin{align} \mathrm{d}S_t/S_t&=\sqrt{v_t}\mathrm{d}W_t,\\ \mathrm{d}I_t(K,T)&=\mu _t\mathrm{d}t+\omega _t\mathrm{d}Z_t,\\ \mathbb{E} _t\left[ dW_tdZ_t \right] &=\rho _t\mathrm{d}t, \end{align} $$2.2 ORV 与 OEV 的定义
Carr and Wu (2016) 将 realized volatility 和 expected volatility 定义在具体期权合约上,因此两者都依赖执行价和期限。
设期权在 $t$ 建仓、执行价为 $K$、到期日为 $T$,并以 $\{t_j\}_{j=0}^N$ 表示合约存续期内的日频对冲日期,其中 $t_0=t$、$t_N=T$。Option realized volatility(ORV)是使这份固定合约的离散 delta-hedged P&L 等于零的波动率输入:
$$ \begin{align} \text{ORV}(K, t, T) := &x \\ \text { s.t. } &\quad 0= B\left(S_T, x, T\right)-B\left(S_t, x, t\right) \ -\sum_{j=1}^N B_S\left(S_{t_{j-1}}, x, t_{j-1}\right)\left(S_{t_j}-S_{t_{j-1}}\right), \end{align} $$其中 $B(S_{t_j},x,t_j)$ 是波动率输入为 $x$ 时合约在 $t_j$ 的 BSM 价值,$B_S(S_{t_j},x,t_j)$ 是对应 Delta。这里的 $K$ 在整条路径中保持不变。
ORV 要到 $T$ 才能完全实现。若在 $t$ 以市场隐含波动率买入期权,并持有至到期同时执行 Delta 对冲,事后 P&L 可以写成以 ORV 与 IV 定价所得初始价值之差:
$$ \operatorname{P\&L}(t, T)=B(S, \operatorname{ORV}(K, t, T), t )-B\left(S, I_t(K, T), t\right) . $$Option expected volatility(OEV)是使买入并 Delta 对冲至到期的条件期望 P&L 等于零的波动率输入:
$$ \begin{align} \operatorname{OEV}(K, t, T) := &V_t(K,T) \\ \text { s.t. } &B\left(S, V_t(K, T), t ; K, T\right)=\mathbb{E}_t^{\mathbb{P}}[B(S, \operatorname{ORV}(K, t, T), t ; K, T)] \end{align} $$因此,买入该期权对应的 volatility risk premium 可写为
$$ \operatorname{VRP}_t(K, T)=B\left(S, V_t(K, T), t ; K, T\right)-B\left(S, I_t(K, T), t ; K, T\right). $$2.2.1 从定义到经验估计
定义中的条件期望不可直接观测。设历史路径由 $s$ 标记,并将每条路径的固定合约、日频 delta-hedged P&L 记为 $\Pi_s(x;k,\tau)$。本文的 direct-P&L 估计量直接求解
$$ \sum_s w_{t,s}\Pi_s(V_t;k,\tau)=0. $$Carr and Wu 的经验程序采用另一条路径:先求每条历史路径的 ORV $x_s$,再在归一化现货 $S=1$ 下计算相应 BMS 价值,对这些价值作指数加权,最后反解当前 OEV。两种方法分别对 P&L 和非线性的期权价值取平均,一般不会给出完全相同的结果。后文将 direct-P&L 作为主要修正口径,并以 BMS-value EMA 作为最接近原文经验实现的比较。
2.3 IV 曲面的无动态套利约束
静态无套利要求 BSM implied volatility 为正。动态无套利进一步要求 BSM put value $B(S,\sigma,t)$ 与其隐含波动率满足下列 PDE5:
$$ -B_t=\mu_t {B_\sigma}+\frac{1}{2} v_t S_{{t}}^2 B_{S S}+\rho_t \omega_t \sqrt{v_t} {S_t} B_{S \sigma}+\frac{1}{2} \omega_t^2 {B_{\sigma \sigma}} , $$下标表示 $B$ 的偏导数。令 $k:=\ln(K/S)$、$\tau:=T-t$,将 BSM Greeks 代入上式后,可以把 $I_t(K,T)$ 改写为 $I_t(k,\tau)$,并得到
$$ \begin{align} \frac{1}{2} I_t^2-\mu_t I_t \tau-\frac{1}{2} v_t-\rho_t \frac{\omega_t}{I_t} \sqrt{v_t}\left(k+\frac{I_t^2 \tau}{2}\right) -\frac{1}{2} \frac{\omega_t^2}{I_t^2}\left(k^2-\frac{1}{4} I_t^4 \tau^2\right) = 0 \end{align} $$$\mu_t$ 和 $\omega_t$ 的参数化决定了对当期 IV 曲面形状的约束。Carr and Wu 采用 proportional specification:
$$ d I_t(K, T) / I_t(K, T)=e^{-\eta_t(T-t)}\left(m_t d t+w_t d Z_t\right), \quad w_t, \eta_t>0. $$此时无动态套利约束变为
$$ \frac{1}{4} e^{-2 \eta_t \tau} w_t^2 \tau^2 I_t^4 +\left(1-2 e^{-\eta_t \tau} m_t \tau-e^{-\eta_t \tau} w_t \rho_t \sqrt{v_t} \tau\right) I_t^2 -\left(v_t+2 e^{-\eta_t \tau} w_t \rho_t \sqrt{v_t} k+e^{-2 \eta_t \tau} w_t^2 k^2\right) = 0 $$固定期限后,$I_t^2$ 关于 log-moneyness 的截面可以写成双曲线形式:
$$ I_t^2(k)=a_t+\frac{2}{\tau} \sqrt{\left(k-b_t\right)^2+c_t}, $$其中
$$ \begin{aligned} a_t & =\frac{-2\left(1-2 e^{-\eta_t \tau} m_t \tau-e^{-\eta_t \tau} w_t \rho_t \sqrt{v_t} \tau\right)}{e^{-2 \eta_t \tau} w_t^2 \tau^2}, \\ b_t & =-\frac{\rho \sqrt{v_t}}{e^{-\eta_t \tau} w_t}, \\ c_t & =\frac{\left(1-\rho_t^2\right) v_t}{e^{-2 \eta_t \tau} w_t^2}+\frac{\left(1-2 e^{-\eta_t \tau} m_t \tau-e^{-\eta_t \tau} w_t \rho_t \sqrt{v_t} \tau\right)^2}{e^{-4 \eta_t \tau} w_t^4 \tau^2}. \end{aligned} $$在统计测度 $\mathbb P$ 下,OEV 采用相同的 proportional specification:
$$ \begin{align} d V_t(K, T) / V_t(K, T)&=e^{-\eta_t(T-t)}\left(m_t^{\mathbb{P}} d t+w_t d Z_t^{\mathbb{P}}\right), \end{align} $$其中 $m_t^{\mathbb P}$ 与风险中性测度下的漂移不同,但两个测度共用瞬时 vol-of-vol $w_t$ 和期限衰减 $\eta_t$。
统计测度下的标的收益和 return–volatility correlation 满足
$$ \begin{align} &d S_t / S_t=\mu_t^{\mathbb{P}} d t+\sqrt{v_t^{\mathbb{P}}} d W_t, \\ &\mathbb{E}_t^{\mathbb{P}}\left[d W_t^{\mathbb{P}} d Z_t^{\mathbb{P}}\right]=\rho_t^{\mathbb{P}} d t . \end{align} $$相应的 OEV 约束为
$$ \frac{1}{4} e^{-2 \eta_t \tau} w_t^2 \tau^2 V_t^4 +\left(1-2 e^{-\eta_t \tau} m_t^{\mathbb{P}} \tau-e^{-\eta_t \tau} w_t \rho_t^{\mathbb{P}} \sqrt{v_t^{\mathbb{P}}} \tau\right)V_t^2 -\left(v_t^{\mathbb{P}}+2 e^{-\eta_t \tau} w_t \rho_t^{\mathbb{P}} \sqrt{v_t^{\mathbb{P}}} k+e^{-2 \eta_t \tau} w_t^2 k^2\right) = 0 $$给定八个状态,就能计算 $I_t(K,T)$ 和 $V_t(K,T)$;给定两张曲面,八个状态则必须同时满足上述约束。经验问题因而是:
- 如何从 $I_t(K,T)$ 和 $V_t(K,T)$ 的当期形状提取八个状态?
- 给定当期状态后,如何预测下一期曲面 $I_{t+1}(K,T)$ 和 $V_{t+1}(K,T)$?
Carr and Wu 使用 UKF 处理这两个问题。第 3 节先说明数据和 OEV 修正,第 4 节再回到状态空间估计。
3 数据与 OEV 修正
3.1 数据与预处理
经验分析需要 SPX option implied volatility、SPX 日度价格、利率和 dividend yield。
3.1.1 SPX 期权隐含波动率
原始 implied-volatility quotes 来自 OptionMetrics IvyDB US,覆盖 1997-01-08 至 2014-10-29,共 25,054,504 条记录。
预处理剔除成交量或 open interest 为零、最近三个交易日没有成交,以及价内但 implied volatility 缺失的期权。
Carr and Wu (2016) 从一家大型银行取得波动率矩阵,包含五个相对执行价和八个期限。现有归档则由 OptionMetrics 报价经 cubic spline 得到五个 moneyness,$K/S\in\{0.8,0.9,1.0,1.1,1.2\}$,以及五个期限,$\tau\in\{1,3,6,12,24\}$ 个月。修正后的周度面板包含 1997-01-08 至 2014-10-29 的 922 个可用周三;原文使用 930 个周三和 40 个格点。这里的“周度”只指 OEV 曲面的输出日期,每一条历史合约的对冲路径仍使用日频数据。
例如,1997-01-08 的预处理矩阵包含 25 个格点:
| t | tau (in year) | K/S | IV | |
|---|---|---|---|---|
| 1 | 1997-01-08 | 0.083333 | 0.8 | 0.305950 |
| 2 | 1997-01-08 | 0.083333 | 0.9 | 0.245290 |
| … | … | … | … | … |
| 25 | 1997-01-08 | 2.000000 | 1.2 | 0.179292 |
3.1.2 SPX 日度价格
归档中的 SPX 日度文件共有 10,505 个观测,覆盖 1982-01-04 至 2023-08-31,旧报告将来源记为 Bloomberg。OEV 在每个预测日使用此前十年的历史路径;最长合约期限为 24 个月,因此底层价格数据必须早于 OEV 周度样本至少十二年。
3.1.3 利率
日度无风险利率以 Federal Reserve nominal yield curve 中的 zero-coupon yield 近似6,mnemonic 为 SVENYXX。
3.1.4 Dividend yield
月度 dividend yield 由 Shiller 数据中的 dividend 除以 price 得到7。
3.2 修正后的 OEV 估计
理论定义和经验实现需要分开。OEV 的定义要求条件期望意义下的 delta-hedged P&L 为零;Carr and Wu 的经验步骤则先在历史路径上估计 ORV,将这些 ORV 映射为当前合约的 BMS 价值,对价值做指数加权,再反推出 OEV。为了区分两者,我保留了两套估计量:
- direct-P&L OEV:对每个 $(k,\tau)$,直接求解使历史路径 P&L 的指数加权平均为零的波动率。这是本文的主要修正口径。
- BMS-value EMA OEV:先求历史 ORV,再对归一化后的 BMS 价值做指数加权并反演。这一口径更接近原文的经验程序,作为稳健性比较。
两种估计都将执行价固定为路径起点的 $K=kS_0$,在路径内部使用日频 Delta 对冲,并按起点现货归一化 P&L。历史窗口为十年,权重按实际日历日计算:
$$ w_{t,s}\propto (1-0.03)^{\operatorname{age}(t,s)}. $$求根时先在 $0.5\%$ 到 $300\%$ 的波动率网格上寻找严格变号区间,再在选定区间内使用 Brent 法求解原始目标函数。没有变号区间的格点保留为缺失值。这样做会暴露识别失败,但不会把低波动率数值下溢形成的平台或未收敛的迭代值当作 OEV。
完整面板覆盖 1997-01-08 至 2014-10-29 的 922 个周三、五个期限和五个相对执行价,共 23,050 个 date–maturity–strike 观测。direct-P&L 面板有 22,827 个有效根,223 个格点无法识别;779 周的 25 个格点全部有效。BMS-value 面板能够得到 23,050 个 OEV,但它所依赖的历史 ORV 路径本身仍可能存在多个变号区间或无根,因而不能把“最终 OEV 无缺失”等同于逐条路径都被唯一识别。
下表将原文公布的 OEV 均值与修正后的 direct-P&L 均值并列。单位均为年化波动率百分点。
| 期限(月) | $K/S=0.8$ | 0.9 | 1.0 | 1.1 | 1.2 |
|---|---|---|---|---|---|
| Carr–Wu (2016) | |||||
| 1 | 20.48 | 20.08 | 17.56 | 17.57 | 18.56 |
| 3 | 20.04 | 19.35 | 17.59 | 15.98 | 16.20 |
| 6 | 20.09 | 19.08 | 17.72 | 16.41 | 15.59 |
| 12 | 19.62 | 18.92 | 18.20 | 17.28 | 16.35 |
| 24 | 18.92 | 18.37 | 17.96 | 17.61 | 17.21 |
| 修正后的 direct-P&L OEV | |||||
| 1 | 21.30 | 20.72 | 18.12 | 14.77 | 16.22 |
| 3 | 21.01 | 19.95 | 18.33 | 15.32 | 14.68 |
| 6 | 20.76 | 19.77 | 18.70 | 15.79 | 15.00 |
| 12 | 20.39 | 19.98 | 19.94 | 16.29 | 15.57 |
| 24 | 20.58 | 20.84 | 21.52 | 16.25 | 15.38 |
相对原文的 25 个均值,direct-P&L OEV 的平均误差为 $+0.18$ 个波动率点,MAE 为 $1.26$,RMSE 为 $1.48$;旧复现的对应数值为 $7.58$、$8.25$ 和 $10.88$。BMS-value OEV 的平均误差、MAE 和 RMSE 分别为 $+0.74$、$1.41$ 和 $1.86$。均值层面的接近只能说明曲面的无条件水平已大致修正,不能保证两套 OEV 具有相同的时间序列动态。
Carr–Wu、修正后的 direct-P&L、BMS-value 和旧复现 OEV 均值。点击图片查看原尺寸。
3.3 有根不等于唯一识别
ORV/OEV 目标函数并不保证在任意路径和格点上都有唯一根。一个月、$K/S=0.8$ 的历史路径中,能够识别出严格变号区间的比例明显低于平值期权;深度虚值短期限期权也会因为几乎从不行权而缺少有效信息。对这类格点,返回一个数值比保留缺失更容易,但它掩盖了估计量没有被样本识别这一事实。
历史路径中存在严格变号区间的比例。平值和中长期格点更容易识别。
例如在 2014-10-29,近期加权历史中几乎没有一个月期、终值高于初值 110% 的路径。此时 direct-P&L 的 $K/S=1.1$ call OEV 为 5.24%,BMS-value 估计为 15.35%。前者确实解出了样本矩条件,但目标函数斜率很小,经济上应视为弱识别结果,而不是精确预测。短期限翼部最好同时报告有效 ORV 比例、加权行权频率和根处目标函数斜率。
3.4 波动率变化的 CEV 回归
Carr and Wu 检验
$$ \log EVI_t(k,\tau)=\log C(\tau)+\beta\log I_t^2(k,\tau)+e_t, $$其中周度 IV 变化的平方按周频年化,并用 $\phi=0.97$ 平滑。这里的 $0.97$ 属于 CEV/EVI 递推,不能用来说明旧 OEV 的最终权重。将 EWMA 改为在每个 strike–maturity 组内独立递推后,25 个斜率与原文的平均绝对差从 0.422 降至 0.338。剩余差异主要集中在一个月和三个月的 $K/S=1.2$ 序列;这些序列在现有 IV 数据里有较长的平坦区间,因而既反映代码修正,也反映数据来源差异。
Carr–Wu、组内 EWMA 修正结果与旧报告的 CEV 斜率。
3.5 IV 与 OEV 的时间变化
修正后的序列仍能识别 1998 年和 2008 年的波动率冲击。OEV 相对 IV 的反应更平滑并带有滞后,这是后向历史窗口的直接结果。下面分别给出 BMS-value 和 direct-P&L 两种 OEV 口径的时间序列。
BMS-value exact:1、6、24 个月 IV/OEV 水平和 90%–110% skew。
direct-P&L exact:1、6、24 个月 IV/OEV 水平和 90%–110% skew。两图都基于五个期限和 922 个周三。
4 修正后的 UKF 状态提取
4.1 状态与观测方程
IV 和 OEV 曲面的当期形状只依赖八个状态
$$ (m_t,m_t^{\mathbb P},w_t,\eta_t,v_t,v_t^{\mathbb P},\rho_t,\rho_t^{\mathbb P}). $$为了自动满足参数约束,我在滤波状态中对 $w_t,\eta_t,v_t,v_t^{\mathbb P}$ 取对数,并用 Fisher transform 表示两个相关系数:
$$ X_t=\left[m_t,m_t^{\mathbb P},\log w_t,\log\eta_t,\log v_t, \log v_t^{\mathbb P},\log\frac{1+\rho_t}{1-\rho_t}, \log\frac{1+\rho_t^{\mathbb P}}{1-\rho_t^{\mathbb P}}\right]^\top. $$状态采用随机游走:
$$ X_t=X_{t-1}+\sqrt{Q\,\Delta t}\,\varepsilon_t, $$其中 $Q$ 为对角阵,$\Delta t$ 按相邻两个面板日期之间的实际周数计算。观测向量由同一天 25 个 IV 与 25 个 OEV 的对数组成。非线性测量函数 $h(X_t;k,\tau)$ 由第 2 节的两个无动态套利二次方程给出:
$$ y_t=h(X_t)+e_t,\qquad R=\operatorname{diag}(\sigma_I^2 I_{25},\sigma_V^2 I_{25}). $$因此需要估计八个过程方差和两个测量方差。修正实现使用 1997–1999 年的 156 周数据,最小化 Gaussian innovation quasi-log-likelihood;十个方差在 log 空间优化,每一次目标函数计算都从相同的初始状态与协方差重新运行 UKF。
4.2 实现上的约束
IV 与 OEV 都先按 $(\text{date},\text{maturity},\text{strike})$ 建立 25 列面板,再取共同日期。direct-P&L OEV 中无法识别的 223 个格点通过每期动态 observation mask 进入滤波,不做插值。遇到两周或三周的数据间隔时,过程噪声按实际间隔倍数增长。QML 参数估计完成后,才用固定的 $Q$ 和 $R$ 重新过滤 1997–2014 年完整样本。
两组确定性初值均参与优化。direct-P&L 模型的最佳起点在 100 次 L-BFGS-B 迭代后收敛,但两个起点的目标值仍有明显差异;所以这里得到的是可复现的条件最优解,不应称作全局最优。BMS-value 模型的两个起点收敛到几乎相同的目标值。
4.3 曲面拟合与状态序列
| OEV 面板 | IV RMSE | IV 平均 explained variation | OEV RMSE | OEV 平均 explained variation | $\sigma_V^2/\sigma_I^2$ |
|---|---|---|---|---|---|
| direct-P&L exact | 1.45 | 0.967 | 4.72 | 0.729 | 31.6 |
| BMS-value exact | 1.50 | 0.965 | 5.24 | 0.675 | 99.5 |
旧 UKF 在 25 个 OEV 格点中有 15 个 explained variation 为负;direct-P&L 修正后只剩一个。改善相当明显,但 OEV 的测量方差仍远大于 IV,状态识别仍主要受 OEV 曲面的噪声和缺少长期限数据限制。
下列每组图先给出 BMS-value exact,再给出 direct-P&L exact。图中的线是当前 25-cell 数据下的重构结果,不是原文 40-cell latent states 的逐点复制。
BMS-value exact:风险中性与统计测度下的瞬时波动率。
direct-P&L exact:风险中性与统计测度下的瞬时波动率。
BMS-value exact:风险中性与统计测度下的波动率漂移。
direct-P&L exact:风险中性与统计测度下的波动率漂移。两种口径的统计测度漂移在多个阶段都明显为负。
BMS-value exact:收益率—波动率相关系数。
direct-P&L exact:收益率—波动率相关系数。两种口径下的 $\rho_t^{\mathbb P}$ 在样本内都始终为负,没有复现原文中的换号。
BMS-value exact:共同的 vol-of-vol 系数 $w_t$ 与期限衰减系数 $\eta_t$。
direct-P&L exact:共同的 vol-of-vol 系数 $w_t$ 与期限衰减系数 $\eta_t$。BMS-value 重构的 $\eta_t$ 变动范围更宽,direct-P&L 结果则更集中。
direct-P&L 状态估计还有两个需要保留的诊断:$\rho_t<-0.99$ 的日期有 53 个,集中在样本前段;$\rho_t^{\mathbb P}$ 从未转为正值。BMS-value 估计消除了前一个边界问题,但没有改变后一个结论。现有数据只有 $\{1,3,6,12,24\}$ 月五个期限,而原文还使用 36、48、60 月,期限衰减和长期状态因此尤其容易弱识别。
4.4 Return risk premium 状态
按照原文式(28)附近的经验定义,本文构造
$$ \gamma_t=\frac{m_t^{\mathbb P}-m_t}{w_t\sqrt{v_t}},\qquad RRP_t=\gamma_t\rho_t^{\mathbb P}v_t^{\mathbb P}. $$direct-P&L 状态给出的原始 RRP 中位数为 $-0.06\%$、均值为 $8.42\%$,范围从 $-4.40\%$ 到 $210.30\%$。51.63% 的观测低于零,11.39% 高于 20%;若按照原文预测设定将 forecast 限制在 $[0,20\%]$,全样本有 63.02% 的 RRP 会被裁剪。如此高的裁剪比例说明预测结果会强烈依赖状态估计误差和边界处理,不能只看一条平滑后的状态曲线。
direct-P&L 与 BMS-value 两种口径的原始 RRP 及用于预测的裁剪结果。
5 样本外收益预测
原文后续用 VIX、传统 variance risk premium(VRP)和模型给出的 RRP 预测未来 SPY excess return。旧项目没有保存完整的预测代码和外部数据,因此我重新整理了 Cboe VIX、股息调整后的 SPY 价格以及 1、3、6、9、12 个月 USD LIBOR。9 个月 fixing 在原始序列停止后,以 6 个月和 12 个月简单利率对应的贴现因子作 log-linear interpolation,并在数据中单独标记。预测从 2000-01-05 开始,共有 766 个共同 forecast origins。扩展窗口只使用在预测时点之前已经完整实现的 lead returns;所有方法使用相同日期,模型预测和历史均值基准都采用同一个 $[0,20\%]$ 区间。
下表为样本外 $R^2$。正数表示优于递归历史均值,负数表示表现更差。
| 方法 | 1M | 3M | 6M | 9M | 12M |
|---|---|---|---|---|---|
| Carr–Wu VIX regression | 0.0010 | -0.0170 | 0.0080 | 0.0070 | 0.0100 |
| 修正后的 VIX regression | 0.0004 | -0.0199 | 0.0059 | 0.0051 | 0.0075 |
| Carr–Wu VRP regression | 0.0100 | 0.0400 | 0.0280 | 0.0040 | 0.0020 |
| 修正后的 VRP regression | 0.0103 | 0.0398 | 0.0251 | 0.0043 | 0.0040 |
| Carr–Wu RRP regression | -0.0090 | -0.0150 | 0.0540 | 0.0710 | 0.0860 |
| direct-P&L RRP regression | -0.0017 | -0.0091 | -0.0316 | -0.0436 | -0.0630 |
| BMS-value RRP regression | 0.0044 | -0.0079 | -0.0732 | -0.1174 | -0.1058 |
| Carr–Wu RRP direct | 0.0170 | 0.0610 | 0.1590 | 0.2230 | 0.2600 |
| direct-P&L RRP direct | -0.0046 | -0.0158 | -0.0144 | -0.0444 | -0.0559 |
| BMS-value RRP direct | -0.0189 | -0.0749 | -0.0912 | -0.1130 | -0.1318 |
VIX 和传统 VRP 的结果与原文很接近,各期限最大绝对差约为 0.0029。这为未来收益、利率扣减、扩展窗口和评价代码提供了外部检查。RRP 的结论则没有复现:direct-P&L 的回归预测和直接预测在五个期限上全部为负;BMS-value 口径只有一个月回归略为正,从三个月起同样为负。固定天数的预测终点和另一种 realized-variance 窗口不会改变这一方向。
原文与修正后结果的样本外 $R^2$。VIX/VRP 接近,RRP 没有恢复原文的长期优势。
累计预测误差图显示,VIX 和 VRP 大致延续原文的形态;两个 RRP 面板在 2008–2009 年急剧下降,并在样本末低于零。下面分别给出 BMS-value 和 direct-P&L 两种状态估计对应的结果。
BMS-value exact:累计历史均值平方误差减模型平方误差;曲线上升或位于零线上方表示模型相对历史均值占优。
direct-P&L exact:与 BMS-value 图使用相同的预测日期、期限和历史均值基准。
这些结果不能被解释为对原文经济机制的直接证伪。当前曲面只有 25 个格点,缺少三个长期限;direct-P&L 面板有少量缺失根,BMS-value 的路径 ORV 又存在多根选择;OEV 测量噪声显著高于 IV;外部市场数据也不是原文 Bloomberg vintage。能够得到的结论更窄:在两种经过修正的 25-cell OEV 构造和当前可复现数据下,RRP 没有恢复原文报告的长期预测改进。
6 结论
旧复现中过高的 OEV 主要来自合约定义、频率、索引、尺度和求根验证问题。修正这些问题后,direct-P&L OEV 的 25 个均值与原文相当接近;BMS-value 口径也给出相近的无条件曲面。二者仍有不同的时间序列动态和翼部识别强度,所以不能互换使用。
重新估计的 UKF 明显改善了 IV/OEV 曲面拟合,并生成了可以逐周审计的状态序列。VIX 和传统 VRP 的收益预测接近原文,说明预测目标和评价流程大体一致。RRP 的长期预测优势没有在 direct-P&L 或 BMS-value 两种状态模型中出现。剩余差异更可能来自 OEV 的动态识别、期限网格和数据 vintage,而不是一个还能通过调参消除的简单代码错误。
本文中的彩色图均为当前数据上的重新绘制,不复制原文图片;图轴在必要时按当前状态范围扩展。
附录:旧代码审计
展开查看旧实现为何推高 OEV
旧结果来自多处实现问题的叠加。最严重的一处是执行价。旧 BMS 函数把传入的相对执行价作用在整条价格路径上,等价于在每个对冲日设定
$$K_j=kS_j.$$这会在每个对冲日改变执行价,使初始价值、每日 Delta 和到期 payoff 不再属于同一份合约。修正后先把路径除以 $S_0$,再将 strike = relative_strike 固定一次,整条路径都使用同一个 $K/S_0$。
第二处问题来自 Pandas 的标签对齐:
rtn = (S - S.shift(1)).iloc[1:] / S.iloc[:-1]
分子和分母的日期索引不同。Pandas 会按标签取交集,使中间分母变成当期 $S_i$,首尾区间也会在后续乘法中被静默丢弃。修正代码将价格和 Delta 转成 NumPy 数组,并把对冲损益明确写为
$$\operatorname{HedgePnL}=\sum_{j=1}^{N}\Delta_{t_{j-1}}\left(S_{t_j}-S_{t_{j-1}}\right).$$旧 notebook 还存在以下问题:
- 先筛选周三数据,再把路径称作“daily delta-hedging”,并使用 $\sqrt{252}$ 年化;修正计算只以周三作为面板日期,单条合约路径内部仍使用全部日频观测和实际剩余日数。
- 活动代码求解的是 dollar-Gamma 近似,而不是原始价格与 Delta 定义下的离散对冲 P&L。Gamma 近似现在只保留作诊断。
- 对不同历史 SPX 水平下的美元期权价格直接做 EMA,再用当前 SPX 反演 OEV。修正后的 BMS-value 估计统一在 $S=1$ 下重定价,direct-P&L 则对 $S_0$ 归一化。
- 旧最终 notebook 使用 $\alpha=0.21$,即每个周度观测保留 0.79;这和七个日历日的 $0.97^7=0.808$ 接近,但 7、14、21 日的间隔都只衰减一次。修正权重直接使用实际日历日龄。
- ORV 和 OEV 都从 20% 出发调用
fsolve,没有变号区间、solver status 或残差检查。修正后只有严格变号区间内的 Brent 根才会被接受,最大根残差约为 $2.6\times10^{-13}$。 - CEV 回归虽然先按 $(k,\tau)$ 计算创新,却在堆叠后的全表上连续执行 EWMA,使前一个序列的末值成为下一个序列的初值。
- UKF 的活动代码直接手填八个过程方差和两个测量方差。注释中的优化函数会复用已经被前一次目标函数调用改变的 filter 状态,只计算第一个训练日期,并且仅返回 OEV SSE。
- IV 与 OEV 先分别筛选,再按当前行顺序拼接,没有验证 $(\text{date},\text{maturity},\text{strike})$ 键;一旦缺行或排序不同,观测就会进入错误的 measurement equation。
旧报告还漏掉了一个月 OEV 行、将后续期限整体错标,并重复打印了 24 个月行。这个排版错误不会改变估计本身,却使表格无法按期限核对。
Peter Carr, Liuren Wu, Analyzing volatility risk and risk premium in option contracts: A new theory, Journal of Financial Economics, Volume 120, Issue 1, 2016, Pages 1-20, ISSN 0304-405X, https://doi.org/10.1016/j.jfineco.2016.01.004. (https://www.sciencedirect.com/science/article/pii/S0304405X16000052) ↩︎
VGVV 是 Vega-Gamma-Vanna-Volga 的缩写。 ↩︎
Option Expected Volatility is a new concept proposed in Carr and Wu (2016). The definition of OEV can be seen in this subsection. ↩︎
个人感觉这篇讲解卡尔曼滤波的教程很易读: https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python。 ↩︎
It is important to note that the PDE is derived for the relation which the stochastic terms must satisfy to avoid dynamic arbitrage. In other words, this PDE is not used for solving the value function $B(S_t, I_t, t)$ (since it is already given), and the coefficients in the SDE are not deterministic as well. ↩︎
Source: https://www.federalreserve.gov/data/nominal-yield-curve.htm. ↩︎
Source: https://shillerdata.com/. The dividend yield is computed by dividing the dividend by the price of stock in the file “ie_data (xls)”. ↩︎
















