Volatility smile and skew
Reading strike-dependent option prices as distributional shape
01Transform strikes into forward log-moneyness.
02Relate skew and curvature to risk-neutral distribution shape.
03Distinguish sticky-strike and sticky-delta dynamics.
04Check strike slices for monotonicity and convexity.
Build the state before the equation.
A smile is the strike slice of a surface at one expiry. Its slope and curvature summarize relative option premiums, but only option-price derivatives—not a visual curve—determine arbitrage consistency.
Equity index skew is often downside-heavy rather than symmetric.
Forward log-moneyness removes much of the carry distortion.
A static fit and a rule for how the smile moves are different model claims.
The product exists before the model.
Smile shape drives relative-value trades, barrier exposure, delta conventions and every model calibrated beyond ATM.
puts and calls by strike
risk reversals
butterflies
digitals and barriers
Use k=ln(K/F_T) unless a market-native delta convention is required. State premium inclusion, forward and option type.
Notation, units and exact claims.
k=ln(K/F_T): forward log-moneynessw(k,T)=σ²T: total variance∂K C: digital information∂KK C: density informationSmile slope
Local ATM slope in log-forward-moneyness coordinates.
Breeden–Litzenberger density
Convex call prices imply a non-negative terminal density.
Wing convexity
The fundamental butterfly-arbitrage requirement lives in price space.
Do not jump to the final expression.
From strike prices to a terminal density
Differentiate a continuum of call payoffs with respect to strike.
- 01
Write the call as an integral
A discounted call is the integral of terminal payoff against the risk-neutral density.
- 02
Differentiate once
The first strike derivative is minus the discounted tail probability.
- 03
Differentiate twice
The second derivative recovers discounted density.
- 04
Translate prices to implied vol
Inverting each premium through Black–Scholes produces the displayed smile; arbitrage checks must still be performed on reconstructed prices.
- 05
Specify smile dynamics
Sticky-strike, sticky-delta, local-vol and stochastic-vol rules imply different P&L when spot moves.
The smile is a quote coordinate for relative option prices; convex prices and explicit dynamics determine whether it is usable.
Fit, compute, then challenge the assumptions.
Clean one expiry, convert to forward moneyness, fit total variance or prices with shape constraints, and validate reconstructed premiums.
Weight liquid nodes by spread or vega, constrain wings, and separate interpolation from extrapolation.
Sparse wings are weakly identified.
Implied-vol smoothness does not guarantee price convexity.
A single expiry says nothing about calendar arbitrage.
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.
Finite-difference density check
Recover a non-negative density proxy from a convex call-price slice.
from __future__ import annotations import numpy as np def density_proxy(strikes: np.ndarray, calls: np.ndarray, discount: float) -> np.ndarray: if strikes.ndim != 1 or calls.shape != strikes.shape or not np.allclose(np.diff(strikes), np.diff(strikes)[0]): raise ValueError("use an aligned uniform strike grid") h = strikes[1] - strikes[0] density = (calls[:-2] - 2.0 * calls[1:-1] + calls[2:]) / (h * h * discount) return density k = np.arange(80.0, 125.0, 5.0)c = np.array([22.0, 18.0, 14.5, 11.5, 9.0, 7.0, 5.5, 4.5, 3.8])f = density_proxy(k, c, 0.98)assert np.isfinite(f).all() and np.all(f >= -1e-12)print(np.round(f, 5))Move the state. Challenge the equation.
Smile geometry lab
Move spot, skew and curvature; inspect the smile, risk-neutral density proxy and arbitrage flags.
Where the model meets the book.
“A wing quote is cheap until the extrapolator makes it expensive.”
forward
strike premiums
discount factors
spread weights
wing rules
Weight liquid nodes by spread or vega, constrain wings, and separate interpolation from extrapolation.
RISKskew delta
wing vega
digital risk
smile dynamics
- normalize strikes
- invert premiums
- fit slice
- reprice
- check convexity
Production failure modes
- stale forward
- mixed call/put sides
- unconstrained splines
- unstable wing extrapolation
Map the transmission channel.
Downside skew and crash insurance
Leverage, jump risk and demand for protection concentrate risk-neutral mass in the downside tail.
raises put premiums
steepens left wing
reprices tail states
creates spot-vol cross risk
Most failures begin outside the formula.
Treating a smooth line as arbitrage-free.
Comparing raw strikes across expiries.
Using mid quotes in illiquid wings without uncertainty bands.
Assuming sticky strike by default.
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