Volatility Trading and Arbitrage Strategies › Trading the VIX

Michael BrenndoerferDecember 30, 20257 min read
Quantitative FinanceAll chapters
Part 11 of 15Quantitative Trading Strategies
Chapter 63Volatility Trading and Arbitrage Strategies › Trading the VIX
Reading section 11 of 15 · Trading the VIX · 7 minSection 11 of 15 · 7 min

Book contents

Section 11 of 15 · 7 min read

Volatility Trading and Arbitrage Strategies › Trading the VIXOne section · Sections in this chapter11 / 15 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

The CBOE Volatility Index (VIX) provides a benchmark for S&P 500 implied volatility. VIX derivatives, such as futures and options, allow you to take positions on volatility expectations and hedge volatility risk.

VIX Calculation

The VIX is calculated from a portfolio of S&P 500 index options using a methodology similar to variance swap pricing. It represents the 30-day expected volatility implied by option prices:

σ2=2T∑iΔKiKi2erTQ(Ki)−1T(FK0−1)2\sigma^2 = \frac{2}{T} \sum_i \frac{\Delta K_i}{K_i^2} e^{rT} Q(K_i) - \frac{1}{T} \left( \frac{F}{K_0} - 1 \right)^2

where:

  • σ2\sigma^2: variance used to calculate VIX (VIX=100×σ\text{VIX} = 100 \times \sigma)
  • TT: time to expiration
  • ΔKi\Delta K_i: interval between strike prices
  • KiK_i: strike price of the ii-th option
  • rr: risk-free interest rate
  • Q(Ki)Q(K_i): midpoint of the bid-ask spread for option at strike KiK_i
  • FF: forward index level derived from option prices
  • K0K_0: first strike below the forward price FF

The VIX calculation methodology is directly related to the variance swap replication formula we examined earlier. Both approaches use a portfolio of out-of-the-money options weighted by the inverse square of the strike to capture expected variance. The key difference is that the VIX uses a specific set of S&P 500 options with near-term and next-term expirations, interpolated to provide a constant 30-day horizon.

The formula consists of two main parts:

  • Option Summation: 2T∑ΔKiKi2erTQ(Ki)\frac{2}{T} \sum \frac{\Delta K_i}{K_i^2} e^{rT} Q(K_i) aggregates the prices of out-of-the-money options, weighted by 1/K21/K^2, to replicate the variance payoff.
  • Forward Adjustment: 1T(FK0−1)2\frac{1}{T} \left( \frac{F}{K_0} - 1 \right)^2 corrects for the discrete difference between the forward price FF and the cutoff strike K0K_0.

The forward adjustment term is necessary because the formula uses a discrete set of option strikes rather than a continuous spectrum. Since the transition between puts and calls occurs at K0K_0 rather than exactly at the forward price FF, this adjustment corrects for the small pricing error that would otherwise result.

VIX Futures Term Structure

VIX futures prices reflect expectations of future VIX levels plus a risk premium. The typical term structure shapes are:

  • Contango: Normal market conditions. Longer-dated futures trade above spot VIX because investors demand premium for bearing volatility risk.
  • Backwardation: Market stress periods. Spot VIX spikes above futures as realized volatility jumps and mean reversion is expected.

The intuition for contango is similar to the volatility risk premium. Investors who are long equity portfolios want protection against volatility spikes, and they are willing to pay a premium for this protection. VIX futures sellers, who bear the risk of volatility spikes, demand compensation in the form of futures prices that are higher than expected future spot VIX levels. This premium manifests as an upward-sloping term structure.

During market stress, the relationship inverts. When volatility spikes, the spot VIX jumps immediately to reflect current fear and hedging demand. However, futures prices rise less because the market expects volatility to eventually mean-revert to more normal levels. This creates backwardation, with spot VIX above futures prices.

In[35]:
Code
# Simulate VIX futures term structure
maturities = np.array([1, 2, 3, 4, 5, 6])  # Months to expiration
spot_vix = 18

# Contango scenario (normal markets)
vix_contango = spot_vix + 2 * np.sqrt(maturities)

# Backwardation scenario (market stress)
spot_vix_stress = 35
vix_backwardation = spot_vix_stress - 3 * np.sqrt(maturities)
vix_backwardation = np.maximum(vix_backwardation, 20)  # Floor
Out[36]:
Visualization
Contango VIX futures rise from about 20 to 23 across six maturities, while backwardation futures fall from about 32 to 28; dashed lines mark spot VIX levels of 18 and 35.
VIX futures curves for contango and backwardation market regimes. In normal markets, the upward-sloping curve imposes a roll cost on long positions, while the downward-sloping curve during stress periods reflects expectations of mean reversion in volatility.

The term structure typically exhibits contango, where longer-dated futures trade at a premium to spot, which reflects the cost of protection. During market stress, the curve flips to backwardation, with spot prices surging above futures as demand for immediate hedging spikes.

Roll Yield and VIX Products

The persistent contango in VIX futures creates a negative roll yield for long positions. As futures converge to spot at expiration, long positions in contango lose value from roll. This explains why long VIX ETFs like VXX have lost over 99% of their value since inception, despite VIX remaining in a range.

This decay is devastating for long-term holders. Consider a VIX ETF that maintains exposure to the front-month VIX futures contract. When the contract approaches expiration, the ETF must roll its position to the next month's contract. If the curve is in contango, this means selling the expiring contract at a lower price and buying the next month's contract at a higher price. This roll transaction locks in a loss, and if contango persists, these losses accumulate month after month, steadily eroding the ETF's value.

In[37]:
Code
def simulate_vix_etf(
    spot_vix_series, futures_premium_pct=0.05, days_between_rolls=21
):
    """
    Simulate VIX ETF returns including roll cost.

    Parameters:
    - spot_vix_series: Daily spot VIX values
    - futures_premium_pct: Average futures premium over spot (5% = contango)
    - days_between_rolls: Number of days between roll events
    """
    n_days = len(spot_vix_series)
    etf_value = 100  # Start at $100
    etf_values = [etf_value]

    for i in range(1, n_days):
        # Daily return from VIX movement
        vix_return = (
            spot_vix_series[i] - spot_vix_series[i - 1]
        ) / spot_vix_series[i - 1]

        # Daily roll cost (spread over roll period)
        daily_roll_cost = futures_premium_pct / days_between_rolls

        # ETF return = VIX return - roll cost
        etf_return = vix_return - daily_roll_cost
        etf_value *= 1 + etf_return
        etf_values.append(etf_value)

    return np.array(etf_values)


# Simulate 2 years of VIX (mean-reverting process)
np.random.seed(42)
n_days = 504
kappa = 0.1  # Mean reversion speed
theta = 20  # Long-term mean
sigma_vix = 0.8  # VIX volatility

spot_vix = [20]
for _ in range(n_days - 1):
    dW = np.random.normal(0, 1)
    new_vix = (
        spot_vix[-1]
        + kappa * (theta - spot_vix[-1])
        + sigma_vix * np.sqrt(spot_vix[-1]) * dW
    )
    spot_vix.append(max(new_vix, 10))
spot_vix = np.array(spot_vix)

# Simulate ETF tracking VIX with roll cost
etf_values = simulate_vix_etf(spot_vix)

total_return = (etf_values[-1] / etf_values[0] - 1) * 100
annualized_return = (
    (etf_values[-1] / etf_values[0]) ** (252 / n_days) - 1
) * 100
Out[38]:
Visualization
Dual-axis chart of a spiky mean-reverting VIX series between roughly 10 and 45 and a volatile long-VIX ETF path that begins at 100 and ends substantially lower.
Simulated spot VIX and long VIX ETF value over two years. Spot VIX mean-reverts with repeated spikes, while the ETF remains volatile but finishes substantially lower because each day's return also includes a modeled contango roll cost.
Out[39]:
Console
VIX Range: 10.0 - 45.6
VIX Start/End: 20.0 / 17.7

Long VIX ETF Performance:
  Total Return: -73.9%
  Annualized Return: -48.9%

The lesson is clear: long volatility positions using VIX products require precise timing. They are hedging instruments, not investments.