Volatility term structure
Locating uncertainty, events and mean reversion along the expiry axis
01Convert implied volatility into total variance.
02Derive forward variance between two maturities.
03Recognize event bumps and term inversion.
04Test a term slice for calendar consistency.
Build the state before the equation.
A term structure shows where the option market locates uncertainty in time. Volatility levels are not additive; total variance is the object that carries across adjacent horizons.
A flat volatility curve still implies increasing total variance.
Scheduled events create localized variance increments.
Negative forward variance signals inconsistent inputs or interpolation.
The product exists before the model.
Term structure controls calendar spreads, event trades, variance forwards and the maturity dimension of every surface.
calendar spreads
variance swaps
forward-start options
earnings and event options
This lesson uses annualized implied volatility and total variance w(T)=σ²(T)T. Expiries use a consistent ACT/365-like year fraction.
Notation, units and exact claims.
w(T)=σ²(T)T: total varianceξ(T1,T2): forward varianceT1<T2: maturity intervalΔT=T2-T1Total variance
Variance accumulated to maturity in the chosen strike or delta slice.
Forward variance
Average variance priced for the forward interval.
Calendar condition
A practical fixed-coordinate condition used to detect negative forward variance.
Do not jump to the final expression.
Extracting a forward variance interval
Assume integrated variance adds over non-overlapping time intervals.
- 01
Express each maturity in total variance
Convert annualized volatility quotes before taking differences.
- 02
Partition integrated variance
Cumulative variance to T2 equals cumulative variance to T1 plus the forward interval.
- 03
Solve for the forward rate
Rearrange the partition identity.
- 04
Require non-negative increments
A negative forward interval is economically and numerically suspect for a diffusion-style variance representation.
- 05
Interpret event bumps
A discrete event variance can be added to baseline integrated variance, causing short maturities spanning the event to look elevated.
Term structure becomes coherent when represented as cumulative and forward variance, with the maturity clock and coordinate held fixed.
Fit, compute, then challenge the assumptions.
Fit monotone total variance through liquid expiries, preserve event knots, and extract forward intervals for interpretation.
Use spreads and liquidity weights; do not smooth away scheduled events or force a parametric curve that creates negative increments.
Fixed-strike and fixed-delta slices differ as forward moves.
Sparse long maturities require extrapolation.
Event variance is not directly observable.
Static fit is not dynamics.
| Question | Black–Scholes | Local volatility | Heston |
|---|---|---|---|
| Volatility state | One constant σ | σ(S,t) deterministic | vₜ stochastic |
| Fits today’s surface | No | Exactly, in ideal theory | Approximately by calibration |
| Forward dynamics | Flat smile | Spot-driven | Variance + correlation driven |
| Primary strength | Transparent baseline | Vanilla-consistent diffusion | Richer smile dynamics |
| Primary failure | No smile | Often unrealistic forward skew | Parameter and calibration instability |
| Compute | Low | Medium: PDE/MC | Medium–high: Fourier/PDE/MC |
| Hedge implication | Greeks at one σ | State-localized vol hedge | Variance and vol-of-vol risk |
Implementation with current QuantLib
Current QuantLib separates market structures, processes, instruments, engines and calibration helpers. Use those abstractions only after the lesson’s conventions, domains and numerical checks are explicit.
API authority: upstream QuantLib reference pinned in the source registry.Theory → implementation → checks.
Forward variance extraction
Convert a volatility term structure into non-negative forward intervals.
from __future__ import annotations import numpy as np def forward_variances(times: np.ndarray, vols: np.ndarray) -> np.ndarray: if times.shape != vols.shape or np.any(np.diff(times) <= 0) or np.any(vols < 0): raise ValueError("times must increase and vols must be non-negative") total = vols**2 * times forwards = np.diff(total) / np.diff(times) if np.any(forwards < -1e-12): raise ValueError("negative forward variance") return forwards t = np.array([30, 90, 180, 365]) / 365.0vol = np.array([0.28, 0.24, 0.225, 0.22])fwd = forward_variances(t, vol)assert np.isfinite(fwd).all() and np.all(fwd >= 0.0)print(np.round(np.sqrt(fwd), 4))Move the state. Challenge the equation.
Forward-variance lab
Add an event bump or invert the front end; inspect total and forward variance by interval.
Where the model meets the book.
“The front expiry is not high; it contains a different piece of time.”
expiry timestamps
forward coordinate
ATM/slice vols
event calendar
spread weights
Use spreads and liquidity weights; do not smooth away scheduled events or force a parametric curve that creates negative increments.
RISKcalendar vega
event variance
roll-down
forward-vol exposure
- normalize expiries
- convert total variance
- fit monotone curve
- extract forwards
- stress events
Production failure modes
- day-count mismatch
- event timestamp error
- negative forwards
- over-smoothed knots
Map the transmission channel.
Events redistribute variance through time
Policy decisions, elections and earnings concentrate uncertainty in intervals rather than lifting every maturity equally.
localizes uncertainty
adds an event increment
forms a bump or inversion
isolates the interval
Most failures begin outside the formula.
Subtracting volatilities to obtain forward volatility.
Comparing expiries with inconsistent clocks.
Smoothing through known events.
Calling an inverted volatility curve arbitrage by itself without inspecting total variance.
Attribution with implementation authority.
Volatility, Monte Carlo and stochastic-volatility lectures
Research map for the mathematical progression and numerical experiments; prose, examples and code are original.
- Source
- Computational Finance Course
- Author
- L. A. Grzelak
- Ref
- main
Current volatility structures, processes, calibration helpers and tests
Implementation reference for production abstractions and validation patterns.
- Source
- QuantLib upstream
- Author
- QuantLib contributors
- Ref
- v1.42.1