A Forward Rate Agreement (FRA) is the purest possible expression of this module's whole idea, because the "underlying" being carried is interest itself. If you can observe today's zero rate for two different maturities (say a 3-month rate r1 and a 9-month rate r2) then a rate for the forward 6-month period starting in 3 months and ending in 9 months (market shorthand: a "3×9" FRA) is not a forecast either; it is whatever rate makes the two-step and one-step routes to month 9 earn identically, using simple interest and each leg's own day-count fraction:
(1 + r2·T2) = (1 + r1·T1) × (1 + f·(T2 − T1)) ⟹ f = [(1 + r2·T2)/(1 + r1·T1) − 1] / (T2 − T1)
How is a forward rate agreement settled?
Worked Example 5 bootstraps exactly this forward rate from a two-point USD money-market curve and then settles the FRA against a realized reference rate at expiry, using the standard discounted-settlement convention (the payment is made at the start of the forward period, so it is present-valued one period back using the realized rate itself):
Advertisement
Settlement (paid to the fixed-rate payer / "FRA buyer") = Notional × (Realized − FRA rate) × τ / (1 + Realized·τ)
Hold onto this section, because it is the direct bridge to swaps: a plain-vanilla interest-rate swap is nothing more than a strip of FRAs (one for every floating reset date) bundled into a single contract. Practice P15 makes that equivalence numerically explicit by rebuilding an entire swap rate out of a sequence of one-year forward rates.
{
"skill": "Building (and sanity-checking) a small FRA or forward-rate calculator instead of hand-cranking each one",
"use": "Have a chat/code assistant draft a short Python function that bootstraps a forward rate from two zero rates and settles an FRA against a realized rate, so you can run many scenarios quickly once the mechanism is already yours.",
"tools": ["Chat/code assistants — Claude, ChatGPT with a code-execution tool", "A local Jupyter/Python environment"],
"prompt": "Write a Python function fra_rate(r1, T1, r2, T2) implementing f = [(1+r2*T2)/(1+r1*T1) - 1]/(T2-T1), and a second function fra_settlement(notional, fra_rate, realized_rate, tau) implementing the discounted settlement formula. Include a short docstring stating which party receives a positive settlement and why.",
"verify": "Run the code against the exact inputs from Worked Example 5 (r1=4.30% at T1=0.25, r2=4.55% at T2=0.75) and confirm it reproduces f=4.6253% and a settlement of $18,279.11 to the fixed payer at a realized rate of 5.00% — if it does not match your own hand computation to the cent, the code has a bug, not you (Guardrail #3, Recompute).",
"diy": "You must already be able to derive f from the two zero rates by hand (the formula above) before automating it — otherwise a sign error or a day-count mistake in the code will look exactly as confident as a correct answer, and you will have no way to catch it.",
"market": "US"
}