Variance Swaps: Replication and Trading

A variance swap exchanges future realized variance for a fixed strike, giving direct exposure to squared returns without the directional delta of a vanilla option. Its fair strike can be replicated by a continuum of out-of-the-money options, which makes it the clean theoretical expression of the volatility risk premium: investors often pay more for convex crash insurance than subsequent realized variance delivers.

Contract payoff and conventions

At maturity, a variance swap with variance notional N_var pays:

P&L = N_var * (RV - K_var)
RV = annualization * sum_i [log(S_ti / S_t(i-1))]^2

The annualization, sampling schedule, return definition, disruption rules, and corporate-action adjustments are all contractual. A “30-day variance” trade can differ materially between 252 and 365 annualization or between close-to-close and intraday sampling.

ExposureSwap payoffConventional quote
Variancelinear in RVvariance points
Volatilitylinear in sqrt(RV)vol points
Vega notionalapproximately linear near strikedollars per vol point

Do not compare variance-swap returns directly with a straddle’s vega P&L without mapping notional and convexity.

Static replication

For a continuous diffusion with forward F and maturity T, the fair variance strike is:

K_var = (2 * exp(rT) / T) *
        [integral_0^F P(K,T)/K^2 dK + integral_F^infinity C(K,T)/K^2 dK]

The 1/K^2 weighting makes low-strike puts disproportionately important. This is not an arbitrary convention: it follows from the log contract identity and a dynamic delta hedge. It also explains why a sparse option chain or a poorly extrapolated left wing can overwhelm an apparently precise calculation.

Building a tradable estimate

Convert option mids to OTM prices, use the correct forward from funding/dividends, integrate over listed strikes, and extrapolate tails with an explicit model. Cboe-style VIX calculations use a discretized version:

import numpy as np

def variance_strike(strikes, otm_prices, forward, rate, maturity):
    dk = np.empty_like(strikes, dtype=float)
    dk[1:-1] = 0.5 * (strikes[2:] - strikes[:-2])
    dk[0], dk[-1] = strikes[1]-strikes[0], strikes[-1]-strikes[-2]
    integral = np.sum(dk * otm_prices / strikes**2)
    return 2 * np.exp(rate*maturity) * integral / maturity

This code is deliberately incomplete for production: it does not select the OTM put/call around the forward, handle zero bids, or extrapolate. Those choices should be tested as market-data sensitivity, not hidden inside a black-box “VIX” function.

Volatility is not variance

The volatility swap payoff is sqrt(RV) - K_vol. Jensen’s inequality means:

E[sqrt(RV)] < sqrt(E[RV])

The gap is the convexity adjustment. A first approximation using variance-of-variance is:

K_vol ≈ sqrt(K_var) - Var(RV) / (8 * K_var^(3/2))

It can be material in stressed markets. A variance swap cannot simply be relabeled as a vol swap at sqrt(K_var).

The trading P&L

A long variance swap accumulates realized variance each observation and reprices with the remaining implied variance:

MTM ≈ accrued_RV * elapsed/T
      + implied_remaining_variance * remaining/T
      - fixed_strike

This creates path dependence: two paths ending at the same spot can have radically different accrued P&L. It also means daily realized variance marks need clean adjusted closes and corporate-action treatment.

The replication is short a strip of OTM options when selling variance. Its apparent carry can vanish in a crash because jump variance is realized but cannot be delta hedged continuously. Position sizing should use jump scenarios, not a normal-distribution VaR.

Practical variants

StructurePurposeMain additional risk
Corridor variancecount variance only within spot rangerange/path dependence
Gamma swapweight returns by spot levelspot-variance correlation
Dispersionlong single-name, short index variancecorrelation risk
Forward-start varianceisolate future periodforward-surface dynamics

Dispersion is often described as “selling correlation.” It is only approximately so: index weights, jumps, constituent skew, and rebalancing all affect the realized result.

Key takeaways

  • Variance swaps are linear in realized variance, not realized volatility.
  • Fair variance is replicated by OTM options weighted by inverse strike squared.
  • Tail extrapolation and option-chain quality are first-order strike-estimation risks.
  • Volatility swaps require a convexity adjustment.
  • Selling variance harvests carry while retaining severe jump and liquidity exposure.
#variance swaps #volatility trading #options replication #variance risk premium