This is part 1 of 4 posts that I would like to share on FX Volatility surfaces. The posts assume that the reader is familiar with the concept of volatility skew. There are many excellent references out there and I don’t want to repeat what you can already find in texts.

This part will focus on how FX traders build a volatility surface. Beginning with three data points $$25\Delta$$ put($$75\Delta$$ call) volatility, at-the-money volatility and $$25\Delta$$ call($$75\Delta$$ put) volatilities, we are to interpolate the curve. The curve should be arb free. Traders use a thumb-rule called the Vanna-Volga method.

VV is extremely intuitive. The idea is to construct a portfolio of $$1$$ long call, short $$\Delta$$ units of the stock and short the three calls ($$25\Delta$$, $$50\Delta$$ and $$75\Delta$$) in the proportion $$(x_{1},x_{2},x_{3})$$. For the portfolio to be arb-free, we set vega, volga and vanna to zero. This yields $$(x_{1},x_{2},x_{3})$$. The weights can be used to compute the vanna-volga adjustment. The market price of the option is simply the sum of the Black Scholes Price and the vanna-volga adjustment.

I could write a first order approximation of the adjustment as :

$$\text{Adjustment}= \text{Vega}\times(\text{IV} – \text{Flat volatility }\sigma_{atm})$$

And a second order one as :

\begin{aligned} \text{Adjustment} &= \text{Vega}\times(\text{IV} – \text{Flat volatility }\sigma_{atm}) \\ &+ \text{Volga}\times(IV – \text{Flat volatility }\sigma_{atm})^{2} \end{aligned}

Solving the above for IV, it’s easy to extract a first-order and second-order approximation.

This document outlines the Vanna-Volga method and a sample code snippet in Python. In my next post, I plan to write on other stochastic volatility models and their C++ implementation.