Can someone explain which curves are used to calculate FX forward rates? I have the idea that it involves using the local OIS curves for both currencies, but my calculation shows that it is not the case.
Your method assumes you can borrow or lend at OIS in both currencies, but in practice you cannot. That's why there is a current basis swap market , where you lend at OIS in one currency versus borrowing at OIS + X in the other currency , where X is not zero. That is the missing piece of your calculation.
Why, you may ask , is X not zero , as many textbooks assume? Apparently because most institutions cannot actually borrow and lend at OIS in all currencies. For example , only certain banks in the US have access to the Federal Funds market.
I agree with dm63 in that cross-currency swap (CCS) is essential for building FX forward curve. Let me add/correct two things:
FX curve < 1 year can be backed out by FX forward contract. CCS is typically longer than 1 year, so you need it for the long-end of the FX curve.
CCS swap is typically exchange of 3m USD LIBOR vs 3m FOREIGN LIBOR (or equivalent) + BASIS on top of the notional exchange at the start and end of the swap. (CCS against non-deliverable currencies are a bit different.) Anyway, CCS doesn't involve central bank rate like OIS. The BASIS is determined by market force depending on the need for the USD funding from the foreign counterpart (or vice versa). Given the BASIS, you solve the FX forward at the swap maturity which make the exchange of the two cashflows zero value. Starting from the shorter maturity CCS, you can boot-strap to the longer end.