halo 的技术博客

返回

一句话版本#

VIX 期货大部分时间比 VIX 现货贵(contango),持有到期必然向现货收敛,于是做空 VIX 期货长期赚取「滚动收益」——但这本质是卖崩盘保险:细水长流地收保费,然后在某个星期一晚上一次性赔光。


一、VIX 期货不是 VIX#

先纠正一个几乎所有初学者都会犯的错误:你不能交易 VIX

VIX 是 CBOE 用 SPX 期权价格算出来的一个指数——它是 30 天隐含方差的平方根,是一个「读数」,不是一个可持有的资产。没有任何组合能精确复制它(能复制的是 VIX²,即方差互换,那是另一个故事)。

可交易的是 VIX 期货:一份关于「到期日那天 VIX 会是多少」的赌约。这个区别产生了三个直接后果:

  1. VIX 期货不需要满足现货套利关系。普通商品期货的升贴水受制于持有成本套利(买现货 + 存储 vs 买期货),但 VIX 现货无法持有,期货价格纯粹是市场对未来 VIX 的风险中性期望加上风险溢价——期限结构的形状完全由预期和溢价决定,没有套利力量把它钉死

  2. VIX 期货的波动远小于 VIX 现货。VIX 单日 +40% 时,1 个月期货可能只涨 +15%——因为期货赌的是「一个月后 VIX 在哪」,而 VIX 具有强均值回复,市场知道尖峰大概率会衰减。期货对现货的 beta 随剩余期限增加而衰减。

  3. 到期日强制收敛。无论中途怎么飘,期货最后结算于 VIX 的特殊开盘报价(SOQ)。这个收敛是整个基差交易的发动机。

二、期限结构:contango 是常态,backwardation 是警报#

把不同到期月份的 VIX 期货价格连成一条线,就是期限结构:

VIX 期货期限结构的两种状态

平静期(contango,约 75-85% 的时间):VIX 现货 13,1 月期货 15,2 月期货 16.5,曲线向上爬向长期均值 19-20。远月比近月贵,近月比现货贵。

恐慌期(backwardation):VIX 现货飙到 45,但 6 月期货只有 25——市场预期尖峰会衰减,曲线倒挂向下。

为什么 contango 是常态?两层原因:

第一层:均值回复的机械结果。 VIX 长期均值约 19-20,但它的中位数只有 15-16 左右——VIX 大部分时间趴在均值下方,偶尔暴力尖峰把均值拉上去。当现货低于长期均值时,「未来 VIX 的期望」自然高于现货,期货升水。

第二层:方差风险溢价(Variance Risk Premium)。 即便在均值回复之外,VIX 期货还系统性地比「客观期望」更贵。原因很朴素:做多 VIX 期货是买崩盘保险——股灾时 VIX 飙升,多头大赚,恰好对冲了股票组合的损失。这种「在你最惨的时候赔付」的资产,持有者愿意接受负的期望收益,就像你买车险不指望赚钱。保险的买方付溢价,卖方(期货空头)收溢价。

这就是基差交易的经济学地基:你赚的不是市场的错误,是保险费。 这个认知决定了后面所有的风险管理逻辑——保费收入是真实的,但赔付责任也是真实的。

三、滚动收益:期货怎么「滑」向现货#

Contango 状态下做空近月期货,盈利来自两个通道:

通道一:roll-down(滚落)。 假设期限结构不动,一份 1 个月期货今天定价 15.5(现货 14)。随着时间流逝,它的剩余期限缩短,在曲线上的位置向左移动——30 天后它必须等于现货。如果现货没动,期货价格会从 15.5 滑落到 14,空头赚 1.5 点。这是「曲线形状不变时的时间收益」,类似债券的 roll-down return。

通道二:现货本身回落。 如果做空时 VIX 处于小尖峰,现货的均值回复会额外送一程。

日化的 roll-down 大致是:

每日滚动收益FSS×1剩余交易日数\text{每日滚动收益} \approx \frac{F - S}{S} \times \frac{1}{\text{剩余交易日数}}

Contango 5% 且剩余 21 个交易日时,每天约 24bp——听起来不多,年化却相当可观。这正是 2010-2017 年间做空 VIX ETP(XIV、SVXY)成为散户「财富密码」的数学基础。

四、10 年受控模拟:把这门生意跑一遍#

真实 VIX 期货的连续数据需要处理换月拼接,且历史只有一个样本路径。我们用受控模拟看清结构:对数 VIX 用带跳跃的均值回复过程生成(高位时均值回复加速、压力期跳跃概率放大——两者都是公认的典型事实),1 个月期货价格 = 指数衰减权重下现货与长期均值的混合,再乘 1.045 的方差风险溢价因子。

做空策略的每日收益 = roll-down 分量 + 现货冲击传导分量,名义敞口固定为资金的 40%(这一点后面会证明是生死攸关的):

fut_ret = np.zeros(n_days)
for t in range(1, n_days):
    slide = (vix[t-1] - fut1[t-1]) / 21 / fut1[t-1]   # roll-down
    level = w * (log_vix[t] - log_vix[t-1])           # 现货传导
    fut_ret[t] = slide + level

EXPO = 0.40                                  # 敞口占资金 40%
short_ret = -fut_ret * EXPO

# 对照组:基差过滤,仅当昨日 contango > 2% 时持有空头
sig = (basis > 0.02).astype(float)
nav_naive = np.cumprod(1 + short_ret)
nav_filt  = np.cumprod(1 + short_ret * np.r_[0, sig[:-1]])
python

模拟出的现货、期货与基差:

模拟 10 年:VIX 现货、1M 期货与基差

Contango 占比 66%——比真实市场(约 80%)略保守,因为模拟里的跳跃聚集把更多时间推入了高波动状态。基差在平静期稳定为正(空头顺风收保费),尖峰期瞬间翻负(空头被雨打风吹去)。

五、三个核心实证结果#

结果一:赚是真赚,但回撤是 -51%#

做空 VIX 期货:无过滤 vs 基差过滤

无过滤做空(40% 敞口)10 年终值 2.29,年化 8.6%——但最大回撤 -51%。注意这已经是只用四成仓位的结果;如果满仓,净值直接归零(我们实际跑过:EXPO=1.0 时终值 0.00)。

这暴露了这门生意的第一条铁律:方差风险溢价的收割容量受制于复利数学,不是均值。做空 VIX 的日收益均值为正,但单日 -20% 级别的左尾会对复利净值造成不可逆的破坏——损失 50% 需要 +100% 才能回本。仓位不是收益的放大器,是生存概率的决定变量。

结果二:收益分布偏度 -3.7,这是保险生意的指纹#

卖保险的收益分布

日收益直方图(对数频数轴)清晰呈现负偏长尾:日均 +0.05%,但 0.5% 分位是 -6% 级别,最差单日 -23.7%(40% 敞口下!对应期货单日 +59%)。偏度 -3.7。

这个形状值得盯着看十秒钟:右侧密集的小正收益是日复一日的保费,左侧稀疏但深远的负收益是理赔。任何用 Sharpe 比率评估这类策略的人都在自欺——Sharpe 假设对称分布,而这里的风险几乎全部藏在三阶矩里。两个偏度分别为 0 和 -3.7 的策略可以有相同的 Sharpe,但破产概率天差地别。

结果三:基差过滤反而跑输——这是全文最反直觉的发现#

直觉上,「只在 contango 时做空」应该是更聪明的版本:顺风才开船。但模拟结果是过滤版年化 -2.9%,大幅跑输无过滤的 +8.6%。

拆开看原因,教科书级别的微妙:

  • 过滤规则在 backwardation 时空仓——而 backwardation 恰恰对应 VIX 尖峰期,尖峰之后是暴力均值回复(模拟中高位 kappa 三倍加速,对应现实中 VIX 从 45 跌回 20 只需几周)。空头单笔最肥的利润恰好来自尖峰后的坍塌段,过滤规则精确地把这段踢出去了。
  • 过滤保留的 contango 段固然有正 carry,但跳跃可以从任何状态发生——你躲不掉左尾,却放弃了最肥的右侧。

这个结果对应真实市场中长期争论的一个点:2020 年 3 月之后做空波动率的最佳入场点,恰恰是期限结构还在深度 backwardation、所有「趋势指标」都在尖叫危险的时候。基差是风向标不是提款机:它告诉你现在收的保费是多少,但不告诉你何时理赔,更不告诉你尖峰后的坍塌红利何时出现。 更现实的用法是把基差作为仓位调节变量(contango 深则加、backwardation 则减但不清零),而非开关。

六、Volmageddon:2018 年 2 月 5 日的墓志铭#

任何讨论做空 VIX 的文章不写这一天都是不完整的。

2018 年 2 月 5 日,标普 500 跌 4.1%——严重但远非史诗级。VIX 现货从 17 涨到 37。然后真正的灾难发生在期货市场的最后一小时

做空 VIX 的 ETP(XIV、SVXY)合计持有巨量期货空头。产品规则要求它们每日尾盘再平衡:VIX 期货涨得越多,需要回补的空头越多。当天的回补需求据估算超过 28 万手 VIX 期货——而市场深度根本承接不了。买入推高期货价格 → 触发更大的再平衡买入需求 → 进一步推高,自我强化的轧空螺旋在收盘后的 15 分钟内把 VIX 期货又推高了 30% 以上。

XIV 单日净值 -96%,触发条款清盘。数十亿美元灰飞烟灭——其中很多持有人前一周还在庆祝连续两年翻倍。

教训不是「做空波动率会死」,而是三条更精确的:

  1. 拥挤度是这类策略的一等风险因子。当收保费的人太多,理赔事件本身会被卖方的踩踏放大——你的对手方不只是市场,还有和你持有相同头寸的所有人。
  2. 产品结构会制造机械性的强制流。每日再平衡的杠杆/反向 ETP 在极端日的交易需求是价格的凸函数,这类可预测的强制流本身就是被猎杀的对象。
  3. 模拟里的「最差单日 -24%」在现实中可以是 -96%,因为模拟没有建模流动性枯竭与强平级联。左尾的真实厚度永远比历史数据显示的更厚。

七、诚实边界#

  • 模拟是风格化的:单因子均值回复 + 跳跃能复现 contango 占比、负偏、尖峰坍塌等核心典型事实,但真实期限结构是多因子的(水平/斜率/曲率各有动态),换月成本、保证金变动、期货贴水的时变风险溢价都没建模。数字看量级和结构,别看绝对值。
  • 保证金是隐藏的杀手:VIX 尖峰时交易所同步上调保证金要求,空头在浮亏最大时被要求追加最多资金——现实中很多空头不是「选择止损」,是被强平在尖峰顶点。
  • A 股没有直接对应物:境内无 VIX 期货。最接近的表达是 ETF 期权的卖跨式/卖宽跨(同样是卖方差风险溢价),但缺少期限结构维度,且 T+1 现货对冲有错配。
  • 税务与融资成本:境外实操中期货的资金效率高但收益按短期处理,ETP 则有管理费与跟踪损耗,两者对长期净收益的侵蚀都在年化 1-2% 量级。

八、总结#

命题结论
Contango 为什么是常态均值回复(现货多数时间低于均值)+ 方差风险溢价(崩盘保险的保费)
滚动收益从哪来期货沿曲线滑向现货:(F−S)/S ÷ 剩余天数,contango 5% ≈ 每天 24bp
长期期望正(模拟年化 8.6% @ 40% 敞口),但偏度 -3.7,Sharpe 严重误导
满仓会怎样净值归零。仓位是生存变量不是收益变量
基差过滤有用吗作为开关反而跑输——踢掉了尖峰后坍塌段的最肥利润;应作连续仓位调节变量
最大的现实风险拥挤 + 产品强制流 + 保证金螺旋(Volmageddon:XIV 单日 -96%)

做空 VIX 期货是一门真实存在、经济学上有据可依的生意——你在向全市场出售它最想买的东西:崩盘保护。但保险公司的第一课不是定价,是准备金:收的每一分保费,都要假设理赔明天就来。

VIX 期货基差交易:期限结构里的滚动收益与崩盘风险
https://blog.halo26812.eu.org/blog/vix-futures-basis-trading
Author halo
Published at 2026年7月29日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨