Foreign Exchange Markets and Currency Forwards › Interest Rate Parity
Quantitative FinanceAll chapters Foreign Exchange Markets and Currency Forwards › Interest Rate ParityOne section · Sections in this chapter5 / 12 ↓
Reading tools Definitions & inline links
Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.
Article links
Make inline references clickable
Interest rate parity (IRP) is the fundamental relationship connecting spot exchange rates, forward exchange rates, and interest rates across countries. It explains why currencies with higher interest rates tend to trade at forward discounts. Understanding this relationship is essential because it reveals why forward rates are not forecasts of future spot rates but rather mathematical consequences of interest rate differentials.
The No-Arbitrage Argument
A simple thought experiment explains interest rate parity. Consider a situation where you have $1 to invest for a period (in years). You have two strategies available, each starting with the same capital and ending at the same future date. For markets to be in equilibrium, both strategies must produce identical returns, otherwise arbitrage would be possible.
Strategy A: Invest domestically
- Invest in a US dollar deposit earning (domestic rate)
- After period : dollars
This is the straightforward approach. You keep your money in dollars and earn the US interest rate.
Strategy B: Invest abroad
- Convert dollars to euros at spot rate (USD per EUR, so you get euros)
- Invest in a euro deposit earning (foreign rate)
- Lock in a forward contract to convert back to dollars at forward rate
- After period : dollars
This alternative path requires more steps but involves no exchange rate risk because the forward contract locks in the conversion rate for the return journey.
For no arbitrage, both strategies must yield the same return. If they didn't, investors would pile into the superior strategy, driving rates until equality was restored. By equating the returns and solving for , we derive the fundamental pricing relationship:
- : forward exchange rate
- : spot exchange rate (domestic per foreign)
- : domestic interest rate
- : foreign interest rate
- : time to maturity in years
This is the covered interest rate parity (CIP) condition. The word "covered" refers to the fact that exchange rate risk is eliminated (covered) by the forward contract.
Covered interest rate parity states that the forward exchange rate must equal the spot rate adjusted for the interest rate differential between two currencies. When the forward is locked in, exchange rate risk is "covered," hence the name.
Forward Premium and Discount
The relationship between spot and forward rates is expressed as:
where:
- : forward exchange rate
- : spot exchange rate
- : domestic interest rate
- : foreign interest rate
- : time to maturity in years
This formula has important implications for understanding currency markets. When , the forward rate , meaning the foreign currency trades at a forward premium (it will be worth more in terms of domestic currency in the forward market than spot). Intuitively, this makes sense: if you can earn more interest in the domestic currency, the market compensates by making the foreign currency relatively more valuable in forward transactions.
Conversely, when , the forward rate , meaning the foreign currency trades at a forward discount. The higher foreign interest rate is offset by expected currency depreciation embedded in the forward rate.
The forward premium or discount can be annualized to express it as a comparable rate:
where:
- : forward exchange rate
- : spot exchange rate
- : number of days to forward settlement
- : the percentage return (yield) locked in by the forward contract
- : scaling factor to convert the period return to an annualized rate
The annualization allows comparison across different tenor forwards and against interest rate differentials.
def forward_rate_cip(spot, r_domestic, r_foreign, T_years):
"""
Calculate forward exchange rate using covered interest rate parity.
Parameters:
-----------
spot : float
Spot exchange rate (domestic per foreign)
r_domestic : float
Domestic interest rate (annualized, simple)
r_foreign : float
Foreign interest rate (annualized, simple)
T_years : float
Time to forward settlement in years
Returns:
--------
forward : float
Forward exchange rate
"""
forward = spot * (1 + r_domestic * T_years) / (1 + r_foreign * T_years)
return forward
def forward_premium_annualized(spot, forward, T_days):
"""Calculate annualized forward premium/discount."""
return (forward - spot) / spot * (360 / T_days)
# Define market parameters
spot_eurusd = 1.0850
r_usd = 0.0525
r_eur = 0.0400
# Calculate 3-month forward (90 days)
T_3m = 0.25
forward_3m = forward_rate_cip(spot_eurusd, r_usd, r_eur, T_3m)
premium_3m = forward_premium_annualized(spot_eurusd, forward_3m, 90)
# Calculate 1-year forward (360 days)
T_1y = 1.0
forward_1y = forward_rate_cip(spot_eurusd, r_usd, r_eur, T_1y)
premium_1y = forward_premium_annualized(spot_eurusd, forward_1y, 360)
# Convert to percentages for display
r_usd_pct = r_usd * 100
r_eur_pct = r_eur * 100
premium_3m_pct = premium_3m * 100
premium_1y_pct = premium_1y * 100EUR/USD Forward Rate Calculation ============================================= Spot rate: 1.0850 USD/EUR US interest rate: 5.25% EUR interest rate: 4.00% 3-month forward: 1.0884 USD/EUR Premium (annual): 1.24% 1-year forward: 1.0980 USD/EUR Premium (annual): 1.20%
Since US rates exceed eurozone rates, the euro trades at a forward premium; it costs more dollars to buy euros forward than spot. This makes intuitive sense: if you can earn more investing in dollars, the forward rate compensates by making the euro relatively more expensive in the future. The market is essentially saying that earning the higher US rate is exactly offset by paying more for euros when the forward matures.


Forward Points
In practice, forward rates are often quoted as "forward points," the difference between the forward rate and spot rate, multiplied by 10,000 (for most pairs) or 100 (for JPY pairs). This convention exists because forward points change more frequently than spot rates and allow dealers to quote forward adjustments without constantly updating full prices.
# Forward points calculation
spot = spot_eurusd
# forward_3m is available from previous block
# Forward points (typically quoted in pips × 10)
forward_points = (forward_3m - spot) * 10000
check_val = spot + forward_points / 10000Spot: 1.0850 3M Forward: 1.0884 Forward points: 33.6 Forward = Spot + Points/10000 = 1.0850 + 33.6/10000 = 1.0884
The calculated value of {python} f'{forward_points:+.1f}' points means the 3-month forward rate is approximately {python} f'{forward_points:.0f}' pips (or points) above the spot rate. Positive forward points indicate a forward premium on the base currency, while negative points indicate a forward discount.

Covered Interest Arbitrage
When CIP is violated, arbitrage opportunities arise. The arbitrage mechanism ensures CIP holds in well-functioning markets. Constructing this arbitrage shows how trading pressure restores the interest rate parity relationship.
Suppose the forward rate is "too high" relative to CIP (i.e., the euro is overpriced in the forward market). You can exploit this mispricing through the following sequence of transactions:
- Borrow dollars at
- Convert to euros at spot rate
- Invest euros at
- Sell euros forward at the (overpriced) rate
- At maturity: receive euros, convert to dollars, repay dollar loan
- Pocket the risk-free profit
This arbitrage is "covered" because the forward contract eliminates exchange rate risk. You know exactly how many dollars you will receive when you convert your euro proceeds at maturity.
def covered_interest_arbitrage(
spot, forward_market, r_domestic, r_foreign, T_years, notional=1_000_000
):
"""
Calculate arbitrage profit when forward rate deviates from CIP.
Returns profit (if positive) or indicates no arbitrage (if negative).
"""
# Fair forward rate from CIP
forward_fair = spot * (1 + r_domestic * T_years) / (1 + r_foreign * T_years)
# If market forward > fair forward, foreign currency overpriced in forward
# Strategy: Borrow domestic, invest foreign, sell foreign forward
if forward_market > forward_fair:
# Borrow domestic currency
domestic_borrowed = notional
# Convert to foreign at spot
foreign_received = domestic_borrowed / spot
# Invest foreign
foreign_at_maturity = foreign_received * (1 + r_foreign * T_years)
# Sell forward at market rate
domestic_at_maturity = foreign_at_maturity * forward_market
# Repay domestic loan
domestic_owed = domestic_borrowed * (1 + r_domestic * T_years)
profit = domestic_at_maturity - domestic_owed
strategy = "Borrow USD, invest EUR, sell EUR forward"
else:
# Opposite: borrow foreign, invest domestic, buy foreign forward
foreign_borrowed = notional / spot
domestic_invested = notional
domestic_at_maturity = domestic_invested * (1 + r_domestic * T_years)
foreign_owed = foreign_borrowed * (1 + r_foreign * T_years)
foreign_to_buy = domestic_at_maturity / forward_market
profit = (
foreign_to_buy - foreign_owed
) * spot # Convert profit to domestic terms
strategy = "Borrow EUR, invest USD, buy EUR forward"
return forward_fair, profit, strategy
# Parameters for arbitrage check
spot = 1.0850
r_usd = 0.0525
r_eur = 0.0400
T_years = 0.25 # 3 months
# Case 1: Consistent rates
fair_1 = spot * (1 + r_usd * T_years) / (1 + r_eur * T_years)
forward_correct = fair_1
fair_1_calc, profit_1, strategy_1 = covered_interest_arbitrage(
spot, forward_correct, r_usd, r_eur, T_years
)
# Case 2: Mispriced forward (50 pips too high)
forward_overpriced = fair_1 + 0.0050
fair_2, profit_2, strategy_2 = covered_interest_arbitrage(
spot, forward_overpriced, r_usd, r_eur, T_years
)Case 1: CIP holds (no arbitrage) Fair forward: 1.0884 Market forward: 1.0884 Profit on $1M: $0.00 Case 2: Forward overpriced by 50 pips Fair forward: 1.0884 Market forward: 1.0934 Strategy: Borrow USD, invest EUR, sell EUR forward Profit on $1M: $4,654.38
The positive profit in Case 2 confirms that when the market forward rate is higher than the theoretical CIP rate, a risk-free arbitrage is possible by borrowing domestic currency and investing in the foreign currency. The arbitrage activity itself pushes rates back toward equilibrium: borrowing pressure raises domestic rates, selling euros forward pushes the forward rate down, until no profit remains.
Uncovered Interest Parity
While covered interest parity uses forward contracts to eliminate exchange rate risk, uncovered interest parity (UIP) makes a prediction about future spot rates based on economic theory rather than arbitrage:
where:
- : expected future spot rate
- : current spot exchange rate
- : domestic interest rate
- : foreign interest rate
- : time to maturity in years
UIP states that the expected future spot rate equals the current forward rate. In other words, high-yielding currencies are expected to depreciate against low-yielding currencies, exactly offsetting the interest rate advantage. The intuition is that if a currency offered both higher interest rates and appreciation, capital would flood in until one or both advantages disappeared.
Unlike CIP (which is a no-arbitrage condition and holds tightly), UIP is an equilibrium hypothesis that doesn't hold well empirically. The "forward premium puzzle" refers to the finding that high-yield currencies tend to appreciate rather than depreciate, contrary to UIP. This anomaly underlies the popular "carry trade" strategy, where investors borrow low-yielding currencies to invest in high-yielding ones, profiting from both the interest differential and (often) favorable currency movements.