Skip to content
All library documents

Calibrating FX Volatility Surfaces with Variable Strikes

Article Quant Q&A · Author: Attack68

Summary

The document describes fitting an FX volatility surface to interbank option strategy prices using weighted least squares and a mesh over expiry and moneyness. It discusses Gauss–Newton or Levenberg–Marquardt updates, with a key complication: market conventions such as delta risk reversals make option strikes depend on the current volatility surface. The Jacobian can therefore include the effect of volatility parameters on strike as well as the direct effect on price.

An implementation report says including strike sensitivity reduced the observed iteration count in one case, while noting that this is empirical and that omitted sensitivity could cause oscillatory convergence for some parameterizations. A separate suggested workflow derives option prices and strikes first, then fits the surface, preferably in total variance, which is central to no-arbitrage conditions. Bisection is presented as a more stable but slower alternative; no broad performance study is provided.

Key ideas

  • FX volatility surfaces can be calibrated by minimizing weighted pricing errors across quoted option strategies.
  • Delta-based strategy strikes change with the volatility surface, so their dependence can enter the calibration Jacobian.
  • Including strike sensitivity reduced iterations in the reported implementation, but the evidence is case-specific.
  • Fitting total variance may provide a better-behaved representation for no-arbitrage constraints.
  • Bisection offers a stability-oriented alternative to gradient-based optimization.

Tags

Full text
# Calibrating an FX Vol surface via Global Optimiser


# Calibrating an FX Vol surface via Global Optimiser












My objective is to determine an FX volatility surface calibrated by interbank market prices.

Suppose that a vol surface, $\Sigma(t,k)$, returns a volatility for time to expiry and strike. The surface uses a mesh with time to expiry in one dimension and money-ness in the second. Interpolation techniques are applied between the parameters, $\sigma_{i,j}$ which represent the values on the mesh.

Fixed, known, values to the iterator are the interest rates (and thus discount factors) and FX forward rates ($\mathbf{R_1},\mathbf{R_2},\mathbf{F})$, and the prices of the interbank option strategies, ($\mathbf{S}$) (straddles, risk reversals, butterflies).

The iterator attemps to find the solution of the following weighted least squares problem, where $\mathbf{r}(..)$ are the prices of the option strategies at that iterate:

$$ \min_{\sigma_{i,j}} (\mathbf{r}(\mathbf{\Sigma};\mathbf{R_1},\mathbf{R_2},\mathbf{F})-\mathbf{S})^T \mathbf{W} (\mathbf{r}(\mathbf{\Sigma};\mathbf{R_1},\mathbf{R_2},\mathbf{F})-\mathbf{S}) $$

Levenberg-Marquardt or Guass-Newton is used here as the update algorithm.

The difference between doing this for a FX Vol Surface and Interest rate curves is that the FX instrument specifications are dependent upon the parameters whilst the interest rate instruments are well defined. For example, a 10Y IRS has defined dates and structure, whereas an FX 25 delta risk reversal has its strikes for each option in the strategy determined from the the volatility of the current vol surface iterate.

Question

The Jacobian, $\frac{\partial r_k}{\partial \sigma_{i,j}}$, which is required for either algorithm, can be constructed with either including the sensitivity of the strike to the volatility or excluding it. I.e.

$$ \frac{d r_k}{d \sigma_{i,j}} = \frac{\partial r_k}{\partial \sigma_{i,j}}, \quad \text{fixing strike K before iterating} \\ \frac{d r_k}{d \sigma_{i,j}} = \frac{\partial r_k}{\partial \sigma_{i,j}} + \frac{\partial r_k}{\partial K_m} \frac{\partial K_m}{\partial \sigma_{i,j}}, \quad \text{K depends on vol} $$

In an AD framework one may be easier or more efficient to implement. I have not conducted any tests yet.

In anyone's experience does implementing (or not implementing) one of the above lead to any spurious behaviour that should be highlighted? Does anyone have any experience with the efficiency of each approach. It is more mathematically correct to include the strike sensitivity in the iteration but it is unclear at this stage whether it is faster overall.

Any other insights welcome...

## Answer by Attack68 (score 2, accepted)

https://quant.stackexchange.com/a/80008

So after implementing it and testing it, the correct approach of including the real sensitivity of the strike when strikes are indeed variable is the most efficient way of getting a global optimiser to complete. I.e. use:

$$ \frac{d r_k}{d \sigma_{i,j}} = \frac{\partial r_k}{\partial \sigma_{i,j}} + \frac{\partial r_k}{\partial K_m} \frac{\partial K_m}{\partial \sigma_{i,j}}, \quad \text{K depends on vol} $$

I have found that if you don't do this the optmisers still tend to complete but in my case it took 15 iters instead of 10, for example. However, this is just empirical and I suspect there may be situations where for certain data parametrisations it may not converge if it enters an oscillatory convergence patterns.

## Answer by Yike Lu (score 2)

https://quant.stackexchange.com/a/77908

I would practically approach this differently.

- First derive spot option prices from the spread strategies, both bid and ask if possible.

- Second derive the actual strike/volatility of all available points.

- Then fit the vol surface, preferably in total variance space.

Note that all no-arb arguments for volatility use total variance $\tau = T \sigma^2$ as the key quantity, not implied volatility itself. The total variance surface is going to be more functionally well behaved than spread prices.

If you don't care about computational efficiency within a factor of 10, bisection search is preferable to gradient based methods due to stability. In addition, bisection is easier to vectorize. It is slower, but well implemented it won't matter in human terms, and even HFT isn't refitting curves at very short time scales.

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.