This might be a very simple question but I wanted to understand how to convert FX volatility surface points which are quoted in one base currency to another currency? Eg I have fx vol quoted in EUR base currency.

I want to use USD base currency instead.

Do I need to build correlation matrix and/or use triangle methodology to compute Fx implied volatility?

Any guide is appreciated.


There is no simple way and you have to make correlation assumptions.

For instance say you have a volatility surface for $\text{EURUSD}$ and another volatility surface for $\text{USDJPY}$ and you want to build a volatility surface for $\text{EURJPY}$.

You start from the observation that a call with maturity $T$ and strike $K$ on $\text{EURJPY}$ with payoff in JPY is equivalent to an option to exchange a quantity of $\text{EURUSD}_T $ USD for a quantity of $K \text{JPYUSD}_T$ USD so that $$ D_{\text{JPY}}(T)E^{Q_{\text{JPY}}}[(\text{EURJPY}_T - K)^+] = D_{\text{USD}}(T)\text{USDJPY}_0 E^{Q_{\text{USD}}}[(\text{EURUSD}_T - K \text{JPYUSD}_T)^+] $$ where $Q_{\text{JPY}}$ is the JPY forward measure and $Q_{\text{USD}}$ is the USD forward measure.

Next you can use a copula function to mix the marginals of $\text{EURUSD}_T$ and $\text{JPYUSD}_T$ under $Q_{\text{USD}}$:

  • You obtain the marginal of $\text{EURUSD}_T$ by differentiating with respect to strike a call option on $\text{EURUSD}$, priced from the $\text{EURUSD}_T$ volatility surface.
  • likewise you obtain the marginal of $\text{JPYUSD}_T$ by differentiating with respect to strike a call option on $\text{JPYUSD}_T$ with payoff in USD, which is equivalent to a put option on $\text{USDJPY}_T$ with payoff in JPY and inverse strike, priced from the $\text{USDJPY}$ volatility surface
  • you assume a correlation $\rho$ between $\text{EURUSD}_T$ and $\text{JPYUSD}_T$, which you plug in your copula function (for instance a Gaussian copula)

You now have a bivariate model to price any $\text{EURJPY}$ option, from which you can infer (by applying inverse Black-Scholes) the $\text{EURJPY}$ volatility surface.

As you can see the methodology relies strongly on the estimation for the correlation $\rho$.

In fact, it often works the reverse way: from the 3 volatility surfaces for $\text{EURUSD}$, $\text{USDJPY}$ and $\text{EURJPY}$ and the approach above, one can infer an implied correlation $\rho$, and use this correlation for other purposes, such as computing the quanto drift adjustment for a quanto $\text{EURUSD}$ option with payoff in JPY.

There are some papers on this methodology. See for instance http://eprints.lancs.ac.uk/45612/1/10.pdf.

  • $\begingroup$ Thanks for that answer, I found this question really interesting and had never encountered or considered it, but at least my instinct was right that it was indeed quite complicated! $\endgroup$ – Attack68 Jun 28 '18 at 10:51
  • $\begingroup$ I'm sorry, have you seen any real implementations of that approach? For me even hard to turn volatility smile into a marginal distribution, not to mention the application of the copula... I'm hoping to find a code example (c++, python, R or mathlab). $\endgroup$ – Mike Jan 22 at 19:46

I don't know the answer to this and am just thinking aloud here but if you were to assume that, say, $$EURJPY = E_j \sim \mathcal{N}(0,\sigma^2)$$ i.e. the volatility of EURJPY here is $\sigma$, but instead you want USDJPY, then you know that:

$$USDJPY = U_j = E_j U_e$$

where $U_e$ is the random variable of USDEUR. Now, your intended random variable is the product of two (possible correlated?) random variables for which you have data.

If you take the simple case that they are assumed to be (joint) normally distributed then the distribution of USDJPY, or $U_j$, is quite a complex matter [see https://mathoverflow.net/questions/11800/what-is-the-probability-distribution-function-for-the-product-of-two-correlated].

Unless I'm having a bad evening and thinking poorly!


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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