# 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...

• This question comes up for non-mesh volatility surface specifications as well. I never measured an answer so I am interested to see what people say. Note that for mesh schemes like this, a neat practitioner's trick increases convergence speed: start with a really rough mesh, fit its parameters, and then refine the mesh to double its resolution. Refit with the previous coarser version as the prior. Repeat. Commented Dec 22, 2023 at 15:55

I would practically approach this differently.

1. First derive spot option prices from the spread strategies, both bid and ask if possible.
2. Second derive the actual strike/volatility of all available points.
3. 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.

• Thanks for response. Surely a simple mapping between the $(t, m, \sigma)$ vol surface and the variance surface $(t, m, t\sigma^2$ is obtained and interpolation can be easily applied to it or vice versa? I don't know how you would obtain the individual option prices for a 25delta risk reversal if you don't already have a guess on the vol/variance surface from which to then calibrate the strikes?
– Attack68
Commented Jan 5 at 6:34
• You are correct that the transform between the vol surfaces is trivial. But all the meaningful constraints (ie no arb) on the surface are in variance space. The functional forms for e.g. SVI are written in variance. If you just want something that looks ok visually, then I suppose simple interpolation without checking constraints should be fine. Re: second point, you do not have any outright options prices available? If you don't you can start from straddles which are pretty close to just outright options. Commented Jan 5 at 18:33
• Consider the case where there are 5 instruments visible at each expiry: ATM straddle, 10 and 25 delta RiskReversal and 10and 25 delta broker fly. Then each strategy is a combination of options whose strikes I imply from the current surface and then iterate.
– Attack68
Commented Jan 5 at 18:49
• As I understand it, FX OTC quotes should all be in vol terms, in which case you can solve for the outright call/put vols and go from there. Is this not the case? Commented Jan 5 at 19:15

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.