A Forward Rate Agreement (FRA) is a financial contract between two parties to exchange interest rate payments on a notional principal amount at a future date. This calculator helps investors and treasurers determine the implied forward rate based on current spot rates for two different maturities.
By locking in an FRA, a borrower can hedge against rising interest rates, while a lender can hedge against falling rates. The calculated rate represents the market's expectation of what the interest rate will be for the period between the short date ($t_1$) and the long date ($t_2$).
How to Calculate FRA Rates
The calculation relies on the "no-arbitrage" principle. It assumes that investing for a long period should yield the same return as investing for a short period and then reinvesting the proceeds at the forward rate for the remaining time.
Finally, solve for the Forward Rate:
$Rate = (1.0225 / 1.01 – 1) \times (1 / (0.50 – 0.25))$
$Rate = (0.012376) \times 4 = 0.0495$ or 4.95%
Why is this important?
The FRA rate is critical for derivatives pricing, constructing yield curves, and managing interest rate risk. If the calculated forward rate is significantly different from market quotes, arbitrage opportunities may exist.
function calculateFRARate() {
// Clear previous errors
var errorDiv = document.getElementById("errorDisplay");
var resultContainer = document.getElementById("result-container");
errorDiv.style.display = "none";
errorDiv.innerText = "";
resultContainer.style.display = "none";
// Get inputs by exact ID
var shortDaysInput = document.getElementById("shortPeriodDays").value;
var shortRateInput = document.getElementById("shortRate").value;
var longDaysInput = document.getElementById("longPeriodDays").value;
var longRateInput = document.getElementById("longRate").value;
var basisInput = document.getElementById("dayCountBasis").value;
// Parse values
var t1Days = parseFloat(shortDaysInput);
var r1Percent = parseFloat(shortRateInput);
var t2Days = parseFloat(longDaysInput);
var r2Percent = parseFloat(longRateInput);
var basis = parseFloat(basisInput);
// Validation Logic
if (isNaN(t1Days) || isNaN(r1Percent) || isNaN(t2Days) || isNaN(r2Percent)) {
errorDiv.innerText = "Please fill in all fields with valid numbers.";
errorDiv.style.display = "block";
return;
}
if (t1Days <= 0 || t2Days = t2Days) {
errorDiv.innerText = "Long Period Days (t2) must be greater than Short Period Days (t1).";
errorDiv.style.display = "block";
return;
}
// Calculation Logic
// 1. Convert rates to decimals
var r1 = r1Percent / 100;
var r2 = r2Percent / 100;
// 2. Calculate time fractions based on basis
var t1_fraction = t1Days / basis;
var t2_fraction = t2Days / basis;
// 3. Calculate Interest Factors (1 + r*t)
var factor1 = 1 + (r1 * t1_fraction);
var factor2 = 1 + (r2 * t2_fraction);
// 4. Calculate Forward Rate
// Formula: F = [(1 + r2*t2) / (1 + r1*t1) – 1] * [1 / (t2 – t1)]
var timeDifference = t2_fraction – t1_fraction;
var forwardRateDecimal = ((factor2 / factor1) – 1) * (1 / timeDifference);
// 5. Convert back to percentage
var forwardRatePercent = forwardRateDecimal * 100;
// Display Result
document.getElementById("fraResult").innerText = forwardRatePercent.toFixed(4) + "%";
var gapDays = t2Days – t1Days;
document.getElementById("fraPeriodText").innerText = "Forward rate for the " + gapDays + "-day period starting in " + t1Days + " days.";
resultContainer.style.display = "block";
}