Skip to content
All library documents

Estimating FX Forward Rates with Zero Curves and Cross-Currency Basis

Article Quant Q&A · Author: TourEiffel

Summary

The discussion explains why an FX forward calculated from two interest-rate curves may differ from a market quote. It recommends using the relevant zero-coupon rates for the forward’s maturity rather than compounding a one-year rate, and describes covered interest rate parity as the starting point for deriving an implied forward from spot and the two currencies’ discount rates. The answer then identifies cross-currency basis as an additional market input that can shift the rate implied by simple curve comparison.

A numerical example estimates the basis by adjusting a quoted swap spread for differences between the reference rate families, producing an implied forward closer to the displayed market value. The author stresses that the estimate is approximate and that rates from different sources and conventions will not necessarily reproduce the screen quote. The post is an illustration of the moving parts, not a precise recipe: conventions, curve construction, basis data, and quote source all matter, and the proposed basis adjustment may be unreliable.

Key ideas

  • Use maturity-matched zero-coupon rates when deriving an FX forward from discount curves.
  • The basic curve-implied forward compares the currencies’ discount rates and scales the result by spot.
  • Cross-currency basis can cause traded forwards to differ from a rate-only calculation.
  • Reference-rate spreads may need adjustment when estimating basis across different curve families.
  • The example’s basis estimate is explicitly approximate and is not a guaranteed way to match a market screen.

Tags

Full text
# How to calculate FX Forward Rate to fit bloomberg


# How to calculate FX Forward Rate to fit bloomberg












If we take the EUR/USD currency pair, how do we calculate the forward rate to match Bloomberg's FRD function?

I assume that if we use both the curve 514 - EUR OIS ESTR and 490 - USD SOFR (vs. FIXED RATE), we should be able to calculate the forward rate. However, it seems I am missing something because my calculation does not match Bloomberg's forward rate.

To calculate the 2-year FX forward rate, I used the following formula:

((1+ESTR_2YEAR)/(1+SOFR_2YEAR)^2) * FX_SPOT

Applying this formula, with the rates:

(((1+3.24267/100)/(1+4.83070/100))^2 ) * 0.9193

This calculation gives a result of 0.891659, whereas Bloomberg shows 0.892039.

What am I doing wrong?

On the right, EUR OIS ESTR and on the left, USD SOFR

FRD Function

## Answer by LongTimeLurker (score 5, accepted)

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

I'm just going to expand on AKdemy's comment. I don't have enough cred to comment (need 50).

As he said they'll never match due to being two fundamentally different sources. But assuming we do this exercise for theoretical reasons, there are a few things also worth pointing out.

Looks like you're using 1y rates compounded twice to get a two year spread. You should generally use the actual given 2Y rate for this. Secondly, I'd highly advice you to use the Zero Coupon rates as an FX forward is just a single cash flow.

Now as mentioned, there is a XCCY basis. This is the difference between forward rates implied by interest rates (what you're attempting to calculate) and actual forward FX rates traded in the market. This is highly material.

ESTR 2Y zero: 2.589 SOFR 2y zero: 4.283

implied forward rate = ((1+2.859/100)/(1+4.283/100))^2 * 0.9193 = 0.8944

So we're still missing something. Let's add the basis.

Now I'm restricted to Eikon at the moment, and I can only pull XCCY quotes for what pretends to be a Libor vs Euribor XCCY swap. Which is quoted at 2.2 bps give or take.

So if we add the XCCY basis quote, subtract the synthetic Libor/Sofr spread of 26.2 bps, add the Euribor/Estr spread of ca. 11 bps. then I estimate an OIS/OIS EUR/USD XCCY basis spread of + 2.2 - 26.2 + 0.11 = -12.8 bps. (disclaimer: not entirely sure how valid this approach is in practice)

If we add this to ESTR rate, we get the following:

implied forward rate = ((1+2.859/100 -12.8/10000)/(1+4.283/100))^2 * 0.9193 = 0.892141

Which is not terribly different from the 0.892108 you've highlighted on screen.

Again, they'll never match, but hopefully this shows a little the moving parts involved. Also please note that the estimation of the OIS/OIS XCCY spread is really a ballpark estimate, so might just be pure luck that even resembles something remotely useful

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.