Calculating Local Volatility from an Implied Volatility Surface
Summary
The document explains how to derive a local volatility surface from a smooth implied volatility surface and how to handle its derivatives in numerical work. It recommends using finite differences across expiry at fixed moneyness for the time derivative, while obtaining strike or moneyness derivatives analytically from the fitted surface. For PDE pricing, these derivatives are evaluated on the solver’s grids; for Monte Carlo, local volatilities are calculated on a spot grid and interpolated during path simulation.
It contrasts this approach with differentiating option prices directly, which can be numerically problematic for far in- or out-of-the-money prices. It also describes preparing discrete market quotes by fitting a smooth strike curve, such as SVI, and interpolating across expiries, often linearly in total variance. The discussion is practical guidance rather than a comparative empirical study: the quality of the result depends on the smoothness and reliability of the input surface and numerical grids. A cited alternative finite-difference scheme can reproduce grid-aligned option prices in a PDE, but requires a specialized formula.
Key ideas
- Use finite differences across expiry at fixed moneyness for the time derivative in the local volatility formula.
- Derive strike or moneyness derivatives from a smooth implied volatility surface.
- For Monte Carlo, interpolate local volatility from a spot grid at each time step.
- Fitting and interpolation choices matter because market quotes are discrete and raw spline fits may be wavy.
Tags
Full text
# How to calculate the local volatility from implied volatility in practice
# How to calculate the local volatility from implied volatility in practice
The local volatility can be derived from the implied volatility. But in practice how we deal with the first-order and second-order derivatives?
I have seen this formula $$ \sigma_{\mathrm{Dup}}(T, K)^{2}=\frac{\frac{\partial w}{\partial T}}{1-\frac{y}{w} \frac{\partial w}{\partial y}+\frac{1}{4}\left(-\frac{1}{4}-\frac{1}{w}+\frac{y^{2}}{w^{2}}\right)\left(\frac{\partial w}{\partial y}\right)^{2}+\frac{1}{2} \frac{\partial^{2} w}{\partial y^{2}}} $$
Source: Gatheral's "The Volatility Surface", p.13, eq. (1.10) https://quant.stackexchange.com/a/40363/16148
I also know that for the Dupire equation below, we can use the finite difference method as in Numerical example of how to calculate local vol surface from IV surface.
$$ \sigma_{L}(k, T)=\sqrt{\frac{\frac{\partial C}{\partial T}}{\frac{1}{2} K^{2} \frac{\partial^{2} C}{\partial K^{2}}}} $$
## Answer by Peter A (score 4)
https://quant.stackexchange.com/a/71731
If we are calculating local volatilities, it is usually because we want to calculate prices either by numerically solving a PDE, or by simulating in Monte Carlo. Depending which of these two approaches we are using, the practical approach differs slightly.
To begin with, we assume we are given a nice smooth volatility surface $\sigma_\text{imp}(K, T)$ where $T$ is time to expiry and $K$ is strike, interpolated from some source of volatilities (or backed out from prices).
The standard approach is to use your first formula (Gatheral eq 1.10). Irrespective of whether we are using PDE or Monte Carlo, we always have a time grid. It might, say, be 100 grid points between valuation time and option expiry. Or it might be a daily or weekly time schedule. The expiry derivative (the numerator in the local volatility formula) should always be calculated by finite difference on this time grid (with strike at fixed moneyness).
Traditionally, the strike (actually moneyness) derivatives are calculated analytically from the smooth implied volatility surface. In the PDE approach, we do this at each PDE spot grid point (and each time grid point). In the Monte Carlo approach, there is no spot grid, but we introduce one purely for the local volatilities. Then we create an interpolator, one for each time grid point, that interpolates the local volatilities from the spot grid. When simulating a spot path, we simulate spot rates forwards in time, and use the interpolator at the current time step to get the local volatility.
To understand why we use finite difference for the numerator, we note that in the case that there is no smile/skew it gives the exact Black-Scholes forward-forward volatilities (so a Monte Carlo would have no discretization error, only simulation error).
There is nothing to stop us using your second formula, directly differentiating call/put prices. However the Gatheral formula is much more direct and elegant and has no concern about numerical issues from far in- or out-of-the-money call prices.
Having said this, it has recently become possible to use a variant of your second formula in such a way that when you solve a PDE numerically, you exactly recover call and put prices when they have strike and expiry on the grid. In this case, the derivatives in the denominator are calculated using finite difference on the strike grid, and a slightly more complex formula is used for the finite difference to calculate the numerator. Details are here: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3530561
## Answer by Ruse (score 0)
https://quant.stackexchange.com/a/71776
In the market you observe a discrete set of option prices for various strikes and expiries, so you have implied vol at this discrete set of $(K, T)$ points.
Then for each expiry, you need a smooth vol as a function of strike. This can be done by interpolation (e.g. cubic spline, doesn't work very well because of the "waviness" of each sub-function) or preferably by fitting a parametric function to the points via non-linear least squares minimization (e.g. SVI).
Then you need some way to interpolate vols in time. Generally linear interpolation in total variance works fine.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.