How to Calculate Currency Forward Rate

Currency Forward Rate Calculator

Calculate the fair value of a forward contract based on Interest Rate Parity.

360 Days (Standard) 365 Days (GBP/HKD/AUD)

Calculation Results

Estimated Forward Rate:
Forward Points:
Premium/Discount:

Understanding Currency Forward Rates

A currency forward rate is the exchange rate at which a bank or financial institution agrees to exchange one currency for another at a specific future date. This rate is not a prediction of where the spot rate will be in the future, but rather a calculation based on the interest rate differentials between the two countries.

The Forward Rate Formula

The calculation is based on the Interest Rate Parity (IRP) theory. The standard formula for discrete compounding is:

F = S × [1 + (rd × t)] / [1 + (rf × t)]
  • F = Forward Rate
  • S = Current Spot Rate
  • rd = Domestic (Quote) Interest Rate (annualized)
  • rf = Foreign (Base) Interest Rate (annualized)
  • t = Time to maturity (Days / Day Count Convention)

Why do Forward Rates differ from Spot Rates?

The difference between the spot rate and the forward rate is known as the forward points. If the domestic interest rate is higher than the foreign interest rate, the forward rate will typically be higher than the spot rate (the foreign currency trades at a forward premium). Conversely, if the domestic rate is lower, the foreign currency trades at a forward discount.

Practical Example

Suppose you want to calculate the 90-day forward rate for EUR/USD:

  • Spot Rate: 1.1000
  • USD Interest Rate (Domestic): 5.00%
  • EUR Interest Rate (Foreign): 3.00%
  • Time: 90 days / 360

Calculation: 1.1000 × (1 + (0.05 × 0.25)) / (1 + (0.03 × 0.25)) = 1.1054

function calculateForwardRate() { var spot = parseFloat(document.getElementById('spotRate').value); var days = parseFloat(document.getElementById('daysToMaturity').value); var domRate = parseFloat(document.getElementById('domesticRate').value) / 100; var forRate = parseFloat(document.getElementById('foreignRate').value) / 100; var basis = parseFloat(document.getElementById('dayCount').value); if (isNaN(spot) || isNaN(days) || isNaN(domRate) || isNaN(forRate)) { alert("Please enter valid numerical values in all fields."); return; } var timeFactor = days / basis; // Formula: F = S * (1 + (rd * t)) / (1 + (rf * t)) var numerator = 1 + (domRate * timeFactor); var denominator = 1 + (forRate * timeFactor); var forwardRate = spot * (numerator / denominator); // Calculate Points (assuming 4 decimal places for pips) var points = (forwardRate – spot) * 10000; // Determine Premium or Discount var status = ""; if (forwardRate > spot) { status = "Forward Premium"; } else if (forwardRate < spot) { status = "Forward Discount"; } else { status = "Par"; } // Display Results document.getElementById('resForwardRate').innerText = forwardRate.toFixed(6); document.getElementById('resForwardPoints').innerText = points.toFixed(2) + " pips"; document.getElementById('resStatus').innerText = status; document.getElementById('forwardResult').style.display = 'block'; }

Leave a Comment