Local Volatility and the Dupire Equation
Local volatility is a deterministic function sigma_loc(S,t) chosen so that a one-factor diffusion reproduces every observed European vanilla option price. Dupire’s equation extracts that function from the market call surface. It is attractive because it exactly fits today’s implied-volatility surface; it is dangerous because an exact fit to terminal distributions says little about future smile dynamics.
The local-volatility diffusion
Under the risk-neutral measure:
dS_t = (r(t) - q(t)) S_t dt + sigma_loc(S_t, t) S_t dW_t
Unlike Black-Scholes, the volatility depends on both spot and time. Every fixed maturity therefore has a distribution shaped to match option prices, including its skew. The model remains complete: a single Brownian factor can be hedged with the stock, at least in its continuous idealization.
Dupire's forward equation
Write C(K,T) for a call price across strike and maturity with deterministic rates and dividends. The Dupire formula is:
sigma_loc^2(K,T) =
[dC/dT + (r-q) K dC/dK + q C] / [0.5 K^2 d2C/dK2]
Under zero rates and dividends it simplifies:
sigma_loc^2(K,T) = (dC/dT) / (0.5 K^2 d2C/dK2)
The denominator is the risk-neutral density scaled by K^2; it must be non-negative. This exposes the central engineering problem: Dupire differentiates market data twice in strike and once in time. Raw implied-volatility quotes are sparse, noisy, and often internally inconsistent, so direct finite differences create explosive or negative local variance.
| Required property | Violation | Result |
|---|---|---|
d2C/dK2 >= 0 | butterfly arbitrage | negative density/local variance |
dC/dT >= 0 in appropriate forward units | calendar arbitrage | impossible forward evolution |
| smooth derivatives | noisy interpolation | unstable exotic prices |
Surface construction before differentiation
Build a cleaned price or total-variance surface first. A production sequence is:
- Convert each quote to forward log-moneyness
k = log(K/F_T)and total variancew = IV^2 T. - Remove stale and crossed markets; enforce intrinsic-value bounds.
- Fit each expiry with an arbitrage-aware parameterization such as SVI, or solve a constrained smoothing problem.
- Interpolate total variance across maturities while enforcing calendar monotonicity.
- Differentiate the smooth representation analytically or with controlled automatic differentiation.
The common raw-data mistake is treating delta quotes as fixed strikes. FX-style delta conventions depend on the implied volatility being solved for; convert them consistently using the correct forward and premium-adjustment convention.
A finite-difference implementation sketch
For a grid of arbitrage-cleaned call prices, central differences are a diagnostic baseline:
import numpy as np
def dupire_local_var(calls, strikes, maturities, r=0.0, q=0.0):
# calls shape: (n_maturities, n_strikes), regular grids assumed
dT = np.gradient(calls, maturities, axis=0, edge_order=2)
dK = np.gradient(calls, strikes, axis=1, edge_order=2)
dKK = np.gradient(dK, strikes, axis=1, edge_order=2)
K = strikes[None, :]
numerator = dT + (r - q) * K * dK + q * calls
denominator = 0.5 * K**2 * dKK
return np.where(denominator > 1e-12, numerator / denominator, np.nan)
Do not ship this directly: the grid is rarely regular, boundary derivatives are poor, and small curvature noise is amplified. It is useful as a comparison against the derivatives of your fitted surface. Flag values outside a defensible range rather than silently clipping them; clipping masks an arbitrage or interpolation defect.
Pricing and hedging exotics
Once sigma_loc is available, use a one-dimensional PDE or Monte Carlo. A finite-difference PDE is efficient for barrier, American, and single-underlying structures. Local vol usually prices down-and-out equity calls lower than constant-vol Black-Scholes when spot-vol correlation is negative: a falling path encounters higher local volatility and is more likely to knock out.
That behavior is plausible conditional on today’s surface, but its hedging dynamics are model-specific. A local-vol delta assumes the smile moves according to deterministic spot dependence—often called “sticky strike” behavior. Actual markets can exhibit sticky delta, jumps, and independent volatility moves. Compare exotic vega and skew sensitivity with a stochastic-vol benchmark such as Heston.
Calibration identity versus forecasting
Dupire’s result is exact for current European prices, assuming a smooth arbitrage-free continuum. It does not imply that local volatility is the physical instantaneous volatility. It is a risk-neutral projection: many stochastic-volatility models share the same marginal distributions and therefore the same vanilla prices, while producing different joint path distributions. This is why a local-vol model can be perfect on vanillas and poor on forward-starts, cliquets, or options whose payoff depends on future implied volatility.
Key takeaways
- Dupire maps an arbitrage-free vanilla surface to a deterministic local-volatility function.
- Differentiation amplifies quote noise; smooth and enforce arbitrage before computing derivatives.
- Local vol exactly reproduces current vanilla prices, not necessarily future smile dynamics.
- PDE methods make it practical for one-factor path-dependent products.
- Benchmark exotic price and hedge sensitivity against stochastic-volatility alternatives.
