Markets: A Rigorous Course

9.6 Variance swaps and the VIX

Advanced about 15 min

Motivation

A variance swap pays exactly the realised variance minus a fixed strike, with no path dependence from gamma. It is the clean form of the bet in 9.3. Its fair strike is a static portfolio of options, and that portfolio is the VIX formula. Understanding the replication explains what India VIX measures and why it rises with the skew.

Setup

A variance swap with variance notional NN pays at TT

N(σR2−Kvar),σR2=252n∑k=1n(ln⁡SkSk−1)2,N\left(\sigma_R^2-K_{var}\right),\qquad\sigma_R^2=\frac{252}{n}\sum_{k=1}^{n}\left(\ln\frac{S_k}{S_{k-1}}\right)^2,

(the daily-return formula used in contracts; in continuous time σR2→1T∫0Tσt2dt\sigma_R^2\to\frac1T\int_0^T\sigma_t^2dt). Under Q\mathbb Q, dSt/St=r dt+σtdWtdS_t/S_t=r\,dt+\sigma_tdW_t with σt\sigma_t any adapted process and continuous paths.

9.6.1Log-contract replication#

Proposition 9.9log-contract replication; Carr and Madan 1998; Demeterfi, Derman, Kamal and Zou 1999

With F=S0erTF=S_0e^{rT},

Kvar=1TEQ[∫0Tσt2dt]=2erTT[∫0FP(K)K2dK+∫F∞C(K)K2dK].(9.22)K_{var}=\frac1TE^{\mathbb Q}\left[\int_0^T\sigma_t^2dt\right]=\frac{2e^{rT}}{T}\left[\int_0^F\frac{P(K)}{K^2}dK+\int_F^\infty\frac{C(K)}{K^2}dK\right]. \tag{9.22}
Proof

Step 1 (Itô). dln⁡St=dSt/St−12σt2dtd\ln S_t=dS_t/S_t-\tfrac12\sigma_t^2dt, so

∫0Tσt2 dt=2∫0TdStSt−2ln⁡STS0.(9.23)\int_0^T\sigma_t^2\,dt=2\int_0^T\frac{dS_t}{S_t}-2\ln\frac{S_T}{S_0}. \tag{9.23}

The realised variance equals a dynamic position (hold 2/St2/S_t units of the underlying, rebalanced continuously) minus two log contracts. Under Q\mathbb Q, E[∫dS/S]=rTE[\int dS/S]=rT.

Step 2 (static spanning). For any twice-differentiable ff and any S∗>0S^*>0, Taylor's theorem with integral remainder gives

f(ST)=f(S∗)+f′(S∗)(ST−S∗)+∫0S∗f′′(K)(K−ST)+dK+∫S∗∞f′′(K)(ST−K)+dK.(9.24)\begin{aligned} f(S_T)&=f(S^*)+f'(S^*)(S_T-S^*) \\ &\quad+\int_0^{S^*}f''(K)(K-S_T)^+dK+\int_{S^*}^\infty f''(K)(S_T-K)^+dK. \end{aligned} \tag{9.24}

(Check: if ST>S∗S_T>S^*, only the second integral is non-zero and equals ∫S∗STf′′(K)(ST−K)dK=f(ST)−f(S∗)−f′(S∗)(ST−S∗)\int_{S^*}^{S_T}f''(K)(S_T-K)dK=f(S_T)-f(S^*)-f'(S^*)(S_T-S^*) by integration by parts; symmetric if ST<S∗S_T<S^*.) With f=ln⁡f=\ln, f′′(K)=−1/K2f''(K)=-1/K^2:

ln⁡STS∗=ST−S∗S∗−∫0S∗(K−ST)+K2dK−∫S∗∞(ST−K)+K2dK.\ln\frac{S_T}{S^*}=\frac{S_T-S^*}{S^*}-\int_0^{S^*}\frac{(K-S_T)^+}{K^2}dK-\int_{S^*}^\infty\frac{(S_T-K)^+}{K^2}dK.

Step 3 (price). Take EQE^{\mathbb Q}, using EQ[ST]=FE^{\mathbb Q}[S_T]=F, EQ[(K−ST)+]=erTP(K)E^{\mathbb Q}[(K-S_T)^+]=e^{rT}P(K), EQ[(ST−K)+]=erTC(K)E^{\mathbb Q}[(S_T-K)^+]=e^{rT}C(K):

EQln⁡STS0=ln⁡S∗S0+FS∗−1−erT[∫0S∗PK2dK+∫S∗∞CK2dK].E^{\mathbb Q}\ln\frac{S_T}{S_0}=\ln\frac{S^*}{S_0}+\frac{F}{S^*}-1-e^{rT}\left[\int_0^{S^*}\frac{P}{K^2}dK+\int_{S^*}^\infty\frac{C}{K^2}dK\right].

Substitute into (9.23): TKvar=2rT−2EQln⁡(ST/S0)TK_{var}=2rT-2E^{\mathbb Q}\ln(S_T/S_0). Choosing S∗=FS^*=F makes ln⁡(F/S0)=rT\ln(F/S_0)=rT and F/S∗−1=0F/S^*-1=0, which leaves (9.22).∎

The hedge is static in options: hold 2/(TK2) dK2/(TK^2)\,dK of each OTM option, plus a dynamic futures position. The 1/K21/K^2 weight makes the strip's dollar gamma 12ΓS2\tfrac12\Gamma S^2 independent of SS, which is exactly what removes the path dependence of 9.3. Low strikes get the largest weights, so a steep put skew raises KvarK_{var} above the ATM variance.

9.6.2The VIX and India VIX formula#

The VIX discretisation With listed strikes KiK_i, K0K_0 the first strike at or below FF, Q(Ki)Q(K_i) the OTM option mid-price (put below K0K_0, call above, the average of the two at K0K_0), and ΔKi\Delta K_i the half-distance between neighbouring strikes,

σVIX2=2T∑iΔKiKi2erTQ(Ki)−1T(FK0−1)2.(9.25)\sigma^2_{VIX}=\frac2T\sum_i\frac{\Delta K_i}{K_i^2}e^{rT}Q(K_i)-\frac1T\left(\frac F{K_0}-1\right)^2. \tag{9.25}

The last term corrects for K0≠FK_0\ne F: with S∗=K0S^*=K_0 in Step 3, the extra terms are 2[ln⁡(F/K0)−(F/K0−1)]/T≈−(F/K0−1)2/T2[\ln(F/K_0)-(F/K_0-1)]/T\approx-(F/K_0-1)^2/T. The VIX is 100σ302100\sqrt{\sigma^2_{30}}, where σ302\sigma^2_{30} interpolates (9.25) from two expiries to a 30-day horizon. (9.25) is the function variance_swap_strike in m09_strategies.py.

India VIX NSE's India VIX applies this methodology (adapted from CBOE's VIX) to Nifty options: best bid–ask quotes of near- and next-month Nifty options are used to bracket a 30-calendar-day horizon, OTM strikes only, with the at-the-money strike set just below the forward, and the relevant-tenor NSE MIBOR as the rate. The methodology rolls to the next and far expiries when the near month has 3 trading days left, and fills missing quotes by interpolation (natural cubic spline), per the NSE white paper and fact sheet linked in the readings. Confirm the current version on NSE's India VIX page before relying on the details. India VIX is an annualised 30-day risk-neutral volatility, in percent.

Worked example

For a 30-day horizon, F=25,000F=25{,}000, r=6%r=6\%, strikes every 50 points from 15,000 to 35,000:

  • Flat 15% smile: (9.25) gives σ2=0.022508\sigma^2=0.022508, i.e. 15.003%. The discretisation recovers the Black–Scholes variance.
  • Skew σ(K)=15%−0.25ln⁡(K/F)\sigma(K)=15\%-0.25\ln(K/F), floored at 5%, strikes 12,000 to 38,000: σ2=0.022938\sigma^2=0.022938, i.e. 15.15%. The ATM vol is still 15%, but the variance swap is 0.15 vol points higher, because the strip overweights the expensive low strikes.

9.6.3Vega notional and convexity#

Variance vs volatility Variance swaps are traded in vega notional Nvega=2KvolNN_{vega}=2K_{vol}N, so that for small moves the P&L is ≈Nvega(σR−Kvol)\approx N_{vega}(\sigma_R-K_{vol}). The P&L is convex in σR\sigma_R: a seller loses more when realised vol rises by 5 points than she gains when it falls by 5 (Problem 9). A volatility swap (paying σR−K\sigma_R-K) has a lower fair strike than Kvar\sqrt{K_{var}} by Jensen's inequality, EX≤EXE\sqrt{X}\le\sqrt{EX}; the gap is the convexity adjustment and grows with vol-of-vol.

Practitioner notes

  • Truncation. Listed strikes end. Missing wings make (9.25) underestimate KvarK_{var}; in a skewed market most of the missing mass is in the put wing.
  • Jumps. (9.23) needs continuous paths. With a jump S→JSS\to JS, the replicating portfolio of (9.23) pays 2(J−1−ln⁡J)=(ln⁡J)2+13(ln⁡J)3+O((ln⁡J)4)2(J-1-\ln J)=(\ln J)^2+\tfrac13(\ln J)^3+O((\ln J)^4), while the swap pays (ln⁡J)2(\ln J)^2. For a crash (ln⁡J<0\ln J<0) the hedge falls short by about 13∣ln⁡J∣3\tfrac13\lvert\ln J\rvert^3, so a dealer who sold the swap and bought the strip loses on the jump. This is one reason variance swaps are often traded with a cap on realised variance.
  • VIX is not tradable. It is the price of a portfolio rebalanced every day. VIX futures trade at levels that reflect expected future VIX, not today's VIX. Products built on VIX futures inherit this (Case study 9.12.1).

Create a free account

Reading is open to everyone. An account keeps your progress, answers, notes and code drafts, and gives you the study plan, the journals and the simulator. Running code needs an account approved for it.