Skip to content

Variance Swaps and Vol Swaps: Fair Strike, Replicating Portfolios, Convexity

Why a variance swap can be statically replicated with options and a vol swap cannot: the log-contract identity, the Carr-Madan formula, the convexity adjustment, and how that one distinction drives how each instrument is used.

11 of 12 ~13 min

A variance swap is a forward contract on realized variance: at expiry, the long receives (Vrealized−Kvar)⋅notional(V_{\text{realized}} - K_{\text{var}}) \cdot \text{notional}, where KvarK_{\text{var}} is the strike and VrealizedV_{\text{realized}} is the annualized realized variance of log-returns over the period. The vol swap looks like its close cousin — it pays Vrealized−Kvol\sqrt{V_{\text{realized}}} - K_{\text{vol}}, in the friendlier units of percentage points.

But an essential line runs between the two instruments: the fair strike of a variance swap can be computed without any model, from a strip of European options, and replicated statically; the fair strike of a vol swap cannot. Variance swaps trade in far greater size than vol swaps, and that line is the reason. This article traces the line: where the identity comes from, how the replication is assembled, what the square root’s convexity costs, and where “model-free” stops being true.

Pin Down the Underlying First

Realized variance is computed from log-returns:

Vrealized=252n∑i=1n(ln⁡StiSti−1−rˉ)2V_{\text{realized}} = \frac{252}{n}\sum_{i=1}^n \left(\ln \frac{S_{t_i}}{S_{t_{i-1}}} - \bar{r}\right)^2

where tit_i are equally spaced timestamps (daily closes at daily frequency), nn is the number of returns, and the factor 252 annualizes by trading days. The idealized continuous version is the integrated spot variance:

Vrealized=1T∫0Tσt2 dtV_{\text{realized}} = \frac{1}{T} \int_0^T \sigma_t^2 \, dt

The contract specifies which sampling applies; we develop the theory in the continuous version and price the discrete gap separately below.

The “fair strike” KvarK_{\text{var}} is the level that makes the swap worth zero at initiation — the risk-neutral expectation:

EQ[Vrealized]=Kvar\mathbb{E}^{\mathbb{Q}}[V_{\text{realized}}] = K_{\text{var}}

So far, definitions. The real question: why can this expectation be computed without specifying a volatility model?

The Log-Contract: The Pivot of the Whole Method

The pivot is an Itô identity. For any positive price process with continuous paths, apply Itô’s formula to ln⁡St\ln S_t and integrate:

∫0Tσt2 dt=2[∫0TdStSt−ln⁡STS0]\int_0^T \sigma_t^2 \, dt = 2\left[\int_0^T \frac{dS_t}{S_t} - \ln \frac{S_T}{S_0}\right]

The left side is the accumulated variance we want to trade. The two terms on the right each have an identity: ∫dSt/St\int dS_t/S_t is the gain of a dynamic strategy that continuously holds 1/St1/S_t shares — tradeable; −ln⁡(ST/S0)-\ln(S_T/S_0) is a payoff that depends only on the terminal value — the log-contract. In other words: accumulated variance = one delta strategy + one static terminal payoff. Variance is a path quantity, yet its entire non-hedgeable part collapses onto the terminal value. Everything follows from this.

Take risk-neutral expectations: EQ[∫dSt/St]=rT\mathbb{E}^{\mathbb{Q}}[\int dS_t/S_t] = rT, while ln⁡(F0/S0)=rT\ln(F_0/S_0) = rT, and the two cancel, leaving:

Kvar=EQ[Vrealized]=−2T EQ[ln⁡STF0]K_{\text{var}} = \mathbb{E}^{\mathbb{Q}}[V_{\text{realized}}] = -\frac{2}{T}\,\mathbb{E}^{\mathbb{Q}}\left[\ln\frac{S_T}{F_0}\right]

The fair variance strike is the (scaled) price of the log-contract. The remaining question — how do you price a log-contract? — is where European options enter: any twice-differentiable terminal payoff can be statically replicated by a continuum of calls and puts. The Taylor-integral decomposition of −ln⁡(ST/F0)-\ln(S_T/F_0) (whose second derivative in strike is 1/K21/K^2) reads:

−ln⁡STF0=−ST−F0F0+∫0F0(K−ST)+K2 dK+∫F0∞(ST−K)+K2 dK-\ln\frac{S_T}{F_0} = -\frac{S_T - F_0}{F_0} + \int_0^{F_0}\frac{(K - S_T)^+}{K^2}\,dK + \int_{F_0}^{\infty}\frac{(S_T - K)^+}{K^2}\,dK

The first term is a forward position (zero risk-neutral expectation); the other two are OTM puts and calls weighted by 1/K21/K^2. Take expectations term by term, substitute market prices, and you have:

The Carr-Madan Formula

Kvar=2erTT[∫0F0P(K)−(F0−K)+K2dK+∫F0∞C(K)−(K−F0)+K2dK]K_{\text{var}} = \frac{2 e^{rT}}{T}\left[\int_0^{F_0} \frac{P(K) - (F_0 - K)^+}{K^2} dK + \int_{F_0}^{\infty} \frac{C(K) - (K - F_0)^+}{K^2} dK\right]

where F0=S0erTF_0 = S_0 e^{rT}, C(K)C(K) and P(K)P(K) are call and put prices at strike KK, and subtracting intrinsic value means only time value (the OTM content) enters the integral (Carr & Madan, 1998; the original log-contract idea is Neuberger, 1994).

The formula is model-free: it depends on option prices, not on a volatility model. If the option prices are arbitrage-free, it delivers the unique no-arbitrage variance strike — once a continuous set of option prices is observed, the variance swap strike is pinned down with no distributional assumptions. The same construction works for any risk-neutral expectation expressible as an integral over option payoffs.

Note the only dynamical assumption used anywhere in the derivation: continuous paths. The Itô identity holds for any continuous semimartingale, whether volatility is constant, local, or stochastic. With jumps, the identity breaks — that is the first boundary of “model-free,” and we will need it again.

Numerical Implementation

In practice, the integrals become discrete sums over listed strikes:

import numpy as np

def variance_strike(strikes, otm_mids, F0, T, r):
    """Fair variance strike: trapezoid integration of OTM mids weighted by 1/K^2.
    strikes  : ascending strikes (puts below F0, calls above).
    otm_mids : corresponding OTM option mid prices.
    """
    strikes = np.asarray(strikes, dtype=float)
    otm_mids = np.asarray(otm_mids, dtype=float)
    integral = np.trapz(otm_mids / strikes**2, strikes)
    return 2.0 * np.exp(r * T) / T * integral

The numerical trouble lives entirely in the tails: the 1/K21/K^2 weight amplifies put prices at low strikes, exactly where quotes are sparsest and spreads widest. Robust implementations either truncate the integration range or extrapolate the wings with a parametric fit (SVI). A common practical setup integrates quotes between 0.5F00.5 F_0 and 2.0F02.0 F_0 and extrapolates beyond — which means your variance strike has genuine sensitivity to the wing extrapolation. That is one reason a “model-free” quantity still differs across implementations.

Convexity: What Separates the Vol Swap

A vol swap pays Vrealized\sqrt{V_{\text{realized}}}. The square root is concave, so Jensen’s inequality immediately gives E[V]≤E[V]\mathbb{E}[\sqrt{V}] \leq \sqrt{\mathbb{E}[V]}, i.e. Kvol≤KvarK_{\text{vol}} \leq \sqrt{K_{\text{var}}} — the vol swap strike sits below the square root of the variance strike, and the gap widens with the variability of variance. Expanding ⋅\sqrt{\cdot} around KvarK_{\text{var}} to second order:

Kvol≈Kvar−Var(Vrealized)8 Kvar3/2K_{\text{vol}} \approx \sqrt{K_{\text{var}}} - \frac{\text{Var}(V_{\text{realized}})}{8\,K_{\text{var}}^{3/2}}

The correction is proportional to the variance of realized variance — vol-of-vol. And there is an exact relation that needs no expansion, straight from the definition of variance:

Kvar−Kvol2=Var ⁣(Vrealized)K_{\text{var}} - K_{\text{vol}}^2 = \text{Var}\!\left(\sqrt{V_{\text{realized}}}\right)

(variance under the risk-neutral measure). The left side is always non-negative: the variance strike is always “richer” than the vol strike squared, and the premium is exactly the uncertainty of realized volatility.

For orders of magnitude: on 1-year SPX with ATM implied vol around 16%, the vol swap strike sits around 17-18% and the square root of the variance strike around 18-19% — skew lifts both above ATM vol, and convexity then splits them by 1-2 vol points. This yields a practical rule: if your model’s KvolK_{\text{vol}} disagrees with the market, that is a vol-of-vol calibration problem. Do not adjust KvarK_{\text{var}} to “match” KvolK_{\text{vol}} — the two depend on the model to entirely different degrees, one barely at all, the other completely.

Discrete Monitoring

Real contracts settle on discrete returns — daily or weekly closes, not continuous paths. The discrete fair strike, straight from the definition:

Kvardiscrete=EQ[1T∑i=1n(ln⁡StiSti−1)2]K_{\text{var}}^{\text{discrete}} = \mathbb{E}^{\mathbb{Q}}\left[\frac{1}{T}\sum_{i=1}^n \left(\ln\frac{S_{t_i}}{S_{t_{i-1}}}\right)^2\right]

Its gap against the continuous version:

Kvardiscrete−Kvarcontinuous=O(1/n)K_{\text{var}}^{\text{discrete}} - K_{\text{var}}^{\text{continuous}} = O(1/n)

The correction is driven by higher moments of the discrete returns and its explicit form is model-dependent — Broadie and Jain (2008) work it out for the main models. For daily sampling (n≈252n \approx 252) the gap is usually small, with a sign that depends on the relative sizes of drift, jumps, and skew. In practice it is rarely a main error source in a variance book; the bigger problem is data. Daily closes disagree across vendors, and fixings get disputed by counterparties. The clause specifying whose closing price applies is worth more than the discretization correction.

Two Payoffs, Two Uses

Put the two payoffs side by side:

Notional⋅(Vrealized−Kvol)\text{Notional} \cdot (\sqrt{V_{\text{realized}}} - K_{\text{vol}}) Notional⋅(Vrealized−Kvar)\text{Notional} \cdot (V_{\text{realized}} - K_{\text{var}})

The variance swap’s payoff is convex in volatility: double the vol, quadruple the payout. A long variance position gets accelerated by convexity precisely in tail events — which is what buyers want; conversely, a variance seller loses faster than linearly when vol explodes, which is why sellers charge a convexity premium. The vol swap’s payoff is linear in vol, with no such acceleration, making it the cleaner instrument for a plain directional view that realized vol will exceed or undershoot implied.

The replication property dictates the hedging style. Variance swap: buy the 1/K21/K^2-weighted option strip, delta-hedge with 2/St2/S_t, and in theory you are done, statically. The vol swap has no static replication — it needs dynamic hedging or a model, and in practice is hedged by managing the replicating portfolio’s vega and gamma as the smile evolves. The pricing pipeline looks like:

def vol_swap_strike(strikes, otm_mids, F0, T, r):
    K_var = variance_strike(strikes, otm_mids, F0, T, r)
    K_var_adj = K_var + discrete_monitoring_adjustment(...)  # model-dependent; small at daily sampling
    K_vol = np.sqrt(K_var_adj) - convexity_adjustment(...)   # ~ Var(V) / (8 K_var^{3/2})
    return K_vol

Both adjustments are model-dependent; Heston and SABR each have closed-form approximations. Note the structure: the variance-strike step is model-free, and every further step towards the vol swap adds another layer of model dependence.

The Full Boundary of “Model-Free”

Collecting the scattered conditions: Carr-Madan replication holds exactly given a continuum of strikes on (0,∞)(0, \infty), arbitrage-free option prices, continuous paths, and holding to expiry. Each failure leaves a gap. Discrete strikes are patched by SVI-style extrapolation, adequately; stochastic interest rates make the discount factor uncertain and add a convexity term in rate volatility to KvarK_{\text{var}}; jumps break the Itô identity outright; and bid-ask spreads erode the theoretical profit of “hold statically to expiry.” Together these gaps are why real-world variance strikes deviate from the theoretical fair value, with practical adjustments typically in the tens of basis points.

A Worked Example: SPX 1-Year Variance Swap

Walk the Carr-Madan formula through a set of observed option prices. Assume S0=4500S_0 = 4500, r=0.05r = 0.05, dividend yield 1.8%, 1-year forward F=4500⋅e(0.05−0.018)⋅1=4642F = 4500 \cdot e^{(0.05 - 0.018) \cdot 1} = 4642, ATM vol around 18% with a realistic skew. Sample quotes near T=1T = 1:

StrikeTypeMidContribution under 1/K21/K^2 weight
3500put175large (low strikes weighted heavily)
4000put95significant
4500straddle770most mass near ATM
5000call35moderate
5500call9small

Plugging into the formula and integrating gives roughly Kvar≈0.038K_{\text{var}} \approx 0.038, i.e. 19.5% annualized vol — above the 18% ATM vol, and the excess is precisely the skew and vol-of-vol premium accumulated along the wings.

Compare against a freshly calibrated Heston model. The expected integrated variance under Heston has a closed form:

EQ[1T∫0Tvtdt]=θ+(v0−θ)1−e−κTκT\mathbb{E}^{\mathbb{Q}}\left[\frac{1}{T}\int_0^T v_t dt\right] = \theta + (v_0 - \theta)\frac{1 - e^{-\kappa T}}{\kappa T}

With θ=0.04\theta = 0.04, κ=2\kappa = 2, v0=0.04v_0 = 0.04, this gives Kvar=0.04K_{\text{var}} = 0.04, i.e. 20% vol — not far from the Carr-Madan number. One detail worth noticing: when v0=θv_0 = \theta, the expectation equals θ\theta exactly and the mean-reversion speed κ\kappa drops out entirely — κ\kappa only shapes the term structure, via the decay weight, when current variance sits away from its long-run level. The two computations land close together, but their standing differs: the Carr-Madan number is the “model-free” strike the market actually trades; the Heston number is one model’s opinion.

Notional, Hedging, and P&L

Variance swaps are denominated per variance point, but traders talk risk in vega language. Near the strike, the two notionals convert as:

vega notional=2Kvol×variance notional\text{vega notional} = 2 K_{\text{vol}} \times \text{variance notional}

(differentiate ⋅\sqrt{\cdot}; KvolK_{\text{vol}} in vol points). A worked number: a position with vega notional 100,000100{,}000 per vol point at a strike of 19 corresponds to variance notional ≈100,000/(2×19)≈2,600\approx 100{,}000/(2 \times 19) \approx 2{,}600 per variance point. Vol moves from 19 to 20: variance goes 361 to 400, P&L ≈39×2,600≈101,000\approx 39 \times 2{,}600 \approx 101{,}000 — matching the vega notional. Vol moves 5 points to 24: variance hits 576, P&L ≈215×2,600≈559,000\approx 215 \times 2{,}600 \approx 559{,}000, a chunk above the linear extrapolation of 500,000500{,}000 — that chunk is the convexity, free to the long and owed by the short.

P&L over the holding period splits into four books: the accrued realized leg (past squared returns booked daily; at expiry it is the whole payoff); mark-to-market (the fair strike Kvar(t,T)K_{\text{var}}(t, T) for the remaining period moves with the surface every day); the hedge P&L of the replicating strip; and no carry in the traditional sense — no premium changes hands, but the vega exposure never sleeps. The second-order sensitivity deserves a look too:

d2Vdσ2=d2dσ2[Kvar(σ)−K]⋅notional\frac{d^2 V}{d\sigma^2} = \frac{d^2}{d\sigma^2}\left[K_{\text{var}}(\sigma) - K\right] \cdot \text{notional}

the second-order response of the Carr-Madan strike to vol. With a flat smile it is near zero; with a steep smile whose shape co-moves with the vol level, it is not, and a vol book should track it.

What to Trade With It

The cleanest use of a variance swap is realized vs. implied: the strike is locked at the Carr-Madan fair value determined by the option market; if you believe realized volatility will exceed it, buy; if not, sell. Empirically, implied variance has averaged above realized variance — on SPX this variance risk premium has run on the order of 2-3 vol points over the long run (sample-dependent). The reason the premium exists is not mysterious: client flow structurally buys protection, the dealers who absorb it demand compensation, and a variance short loses non-linearly fast in the tail, so that compensation should be positive. Selling volatility to collect this premium is a real business — and the business that loses fastest on the bad days.

The second use is term-structure trades. The vol term structure slopes upward in calm markets and inverts under stress; when inverted, buy the long-dated variance swap and collect the roll-down as the curve normalizes; when steep, run it the other way. Implementation is clean and the risk is plain: the curve can hold its shape longer than your patience, and on the short leg realized vol can exceed implied at any time.

The relationship to VIX futures deserves its own paragraph. A VIX future pays VIXfinal−K\text{VIX}_{\text{final}} - K at expiry, and VIX is a 30-day constant-maturity implied volatility index, so:

EQ[VIXfinal]≈Kvol\mathbb{E}^{\mathbb{Q}}[\text{VIX}_{\text{final}}] \approx K_{\text{vol}}

up to a layer of convexity. VIX futures bet on future implied volatility; variance swaps pay realized variance — related, not identical, and the basis between them is itself a tradeable quantity. The venues differ too: VIX futures and ETFs are exchange-traded and liquid, the retail entry point; index variance swaps live almost entirely OTC, because maturity, notional, monitoring frequency, and fixing conventions all need customizing, and exchanges do not offer that flexibility.

A multi-market book adds one more layer: variance surfaces on SPX, FTSE, and Nikkei move together under stress, so hedging index by index understates the joint risk. The standard approach runs a 2-3 factor PCA on surface history and flattens the book’s exposure to factors like “global vol” and “skew,” rather than working contract by contract.

Closing

The through-line of this article compresses to one sentence: what can be statically replicated, the market prices; what cannot, a model prices. The variance swap sits on the first side — the Carr-Madan formula nails its fair strike to option prices. The vol swap sits on the second — its convexity adjustment is a model’s opinion, and the model risk lives exactly there. The theory is clean; the practical work is in the data — which option prices to use, how to handle spreads, how discrete monitoring is written into the contract. The next article turns to path-dependent options — Asians, barriers, lookbacks — where even the premise of a “terminal payoff” has to be given up.


Reading list. Hull, Options, Futures, and Other Derivatives, 10th ed. (2018). Wilmott, Paul Wilmott on Quantitative Finance, 2nd ed. (2007). Carr & Madan, “Towards a Theory of Volatility Trading” (1998). Neuberger, “Volatility Trading” (1994) for the original log-contract idea. Broadie & Jain, “Pricing and Hedging Volatility Derivatives” (2008) for the discrete monitoring adjustment.