Financial
Covered Interest Rate Parity (CIRP): FX forward rate & forward points formula
Compute an illustrative FX forward parity benchmark using simple annual rates, a common day basis and a stated quote convention.
Never flip quote vs. base interest rates when pricing FX hedges!
For a currency pair quoted as Quote per 1 unit of Base (such as EUR/USD = 1.1000 USD per 1 EUR), Covered Interest Rate Parity requires the Quote-currency interest factor in the NUMERATOR and the Base-currency interest factor in the DENOMINATOR: F = Spot * (1 + r_quote * Days / DayCount) / (1 + r_base * Days / DayCount)!
When USD 180-day rates sit at 5.0% and EUR rates at 3.0% (ACT/360), 180-day EUR/USD forward is 1.1000 * (1 + 0.05 * 180/360) / (1 + 0.03 * 180/360) = 1.1000 * 1.025 / 1.015 = 1.1108—trading at +108.4 forward pips ((F - S) * 10,000) because the higher-yielding quote currency (USD) trades at a forward discount!
This is a frictionless parity benchmark, not an executable quote or a future spot prediction. Market forwards may include a cross-currency basis, bid/ask spreads, funding and balance-sheet effects. The example uses the same ACT/360 basis for both currency rates; actual conventions may differ and need separate year fractions. Rates are assumed simple for the stated tenor.
| FX Forward Metric (EUR/USD Spot = 1.1000, 180d ACT/360) | Formula | Illustrative model result |
|---|---|---|
| USD Quote Factor (5.0% * 180/360) | 1 + 0.025 | 1.0250 |
| EUR Base Factor (3.0% * 180/360) | 1 + 0.015 | 1.0150 |
| Outright 180d Forward Rate (F) | 1.1000 * 1.025 / 1.015 | 1.1108 USD/EUR |
| Forward Swap Points (Pips) | (F - 1.1000) * 10,000 | +108.4 pips (Forward premium) |
Outright FX forward rate (ACT/360 money-market convention)
A2=Spot (1.1000), B2=QuoteRate r_USD (0.05), C2=BaseRate r_EUR (0.03), D2=Days (180), E2=Basis (360).
=IF(OR(COUNT(A2:E2)<>5,A2<=0,D2<0,E2<=0),"Invalid inputs",IF(OR(1+B2*D2/E2<=0,1+C2*D2/E2<=0),"Invalid interest factor",ROUND(A2 * (1 + B2 * (D2 / E2)) / (1 + C2 * (D2 / E2)), 4)))FX forward points in standard pips ((Forward - Spot) * 10,000)
Positive pips indicate base-currency forward premium; negative pips indicate forward discount.
The factor 10,000 is specific to a 0.0001 pip in this example. Other currency pairs and quote conventions use different pip sizes. Points use the unrounded forward, then round only the displayed result.
=IF(OR(COUNT(A2:E2)<>5,A2<=0,D2<0,E2<=0),"Invalid inputs",IF(OR(1+B2*D2/E2<=0,1+C2*D2/E2<=0),"Invalid interest factor",LET(fwd, A2 * (1 + B2 * (D2 / E2)) / (1 + C2 * (D2 / E2)), ROUND((fwd - A2) * 10000, 1))))Try the example
Use the original values or change them to test your understanding.