VIX 期货基差交易:期限结构里的滚动收益与崩盘风险
「做空 VIX 期货是全市场最贵的保险生意——你是卖保险的那一方。」VIX 期货长期处于 contango(升水):期限结构向上倾斜时,期货合约随着到期日临近会沿曲线向下滑向现货,做空者赚取这段滚动收益(roll-down)。它的经济学本源不是无效市场,而是方差风险溢价——市场愿意为『崩盘时波动率会飙升』这份保护持续付费。10 年日度受控模拟拆出三层结构:contango 占比约三分之二、做空 1M 期货年化 8.6% 但最大回撤 -51%,收益分布偏度 -3.7(细水长流 vs 一夜爆仓的经典形态);最反直觉的实证:基差过滤(仅在 contango>2% 时做空)反而跑输无过滤——因为过滤把你踢出了 backwardation 尖峰后的快速回落段,而那正是空头单笔盈利最肥的区间;2018-02-05 Volmageddon 是这门生意的墓志铭:XIV 一夜 -96% 清盘,杠杆 ETP 的尾盘再平衡需求形成自我强化的轧空螺旋。诚实边界:模拟未含保证金追缴与流动性枯竭,真实崩盘中空头往往在最低点被强平(高阶)。
一句话版本#
VIX 期货大部分时间比 VIX 现货贵(contango),持有到期必然向现货收敛,于是做空 VIX 期货长期赚取「滚动收益」——但这本质是卖崩盘保险:细水长流地收保费,然后在某个星期一晚上一次性赔光。
一、VIX 期货不是 VIX#
先纠正一个几乎所有初学者都会犯的错误:你不能交易 VIX。
VIX 是 CBOE 用 SPX 期权价格算出来的一个指数——它是 30 天隐含方差的平方根,是一个「读数」,不是一个可持有的资产。没有任何组合能精确复制它(能复制的是 VIX²,即方差互换,那是另一个故事)。
可交易的是 VIX 期货:一份关于「到期日那天 VIX 会是多少」的赌约。这个区别产生了三个直接后果:
-
VIX 期货不需要满足现货套利关系。普通商品期货的升贴水受制于持有成本套利(买现货 + 存储 vs 买期货),但 VIX 现货无法持有,期货价格纯粹是市场对未来 VIX 的风险中性期望加上风险溢价——期限结构的形状完全由预期和溢价决定,没有套利力量把它钉死。
-
VIX 期货的波动远小于 VIX 现货。VIX 单日 +40% 时,1 个月期货可能只涨 +15%——因为期货赌的是「一个月后 VIX 在哪」,而 VIX 具有强均值回复,市场知道尖峰大概率会衰减。期货对现货的 beta 随剩余期限增加而衰减。
-
到期日强制收敛。无论中途怎么飘,期货最后结算于 VIX 的特殊开盘报价(SOQ)。这个收敛是整个基差交易的发动机。
二、期限结构:contango 是常态,backwardation 是警报#
把不同到期月份的 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 大致是:
Contango 5% 且剩余 21 个交易日时,每天约 24bp——听起来不多,年化却相当可观。这正是 2010-2017 年间做空 VIX ETP(XIV、SVXY)成为散户「财富密码」的数学基础。
四、10 年受控模拟:把这门生意跑一遍#
真实 VIX 期货的连续数据需要处理换月拼接,且历史只有一个样本路径。我们用受控模拟看清结构:对数 VIX 用带跳跃的均值回复过程生成(高位时均值回复加速、压力期跳跃概率放大——两者都是公认的典型事实),1 个月期货价格 = 指数衰减权重下现货与长期均值的混合,再乘 1.045 的方差风险溢价因子。
import numpy as np
rng = np.random.default_rng(42)
n_days = 2520 # 10 年
kappa, theta_log, sigma_v = 0.05, np.log(16.0), 0.055
log_vix = np.full(n_days, np.log(14.0))
for t in range(1, n_days):
# 跳跃:平静期年化约 0.75 次,高波动期显著更频繁
p_jump = 0.003 + (0.02 if log_vix[t-1] > np.log(25) else 0.0)
jump = rng.uniform(0.35, 1.0) if rng.random() < p_jump else 0.0
# 高位时均值回复加速(VIX 尖峰衰减迅速)
k_eff = kappa * (3.0 if log_vix[t-1] > np.log(28) else 1.0)
dlv = k_eff * (theta_log - log_vix[t-1]) \
+ sigma_v * rng.standard_normal() + jump
log_vix[t] = log_vix[t-1] + dlv
vix = np.exp(log_vix)
# 1M 期货:向长期均值收敛的期望 × 方差风险溢价
w = np.exp(-1 / 2.2)
fut1 = np.exp(w * log_vix + (1 - w) * theta_log) * 1.045
basis = (fut1 - vix) / vix # 正 = contangopython做空策略的每日收益 = 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模拟出的现货、期货与基差:

Contango 占比 66%——比真实市场(约 80%)略保守,因为模拟里的跳跃聚集把更多时间推入了高波动状态。基差在平静期稳定为正(空头顺风收保费),尖峰期瞬间翻负(空头被雨打风吹去)。
五、三个核心实证结果#
结果一:赚是真赚,但回撤是 -51%#

无过滤做空(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%,触发条款清盘。数十亿美元灰飞烟灭——其中很多持有人前一周还在庆祝连续两年翻倍。
教训不是「做空波动率会死」,而是三条更精确的:
- 拥挤度是这类策略的一等风险因子。当收保费的人太多,理赔事件本身会被卖方的踩踏放大——你的对手方不只是市场,还有和你持有相同头寸的所有人。
- 产品结构会制造机械性的强制流。每日再平衡的杠杆/反向 ETP 在极端日的交易需求是价格的凸函数,这类可预测的强制流本身就是被猎杀的对象。
- 模拟里的「最差单日 -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 期货是一门真实存在、经济学上有据可依的生意——你在向全市场出售它最想买的东西:崩盘保护。但保险公司的第一课不是定价,是准备金:收的每一分保费,都要假设理赔明天就来。