Constructing FX Volatility Surfaces for Delta-Quoted Options
Summary
The document frames the construction of an FX volatility surface for pricing vanilla European options and testing systematic option strategies. It focuses on risk reversals, strangles, and butterflies quoted at 10-delta and 25-delta, and on tracking premiums and Greeks through an option’s life. For a historical test, the author proposes repeatedly selling a six-month 25-delta butterfly over a long daily sample.
The stated workflow is to use market volatility quotes at the relevant deltas, convert delta-based strikes into actual strikes for each tenor and spot level, and build a surface that can support valuation. The question considers QuantLib’s Vanna–Volga barrier engine but notes that it appears limited to 25-delta quotes and is aimed at barrier products. No answer or implementation method is included, so the document does not establish a best practice or compare interpolation approaches. A usable backtest would also depend on historical quote availability, conventions, surface construction, and trade valuation assumptions.
Key ideas
- FX option volatility quotes are commonly expressed at delta-based strikes such as 10-delta and 25-delta.
- Delta quotes must be translated into actual strikes using the relevant market inputs and tenor.
- A volatility surface can support premium and Greek calculations across an option’s lifetime.
- The document asks how to implement the surface in QuantLib but provides no answer or validation.
Tags
Full text
# Best practices for building an FX volatility surface with Quantlib in Python # Best practices for building an FX volatility surface with Quantlib in Python Generally my question is: what are best practices for building FX volatility surfaces with Quantlib? In FX options, I would like to price structures such as risk reversals, strangles and butterflies. Of interest are 10D and 25D structures. I want to evaluate the premium and greeks at different points in the lifetime of the option. More concrete: I want to create a backtest of, for example, selling 6M 25D butterflies daily for the past 20 years. To do this, I would need to generate a volatility surface. A volatility surface in FX is build up by using market volatilities at 10D and 25D strikes. I would transform these delta strikes into real strikes, which are thus at different spot rates for different market tenors. On stackexchange, there is an example of using a VannaVolgaBarrierEngine. This would seem a good method, but it only allows for 25D quotes. And my use case involves pricing vanilla European options, not barriers or anything exotic. Therefore: what would be the best method (from https://quantlib-python-docs.readthedocs.io/en/latest/termstructures/volatility.html & https://quantlib-python-docs.readthedocs.io/en/latest/termstructures.html#sabr) for building an FX volatility surface?
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.