Skip to content
All library documents

Building FX Local Volatility Surfaces from Delta-Quoted Options

Article Quant Q&A · Author: Wynn

Summary

This post describes a challenge in constructing an FX local volatility surface for use with a stochastic local volatility model in QuantLib. FX option quotes are commonly specified by delta, so their strikes vary with maturity and market conventions. That makes it difficult to supply the rectangular strike-and-maturity grid expected by a Black variance surface.

The question considers extrapolating observed volatilities onto common strikes or fitting a SABR volatility surface and using it to obtain implied volatilities. The author reports that one attempted extrapolation produces a surface that QuantLib regards as insufficiently smooth for the SLV model. The document asks for a practical workflow or examples but does not provide an accepted solution, validation, or comparison of methods. It therefore identifies the input and smoothness issues without establishing which interpolation or parameterization works best for FX data or TARF path generation.

Key ideas

  • FX option volatility quotes are often expressed by delta rather than fixed strike.
  • A Black variance surface expects volatility values on a strike-by-maturity grid.
  • Mapping delta quotes to common strikes can require interpolation or extrapolation across maturities.
  • The attempted surface was rejected as insufficiently smooth by the SLV workflow, and the post leaves the remedy open.

Tags

Full text
# Best practise for FX local vol surface in Quantib Python with SLV in mind


# Best practise for FX local vol surface in Quantib Python with SLV in mind












I am trying to generate a ql.HestonSLVMCModel vol surface for FX (to generate paths and price TARFs). To start with I need a local vol surface. In FX, strikes are not fixed but quoted in delta. This complicates the use of ql.BlackVarianceSurface because it requires a rectangular grid of vols.

In a post by StackG I found a proposed method (in the comment of user35980) whereby the original vols at given strikes are extrapolated for every given strike at different maturities. I tried this, but the SLV surface I generate with this constantly tells me "the black vol surface is not smooth enough" and cannot calculate the surface.

StackG proposed generating a SABR vol surface and retrieving implied vols from this.

However this looks a bit cumbersome.

Therefore I would like to ask: with the goal of using a local vol surface in a ql.HestonSLVMCModel, what is the best way of working in FX? Does anyone have experience with this, or examples to share?

I'm using Quantlib in Python for this

Regards

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.