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?

  • $\begingroup$ I am planning on using (quant.stackexchange.com/questions/57376/…) as a guide. I'm under the impression that the VannaVolgaBarrierEngine is not a good model for this vanilla stuff. What I'm still figuring out is how to feed all these vols with different strikes at different tenors to the BlackVarianceSurface. It seems the BlackVarianceSurface needs vols at the same strikes for different maturities, which is not how FX works. Any guidance in this process is helpfull. $\endgroup$
    – Wynn
    Oct 10, 2023 at 6:44
  • $\begingroup$ Also: would the AndreasenHugeVolatilityAdapter be a good solution for this? It seems to be able to fit a vol surface for different strikes at different tenors. $\endgroup$
    – Wynn
    Oct 10, 2023 at 6:53


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.