Dupire local vol¶
Dupire local volatility replaces the constant-volatility assumption with a deterministic surface \(\sigma_{\mathrm{loc}}(S,t)\) chosen so that the model reproduces a continuum of European vanilla prices.
Context¶
Under the risk-neutral measure, the local-vol model writes
Here \(r(t)\) is the risk-free rate and \(q(t)\) is the dividend yield. The objective is not to forecast future realized volatility. It is to find a deterministic diffusion that matches the market's vanilla option prices across strike and maturity.
Core Dupire math¶
From call prices to density¶
Let \(C(K,T)\) be the discounted price of a European call with strike \(K\) and maturity \(T\). In the absence of static arbitrage:
- \(C(K,T)\) is decreasing in \(K\),
- \(C(K,T)\) is convex in \(K\),
- and the curvature \(C_{KK}(K,T)\) is proportional to the risk-neutral density.
That convexity matters because Dupire uses second strike derivatives. A surface that is visually smooth but not convex enough can produce negative or unstable local variance.
Dupire formula in strike space¶
For discounted call prices, the codebase uses
If you work with forward or undiscounted call prices \(c(K,T)\), the numerator changes to
Why the code often works in log strike¶
With \(x = \log K\), the derivatives satisfy
So the discounted-call formula becomes
This is often numerically preferable because it removes the explicit \(K^2\) factor from the denominator. In noisy wing data, that can reduce avoidable amplification.
Why matching marginals is not the whole story¶
Breeden-Litzenberger tells you about the marginal distribution at one maturity. Dupire is stronger: it specifies a full time-inhomogeneous diffusion. Two models can agree on a single maturity distribution and still produce very different dynamics between maturities. That difference matters for hedging, path-dependent pricing, and PDE behavior.
Engineering notes¶
- Local vol is derivative-hungry. You need a surface that is stable in maturity and sufficiently smooth in strike.
- Piecewise-linear behavior in total variance can make \(w_T\) piecewise constant, which shows up as visible banding in local vol.
- That is why the docs recommend a smooth eSSVI projection for Dupire-oriented workflows rather than a raw stack of repaired slices.
- Boundary points are the least trustworthy part of the surface. Trimming and masking are a feature, not a failure.
Assumptions behind local-vol pricing¶
- The market is modeled as complete enough for a deterministic local volatility surface to be meaningful.
- Vanilla option prices are arbitrage-consistent across strike and maturity.
- The required derivatives exist in a stable numerical sense after interpolation or smoothing.
Diagnostics and failure modes¶
The main warning signs are:
- noisy or sign-flipping curvature \(C_{KK}\),
- denominator values that are too small or non-positive,
- negative local variance after differentiation,
- boundary artifacts from sparse wings or short maturity spacing,
- and seam or banding artifacts when \(w_T\) is not time-smooth.
When a local-vol report masks points as invalid, that usually means the differentiation problem is ill-conditioned at those coordinates, not that the diagnostics are being overly conservative.
References¶
- Bruno Dupire, Pricing and Hedging with Smiles
- Jim Gatheral, The Volatility Surface