# Andreasen-Huge Volatility Interpolation

A few years ago Andreasen and Huge have introduced an efficient and arbitrage free volatility interpolation method [1] based on a one step finite difference implicit Euler scheme applied to a local volatility parametrization. Probably the most notable use case is the generation of a local volatility surface from a set of option quotes.

Starting point is Dupire’s forward equation for the prices of European call options $C_t(T, K)$ at time $t$ with strike $K$ and maturity $T$ is given by

$\displaystyle \frac{\partial C_t(T, K)}{\partial T} = \frac{1}{2}\sigma_{LV}^2(T,K)K^2\frac{\partial^2 C_t(T, K)}{\partial K^2} - \left(r(T) -q(T)\right) K\frac{\partial C_t(T, K)}{\partial K}-q(T)C_t(T, K)$

Define the normalized call price $\hat{C}_t(T, \kappa)$ in terms of the discount factor $P(t,T)$, the forward price $F(t,T)$ and the moneyness $\kappa$ as

$\begin{array}{rcl} \displaystyle P(t,T) &=& \displaystyle e^{-\int_t^T r(\tau)d\tau} \nonumber \\ \displaystyle F(t,T) &=& S_t \displaystyle e^{\int_t^T \left( r(\tau)-q(\tau)\right)d\tau} \nonumber \\ \displaystyle \kappa &=& \displaystyle \frac{K}{F(t,T)} \nonumber \\ \displaystyle \hat{C}_t(T, \kappa) &=& \displaystyle \frac{C_t \left( T, \kappa F(t,T) \right) }{P(t,T)F(t,T)} \nonumber \end{array}$.

The Dupire forward equation for the normalized prices $\hat{C}_t(T,\kappa)$ is then given by

$\displaystyle \frac{\partial \hat{C}_t(T, \kappa)}{\partial T} = \frac{1}{2} \sigma_{LV}(T, \kappa F(t,T))\kappa^2 \frac{\partial^2 \hat{C}_t(T, \kappa)}{\partial \kappa^2}$.

Rewriting this equation in terms of $u=\ln \kappa$ amd $\tilde{C}_t(T, u) = \hat{C}_t(T, \kappa)$ yields

$\displaystyle \frac{\partial \tilde{C}_t(T,u)}{\partial T} = \frac{1}{2} \sigma_{LV}^2 \left( T, e^u F(t,T)\right) \left( \frac{\partial^2 \tilde{C}_t(T, u)}{\partial u^2} - \frac{\partial \tilde{C}_t(T, u)}{\partial u}\right)$

The normalized put prices $\tilde{P}_t(T, u)$ are fulfilling the same equation, which can easily been shown by inserting the call-put parity into the equation above

$\displaystyle \tilde{C}_t(T, u) = \tilde{P}_t(T,u) + 1 - e^u$.

The numerical stability of the original algorithm [1] can be enhanced for deep ITM options by calibrating to calls and puts instantaneously. Also the interpolation scheme has a significant impact on the stability. This topic has been discussed in [2][3]. Using concentrated meshes along the current spot level for the finite difference scheme is of advantage for the stability and accuracy of the algorithm.

In order to stabilize the calculation of the local volatility function

$\displaystyle \sigma_{LV}\left( T, e^uF(t,T)\right) = \sqrt{\frac{2 \frac{\partial \tilde{C}_t(T,u)}{\partial T}}{ \frac{\partial^2 \tilde{C}_t(T, u)}{\partial u^2} - \frac{\partial \tilde{C}_t(T, u)}{\partial u} }}$

one should evaluate the first order derivative of $\tilde{C}_t(T,u)$ w.r.t. time $T$ using the fact that the derivative of the inverse of the matrix $\bf{A}(t)$ is given by

$\displaystyle \frac{\partial \bf{A}(t)^{-1}}{\partial t} = -\bf{A}(t)^{-1} \frac{\partial \bf{A}(t)}{\partial t} \bf{A}(t)^{-1}$

As an example, the diagram below shows different calibrations of the Andreasen-Huge volatility interpolation to a SABR volatility skew at discrete strike sets

$x \in \{ 0.02, 0.025, 0.03, 0.035, 0.04, 0.05, 0.06\} \vee x\in \{0.03, 0.035, 0.04\}$

for the SABR parameter

$\alpha = 0.15, \beta = 0.8, \nu = 0.5, \rho = -0.48, \text{fwd} = 0.03, T=20$

The QuantLib implementation is part of the release 1.12.

[1] J. Andreasen, B. Huge, Volatility Interpolation
[2] F. Le Floc’h, Andreasen-Huge interpolation – Don’t stay flat
[3] J. Healy, A spline to fill the gaps with Andreasen-Huge one-step method

## 10 thoughts on “Andreasen-Huge Volatility Interpolation”

1. Mehdi says:

Hello,
I’ve finally found a version of andreasen and huge where the dividende and the rate are not equal to zero.
-Do you have a proof for The Dupire forward equation for the normalized prices you get starting from the general Dupire forward equation ?

– I believe in this set up the calibration is going to be made by using the normalized prices you get in the market (which are basically the black scholes normalized prices) ?

– Do you have any other coded implementation other than the one used in quantlib ? I find it hard to get used to that library.

Thank you for the blog.

2. 1. I don’t have my writings any more but you can get from the Dupire equation for normalized prices to the general Dupire forward equation by applying the chain rule many, many times. You might want to check the following paper for more details, esp. formula 15

2. Yes.
3. Sorry, no.

• Mehdi says:

Thank you for the response 😉

3. Steve says:

I am wondering about the following aspect of the Andreasen-Huge method:
once I have computed the option prices for a fixed number of strikes (say 200) using the one-step finite difference solver, how do I get the price for an option with a strike falling in between the 200 discrete strikes?
I am probably just missing something, but this is not clear to me from the paper.

4. I’d go for either interpolation (If you worry about accuracy you can use many more than 200 steps) or add the needed strikes to the fixed grid in the first place.

• Steve says:

I was thinking interpolation, but it doesn’t seem completely trivial. E.g. do you interpolate in price or implied vol? Linear or higher order?
This matters: e.g. consider interpolating linear in price. Then the pdf (prob density) between strikes is zero, so you pdf is a series of delta functions. Quadratic is better, but you still need to figure out how to extrapolate in the high and low wings. Higher order or ivol – how do you know that the interp does not introduce arbitrage?
Making sure all strikes you want are automatically in the original grid would certainly solve the problem, but this is not exactly convenient depending on the application.
Am I making this too complicated?

5. Steve says:

Sorry, just to add: Andreasen & Huge clealry speak about a continuum of strikes, but as far as I can see they don’t mention how to do the interpolation/extrapolation from the discrete set of strikes at all.

6. I’ve used spline interpolation in prices. You are right, this will introduce a small arbitrage. W.r.t. extrapolation you can make the price grid large enough such that we do not need to extrapolate.

• Steve says:

Thanks for your responses to my questions.
FWIW, it seems to me that a cubic spline ought to have positive convexity throughout since the discrete prices themselves are convex. This interpolation would then correspond to a piecewise constant PDF (since PDF(K) = d2C(K)/dK2), which is guaranteed arb free.

• Steve says:

Obviously meant *quadratic* spline, so that d2c(k)/dK2 is constant…