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.


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

  • 1
    $\begingroup$ 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. $\endgroup$
    – Brian B
    Dec 22, 2023 at 15:55

1 Answer 1


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.

  • $\begingroup$ 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? $\endgroup$
    – Attack68
    Jan 5 at 6:34
  • $\begingroup$ 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. $\endgroup$
    – Yike Lu
    Jan 5 at 18:33
  • $\begingroup$ 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. $\endgroup$
    – Attack68
    Jan 5 at 18:49
  • $\begingroup$ 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? $\endgroup$
    – Yike Lu
    Jan 5 at 19:15

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.