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.
Separate the quote from the quantity inferred from it.
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.
Start from executable inputs and conventions.
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.
Transform quotes without losing units or arbitrage constraints.
Smile slope
Local ATM slope in log-forward-moneyness coordinates.
Open in AnalyticsBreeden–Litzenberger density
Convex call prices imply a non-negative terminal density.
Open in AnalyticsFull derivation
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.
Inputs
k=ln(K/F_T): forward log-moneynessw(k,T)=σ²T: total variance∂K C: digital information∂KK C: density information
Assumptions and limits
- Sparse wings are weakly identified.
- Implied-vol smoothness does not guarantee price convexity.
- A single expiry says nothing about calendar arbitrage.
Wing convexity
The fundamental butterfly-arbitrage requirement lives in price space.
Open in AnalyticsInvert, fit, and reprice the market instruments.
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.
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.06PYTHON IMPLEMENTATIONOpen the implementation and checks.
- Validate domains and units at the boundary.
- Keep the numerical kernel framework-free and deterministic.
- Return diagnostics with values.
- Test analytical limits and failure states.
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 quote and inspect every linked representation.
Smile geometry lab
Move spot, skew and curvature; inspect the smile, risk-neutral density proxy and arbitrage flags.
Base smile: Moderate downside skew.
- implied smile
- ATM tangent
Use Left/Right or Up/Down arrows to inspect values; Home and End jump to the bounds.
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
09MACRO CONNECTIONOpen the transmission channel.
Downside skew and crash insurance
Leverage, jump risk and demand for protection concentrate risk-neutral mass in the downside tail.
transmitsraises put premiums
transmitssteepens left wing
transmitsreprices tail states
outputcreates spot-vol cross risk
10COMMON PITFALLSOpen the failure checklist.
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.
11SOURCES / FURTHER READINGOpen sources and continue the track.
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