Bootstrapping the Zero Curve

The previous lesson handed you a ready-made zero curve and asked you to price a bond with it. In real life the curve is not handed to anyone — the market trades almost no pure zero-coupon bonds beyond a few months' maturity. What you actually see are the prices of ordinary coupon bonds (and short-term deposits, and later, futures and swaps). The zero curve has to be reverse-engineered from those prices, one maturity at a time. That reverse-engineering is called bootstrapping, and it is the first thing a rates desk's systems do every morning before any bond, swap or derivative on the desk can be priced.

The idea: solve for one new rate at a time

Start at the short end, where pure discount instruments (T-bills, bank deposits) genuinely exist — their price directly reveals a zero rate, no algebra required. Then move out along the curve one bond at a time. Each new bond has one cash flow at a brand-new, unknown maturity, and possibly some earlier coupons landing on maturities you have already solved for. Since every earlier zero rate is already known, the bond-pricing equation

B = \sum_{i=1}^{n} C_i\, e^{-R(t_i)\,t_i}

has exactly one unknown left — the zero rate for the new bond's final maturity — and can be solved for it directly. Repeat, moving further out the curve each time, and the whole term structure emerges point by point. This only works if you proceed strictly shortest maturity first: solving a longer bond before its own coupons' zero rates are known leaves you with more unknowns than equations.

Worked example: four instruments, four points on the curve

Suppose these are today's quotes (all face value $100):

InstrumentMaturityCouponPrice
T-bill3 monthsnone (pure discount)98.75
T-bill6 monthsnone (pure discount)97.25
Bond1 year5% semiannual ($2.50 every 6 mo.)99.20
Bond2 years6% annual ($6 once a year)99.30

Step 1 — the 3-month T-bill. A pure discount instrument's price is a zero rate in disguise: 98.75 = 100\,e^{-R(0.25)\times 0.25}, so

R(0.25) = \frac{\ln(100/98.75)}{0.25} \approx 5.03\%.

Step 2 — the 6-month T-bill. Same trick, next maturity:

R(0.5) = \frac{\ln(100/97.25)}{0.5} \approx 5.58\%.

Step 3 — the 1-year bond. Now the first coupon-bearing instrument. Its $2.50 coupon at 6 months discounts at the R(0.5)=5.58\% we just found; only R(1) is unknown:

99.20 = 2.50\,e^{-0.0558 \times 0.5} + 102.50\,e^{-R(1) \times 1} = 2.431 + 102.50\,e^{-R(1)}.

Solving: e^{-R(1)} = (99.20 - 2.431)/102.50 = 0.94409, so R(1) \approx 5.75\%.

Step 4 — the 2-year bond. Its one coupon lands exactly at the 1-year point we just solved, so again only one unknown remains, R(2):

99.30 = 6\,e^{-0.0575 \times 1} + 106\,e^{-R(2) \times 2} = 5.665 + 106\,e^{-2R(2)}.

Solving: e^{-2R(2)} = (99.30 - 5.665)/106 = 0.88335, so R(2) \approx 6.20\%.

Four instruments, four bootstrapped points:

MaturityBootstrapped zero rate
3 months5.03%
6 months5.58%
1 year5.75%
2 years6.20%

This curve is now ready to price any other cash flow landing within these four maturities, exactly as in the previous lesson — bootstrapping is the machine that produces the curve that lesson simply handed you.

Our worked example bootstraps purely off bonds for clarity, but a real curve-construction desk stitches together several different instrument families, because each is most liquid (and most trustworthy) over a different stretch of maturity:

Because these instruments' maturities rarely line up on the exact dates you need, real systems also interpolate between bootstrapped points (linearly, or with a smoother spline) — and the choice of interpolation method is itself a modeling decision with real economic consequences: it can create small, arbitrageable wiggles in forward rates if done carelessly.

Two failure modes to recognize: