Local volatility
An arbitrage-consistent diffusion fitted to today’s vanilla surface
01Derive Dupire local variance from the forward equation.
02Explain why call-price derivatives demand smoothing.
03Contrast exact static fit with forward smile dynamics.
04Design stable interpolation and boundary checks.
Identify the state variables and the behavior they add.
Local volatility replaces one constant σ with a deterministic function σloc(S,t). Given a smooth arbitrage-consistent vanilla surface, Dupire identifies a diffusion that matches all European marginal distributions in ideal theory.
Exact vanilla fit is a static statement.
Differentiation amplifies quote noise.
Forward smile dynamics can be less realistic than the initial fit.
Ask which instruments can identify the dynamics.
Local volatility is a baseline for barrier and path-dependent pricing and a building block for local-stochastic volatility models.
barriers
digitals
autocallables
local-stochastic-volatility hybrids
Surface inputs must share forward, discount, dividend, expiry and strike conventions. Local variance is annualized decimal variance.
Write the dynamics before interpreting parameters.
Local-vol diffusion
Volatility is deterministic conditional on current spot and time.
Open in AnalyticsDupire formula
The call surface determines local variance where derivatives and density are well behaved.
Open in AnalyticsFull derivation
Inverting the forward equation
Match the Fokker–Planck evolution of the local-vol diffusion to strike derivatives of call prices.
- 01
Start with the diffusion
Specify risk-neutral drift and a state-time diffusion coefficient.
- 02
Write density evolution
The forward Kolmogorov equation evolves terminal density under the diffusion.
- 03
Connect density to calls
Use Breeden–Litzenberger to replace terminal density by the second strike derivative of call prices.
- 04
Differentiate through maturity
Differentiate the discounted payoff expectation in T and substitute the density evolution.
- 05
Isolate local variance
Rearrange the forward PDE to obtain Dupire’s numerator over the convexity denominator.
Dupire converts a full static surface into one diffusion, but the inversion is only as reliable as surface cleaning, smoothing and boundary treatment.
Inputs
σloc(S,t): local volatilityC(K,T): call surfaceD(0,T): discount factor∂KKC: density term
Assumptions and limits
- Noise amplification in derivatives.
- Unrealistic forward smile dynamics can mis-hedge exotics.
- Boundary extrapolation materially changes local vol.
Density requirement
A small or negative denominator makes inversion unstable or invalid.
Open in AnalyticsCalibrate, compute, and challenge the dynamics.
Build an arbitrage-controlled call-price surface, compute stable derivatives, floor diagnostics rather than values, and solve PDEs with consistent boundaries.
The model is implied from the vanilla surface rather than optimized to it; smoothing hyperparameters are the effective calibration choices.
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.
Dupire denominator diagnostic
Detect unstable density denominators before computing local variance.
from __future__ import annotations import numpy as np def convexity(strikes: np.ndarray, calls: np.ndarray) -> np.ndarray: if strikes.shape != calls.shape or strikes.size < 5: raise ValueError("aligned grid with at least five nodes required") h = np.diff(strikes) if not np.allclose(h, h[0]): raise ValueError("teaching implementation requires uniform strikes") return (calls[:-2] - 2.0 * calls[1:-1] + calls[2:]) / h[0]**2 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])density_term = convexity(k, c)assert np.isfinite(density_term).all()assert np.all(density_term > 0.0)print(float(density_term.min()))Shock one parameter and trace the full response.
Dupire stability lab
Change smoothing and grid spacing; inspect call convexity, local variance and failure regions.
Smooth: Stable convex price slice.
- local volatility
- scaled density
Use Left/Right or Up/Down arrows to inspect values; Home and End jump to the bounds.
Where the model meets the book.
“The calibration is exact because the interpolation made the difficult decisions first.”
clean call surface
curves and forwards
smoothing rule
grid
boundaries
The model is implied from the vanilla surface rather than optimized to it; smoothing hyperparameters are the effective calibration choices.
RISKlocal-vol vega
barrier sensitivity
surface derivative risk
grid risk
- clean prices
- enforce shape
- differentiate
- diagnose denominator
- solve PDE
Production failure modes
- negative density
- noisy time derivative
- wing explosion
- boundary artifacts
09MACRO CONNECTIONOpen the transmission channel.
Spot moves through a state-dependent surface
A local-vol model maps today’s skew into spot-dependent future diffusion, linking selloffs to higher instantaneous volatility without an independent variance shock.
transmitsdefines state dependence
transmitsmoves into higher local vol
transmitschanges barrier probabilities
outputinherits local dynamics
10COMMON PITFALLSOpen the failure checklist.
Differentiating raw implied vols.
Calling exact vanilla fit a validation of dynamics.
Flooring negative local variance silently.
Ignoring extrapolation in path-dependent pricing.
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