halo 的技术博客

返回

核心结论:做空 VIX 期货不是套利,是卖保险。它的收入只有保费那一项,而保费在观测到的「升水」里只占 69%——剩下 31% 是数学幻觉,谁也没在付这笔钱。

关于波动率 carry,最常见的描述是:

VIX 期货长期处于升水(contango),做空近月、持有到期,就能吃到期限结构的展期收益。

这句话把一笔保险生意描述成了一笔套利。差别在于:套利的对手方是犯错的人,保险的对手方是买保险的人——他们没犯错,他们只是在付钱转移风险。而卖保险的人,收益封顶、损失不封顶。

本文把两件事分开量化:升水里有多少是真钱,以及为什么这笔生意的死法是内生的

左:VIX 期货升水拆成两块,红色是别人付的保费(占展期收益 69%),蓝色是凸性和均值回复(不是钱);右:7 条分位路径,中位净值几乎永远贴着本金线,而回撤中位 73%

一、模型:让保费成为一个可以关掉的开关#

log(VIX)\log(\text{VIX}) 建成带跳跃的 OU 过程(均值回复速度 κ=4.0\kappa=4.0,半衰期约 44 个交易日;中枢 18;扩散 ξ=0.75\xi=0.75)。期货按风险中性期望乘以保费因子定价:

F(x,τ)=exp ⁣(m+v2)无偏期望×[1+VRP(1eκτ)]保费F(x,\tau) = \underbrace{\exp\!\left(m + \tfrac{v}{2}\right)}_{\text{无偏期望}} \times \underbrace{\left[1 + \text{VRP}\cdot(1-e^{-\kappa\tau})\right]}_{\text{保费}}

保费随剩余期限单调递增,且 τ0\tau \to 0 时精确归零(到期必须收敛到现货)。

自洽性检验τ0\tau \to 0 时期货收敛到现货,偏差 4.09e-08

这个设定的关键在于:VRP 是一个可以单独设为 0 的开关,而关掉它以后曲线依然是升水的。 这就把「有升水」和「有钱赚」两件事分开了。

二、展期收益的可加分解:69% 是保费,31% 是幻觉#

在中枢处持有一张 30 日合约,让它变老一天:

分量bp/日年化占比
保费衰减(是钱)+9.575+24.13%68.7%
凸性 / 均值回复(不是钱)+4.374+11.02%31.4%
合计展期收益+13.945+35.14%100%

可加性核对偏差 4.19e-07

第二项为什么不是钱?因为它来自 E[eX]>eE[X]E[e^X] > e^{E[X]} 这个 Jensen 不等式,以及曲线向中枢回归的形状。你持有仓位期间,同一个凸性会以相反符号出现在损益里。它在静态曲线上看得见,在动态损益里会被抵消掉。

看着期限结构说「这里有 35% 的年化 carry」,其中 11 个百分点是在数自己的影子。

三、决定性对照:把保费设为 0,曲线照样升水#

这是全文最重要的一张对照表。

基准(VRP=0.10)安慰剂(VRP=0)
M1→M2 升水+3.123%+0.837%(依然升水)
中位 CAGR−1.34%−22.54%
中位 Sharpe+0.232−0.249
5 年赚钱的路径47.53%12.83%

曲线形状没有消失,钱消失了。

再加两条安慰剂把机制彻底锁死:

安慰剂实测解析偏差
零扩散 + 零跳跃+26.6564%26.6665%1.01e-02 pp
零波动 VRP=0−0.4868%−0.4789%7.96e-03 pp

在一个完全没有风险的世界里,VRP 是唯一的收入来源:拿掉它,年化从 +26.66% 精确塌到 −0.49%(只剩交易成本)。

这条对照的实践含义很直接:任何靠观察曲线形状来判断波动率 carry 值不值得做的方法,在方法论上就是错的。 升水是可观测的,保费不是。而只有后者是收入。

四、真正的不对称不是凹性,是可达区间#

这里有个几乎所有科普都讲错的地方。

标准说法是「空头对 VIX 是凹的,涨得越多亏得越狠」。但真做一遍对称百分比冲击,结论是反的:

VIX 变动空头损益线性外推偏差
−50%+34.98%+31.00%+3.99%
−20%+12.94%+12.40%+0.54%
+20%−11.99%−12.40%+0.41%
+50%−28.64%−31.00%+2.36%
+120%−63.19%−74.40%+11.21%
+200%−97.86%−123.99%+26.13%

±50% 时反而是赚得比亏得多(+34.98% vs −28.64%)。因为在对数空间里,−50% 是比 +50% 更大的一步;而且期货对现货的传导带阻尼。

那危险从哪来?

左:收益天花板 +34.98%(VIX 跌到物理下界 9),而损失没有下界;中:保费只买收益,回撤几乎不随 VRP 变;右:Sharpe 几乎无法区分,归零概率差两个数量级

从可达区间。VIX 有物理下界(约 9),却没有上界。

方向极端情形损益
最好的情况VIX 从 18 跌到下界 9+34.98%(这是天花板)
常见的坏情况VIX 涨到 36(+100%)−63%
真实发生过的VIX 涨到 54(+200%)−97.86%

收益封顶在 +35%,损失不封顶。 而 VIX 翻倍每隔几年就发生一次,VIX 跌到 9 是几十年一遇。

把不对称归因于「凹性」是把一个二阶效应当成了主因。真正的主因是一阶的:你在一个有下界没上界的变量上做空。

五、生死线:0.458 次跳跃/年#

跳跃对 log(VIX)\log(\text{VIX}) 的冲击为正、随后被均值回复慢慢抹平(单日上限设为 +200%,防止出现数学上可能、现实中不存在的极端)。扫描崩塌频率:

# 单日损益:持有一张 tau1 的合约,它变老一天
f_prev, _ = fut_price(x, tau1)                    # 今天的价格
x = x + kappa * (THETA - x) * dt + xi * dw + jump # VIX 演化
f_hold, _ = fut_price(x, tau1 - dt)               # 同一张合约,明天
gross = -w * (f_hold - f_prev) / f_prev           # 做空
net   = gross - cost_bp / 1e4 * (abs(w) * ROLL_FR + turnover)
python
跳跃/年中位 CAGR平均 CAGR中位回撤净值<10%Sharpe赚钱比例
0.00+13.12%+15.38%62.14%0.43%+0.49871.87%
0.25+6.00%+8.25%67.33%1.23%+0.36560.87%
0.50(基准)−1.21%+1.18%72.53%2.90%+0.23247.67%
1.00−13.17%−11.15%81.57%10.30%+0.01428.07%
2.50−42.58%−40.31%96.34%62.43%−0.5842.37%
4.00−61.60%−59.66%99.44%94.13%−1.0310.03%

中位 CAGR 的过零点在 0.458 次跳跃/年。基准是 0.5 次/年。

也就是说:这个策略站在盈亏线的错误一侧,但只错了 8%

这才是波动率 carry 真正的性质——它不是一个「好策略」或「坏策略」,它是一个参数极度敏感的策略,而它最敏感的那个参数是最不可估计的那个。「未来十年平均一年崩几次」这个数,没有任何人能提前知道,而它决定了 +13% 还是 −13%。

六、保费只买收益,不买安全#

VRP中位 CAGRSharpe中位回撤净值<10%赚钱比例
0.000−22.44%−0.24185.50%18.40%12.67%
0.060−10.13%+0.04777.60%6.57%32.17%
0.100(基准)−1.21%+0.23272.53%2.90%47.67%
0.160+13.26%+0.50865.51%1.00%71.87%
0.220+29.11%+0.76759.42%0.20%86.73%

盈亏平衡 VRP ≈ 0.1050,基准 0.10,安全边际 −5.0%

注意最右边那列和中间那列的对比:VRP 从 0 涨到 0.22,中位 CAGR 从 −22% 变成 +29%(跨度 51pp),而中位回撤只从 85.5% 降到 59.4%

保费买的是收益,不是安全。 无论保费多高,这笔交易的形状不变:你仍然会经历 60%+ 的回撤。区别只是回撤之后还剩不剩钱。

这就是为什么「现在 VRP 很高,所以卖波动率很划算」这句话只说对了一半——它确实提高了期望,但对你能不能扛过中途那段完全没有帮助。

七、四种仓位口径:Sharpe 骗人,尾部不骗人#

左:VRP=0 的安慰剂对照分布;中:中位 CAGR 过零点在 0.46 次跳跃/年;右:12 宇宙 CV=0.4625

口径中位 CAGRSharpe中位回撤95% 回撤净值<10%
恒定名义 1x−1.03%0.23672.32%92.82%2.93%
恒定 vega(VIX 高时缩仓)−4.47%0.18373.81%90.74%1.75%
波动目标 30%+0.86%0.22362.22%86.21%0.50%
恒定名义 + 25% 止损−2.05%−0.09026.22%35.10%0.00%

中位 Sharpe 极差只有 0.326,而净值<10% 的概率差 292.5 倍。

前三种口径的 Sharpe 在 0.18~0.24 之间——在任何一份月度业绩报告里,这三个数字无法区分。而它们的归零概率是 2.93%、1.75%、0.50%。

止损那一行更有意思:它的 Sharpe 是四个里最差的(−0.090),却是唯一一个把 95% 回撤压到 35% 以内、归零概率精确为 0 的。

用 Sharpe 评价卖波动率策略,测的恰好是这个策略唯一不重要的那一维。

八、时间与幸存:等待期间的曲线长得像已经确认了#

持有期中位 CAGR赚钱比例净值<10%中位回撤
126 日+2.12%51.17%0.00%30.30%
252 日+1.11%51.03%0.00%41.39%
504 日−1.17%48.43%0.13%54.71%
1260 日−1.21%47.67%2.90%72.53%
2520 日−1.63%45.80%9.03%84.78%

中位 CAGR 几乎不随持有期变化(在 −1.6% 到 +2.1% 之间),但归零概率单调爬升,回撤中位数从 30% 涨到 85%。

两个更刺眼的数字:

  • 5 年内至少经历一次单日 −20% 的路径占 77.78%,首次中位发生在第 403 个交易日
  • 5 年赚钱的路径中,仍有 88.3% 中途回撤超过 50%

也就是说:赚钱和舒服是两件几乎不相交的事。 那 47% 赚到钱的人里,接近九成在中途见过腰斩。

九、样本量红线:问题不是要等多久#

口径需要样本
日频 t 检验(均值 +4.52 bp,SD 317.4 bp)78.1 年
年度口径(均值 +11.40%,SD 50.23%)77.7 年

两个口径差 0.99 倍——这次日频和年频给出了一致答案,说明这里的问题不是自相关或聚合口径。

问题在另一个地方:前 2 年赚钱的路径中,有 30.7% 在第 5 年变成亏损。

这才是波动率 carry 最危险的性质。它不像一个「需要长期验证的策略」,它像一个已经被验证过的策略——因为在崩塌之前,净值曲线又稳又漂亮,回撤小、胜率高、Sharpe 看起来是正的。

日收益偏度 −1.12、峰度 13.1、最差单日 −65.6%。这些数字在崩塌发生前一天,在样本里是看不到的。

12 宇宙稳健性:中位 CAGR 均值 −1.30%,SD 0.60,CV=0.4625(这个 CV 明显高于本系列其他文章,本身就是个信息:这个策略的结果对随机种子高度敏感,因为它的损益由少数几次跳跃决定)。

十、实践清单#

  1. 不要用期限结构判断值不值得做。升水是可观测的,保费不是,而只有保费是收入。VRP=0 的世界里曲线照样升水 0.84%
  2. 展期收益要先打七折。观测到的 35% 年化里,只有 24 个百分点是保费,11 个百分点是凸性幻觉
  3. 不对称的来源不是凹性,是可达区间。收益封顶在 +35%(VIX 跌到物理下界),损失不封顶
  4. 不要用 Sharpe 比较卖波动率策略的仓位方案。Sharpe 极差 0.326 而归零概率差 292 倍
  5. 止损是这里唯一真正有效的旋钮,代价是它会让 Sharpe 变成四个方案里最差的——如果你的考核看 Sharpe,你会被迫拆掉唯一有用的保护
  6. VRP 高不等于安全。保费从 0 涨到 0.22,中位回撤只从 85% 降到 59%
  7. 警惕前两年的漂亮曲线。30.7% 的路径会在第五年翻负,而它们前两年看起来和真正赚钱的那批没有区别

最后回到那个最初的问题:波动率 carry 是不是一门好生意?

它是一门真实的生意——有真实的客户(买保护的人)、真实的收入(保费)、真实的服务(承担别人不想要的风险)。 这一点和很多伪 alpha 不同,它的钱有明确来源。

但它的收益封顶、损失不封顶,生死取决于一个没人能估准的参数,而且在它杀死你之前,它的业绩报告会一直很好看。

这不是一个可以「长期持有」的策略,是一个需要每天决定要不要继续的仓位。 而这两者的区别,恰好是大多数人亏在里面的原因。

波动率 Carry:VIX 期货展期收益的来源与崩塌
https://blog.halo26812.eu.org/blog/volatility-carry-vix-futures-roll
Author halo
Published at 2026年8月7日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨