Bonds, the yield curve, duration and convexity, bootstrapping, and the workhorse of fixed-income desks — the vanilla interest-rate swap.
A zero-coupon bond is the simplest fixed-income instrument: it pays a single unit at maturity $T$ and nothing in between. Its price today, under a flat continuously compounded rate $r$, is
$$Z(t, T) = e^{-r(T-t)}.$$
A coupon bond pays a stream of coupons $C$ at dates $t_i$ together with the face value $F$ at maturity. It is just a portfolio of zeros:
$$B = \sum_{i=1}^{N-1} C\, Z(t,t_i) + (C + F)\, Z(t, t_N).$$
The riskless rolling account $M_t$ growing at the short rate $r_t$:
$$dM = r_t M\, dt, \quad M_0 = 1.$$
The numeraire of choice for risk-neutral pricing.
Separate Trading of Registered Interest and Principal — a coupon bond is split into its component zeros and they trade individually. Lets the market read off the discount curve directly.
A single rate $y$ that, when used to discount all cashflows, reproduces the market price:
$$B = \sum_i C_i\, e^{-y t_i}.$$
This deck stays close to Wilmott's chapters 14 and 15. The interactive bond calculator on slide 10 lets you turn coupon, maturity, face value and yield knobs and watch price, duration, convexity and DV01 update live — the same example used in the book to motivate the Taylor expansion in $y$.
An agreement struck at $t$ to lock in a borrowing/lending rate $K$ for the future period $[T_1, T_2]$ on notional $N$. The payoff at $T_2$ is
$$N \cdot (L - K)(T_2 - T_1),$$
where $L$ is the realised LIBOR/SOFR fixing for the period. By no-arbitrage the fair $K$ is the forward rate $f(t; T_1, T_2)$ implied by today's discount curve.
A repurchase agreement: sell a bond today, agree to buy it back at a fixed price tomorrow (or in a few weeks). Economically a collateralised loan. The implied financing rate is the repo rate, and it's what most cash bond trades are actually funded at.
Reverse repo: the same trade from the other side — lend cash, take collateral.
Both contracts are the plumbing that lets the bond and short-rate markets connect to each other. The FRA pins down forward rates; the repo pins down the financing cost of holding inventory.
Every "buy the bond and finance it" arbitrage in this chapter is, in practice, executed via the repo market. The cost-of-carry you see in the forward bond price is the repo rate, not some abstract risk-free rate.
Bonds trade between coupon dates. The quoted (clean) price doesn't include the coupon that's been accruing since the last payment — but the buyer still has to pay it. The dirty (invoice) price is the clean price plus the accrued interest.
$$P_\text{dirty} = P_\text{clean} + \text{accrued}.$$
| Convention | Day count | Typical use |
|---|---|---|
| Act/Act | actual days / actual days in coupon period | UK gilts, US Treasuries |
| Act/360 | actual days / 360 | USD LIBOR, money markets |
| Act/365 | actual days / 365 | GBP money market |
| 30/360 | each month treated as 30 days, year as 360 | US corporate bonds |
It looks like book-keeping — and it is — but a mis-applied day-count convention will quietly add or subtract a few basis points from every trade you do. Quants who think this stuff is beneath them lose money.
For a bond paying coupon $C$ at the end of a period of length $\tau$ days, with $d$ days elapsed since the last coupon:
$$\text{accrued} = C \cdot \frac{d}{\tau}.$$
The yield to maturity $y$ of a bond is the single rate that discounts its cashflows back to its market price. Two parallel definitions:
$$B = \sum_i C_i\, e^{-y\, t_i}.$$
This is the convention we use in the rest of the deck. The derivative $\partial B/\partial y$ is clean.
For a bond paying $m$ coupons per year:
$$B = \sum_i \frac{C_i}{(1 + y/m)^{m\, t_i}}.$$
This is what most trading systems quote. The two yields differ by $O(y^2/m)$.
Given the price, $y$ is found numerically — there is no closed form except for a zero-coupon bond, where
$$y = -\frac{1}{T-t} \log\!\frac{B}{F}.$$
Yield is just an internal-rate-of-return label for the price; it is not a forecast of future returns, and it is not the same as the discount rate $r$ that the market is using underneath if rates aren't flat. The yield curve (next slide) is the way out of this confusion.
A semi-annual yield $y_2$ corresponds to a continuous yield $y_c = 2 \log(1 + y_2/2)$. At small rates the two are nearly identical; at 10% they differ by ~25 bps.
Three curves all describe the same underlying discount factors $Z(0, T)$.
The yield on a zero-coupon bond of maturity $T$:
$$Z(0,T) = e^{-r(T)\, T}.$$
Reading the curve straight off the STRIPS market gives you this.
The rate locked in today for borrowing from $T_1$ to $T_2$:
$$f = \frac{r(T_2)T_2 - r(T_1)T_1}{T_2 - T_1}.$$
Instantaneous forward: $f(T) = -\partial \log Z / \partial T$.
The coupon rate that makes a fresh bond price exactly at par:
$$1 = c^*\!\sum_i Z(0,t_i) + Z(0,T).$$
This is what new bond issues are priced from.
Spot, forward, and par all carry the same information — they're three different lenses on the same set of discount factors. Trading desks prefer one or the other depending on whether they're looking at carry, hedging, or new issuance.
The relationship between them is exact arithmetic, not a model. Once you've bootstrapped $Z(0,T)$ for all $T$ on a regular grid, the other two curves drop out for free.
The first sensitivity question a fixed-income trader asks: how much does my bond price move if the yield wiggles?
The Taylor expansion of $B(y)$ around the current yield $y_0$:
$$\Delta B \approx \frac{\partial B}{\partial y}\, \Delta y + \tfrac{1}{2} \frac{\partial^2 B}{\partial y^2}\, (\Delta y)^2.$$
A weighted average maturity, with weights given by the present value of each cashflow:
$$D_\text{Mac} = \frac{1}{B} \sum_i t_i\, C_i\, e^{-y t_i}.$$
Has units of years — a 10-year bond paying coupons has $D_\text{Mac}$ a bit less than 10.
The price sensitivity directly:
$$D_\text{mod} = -\frac{1}{B}\, \frac{\partial B}{\partial y}.$$
For continuously compounded $y$, $D_\text{mod} = D_\text{Mac}$. For semi-annual $y_2$, $D_\text{mod} = D_\text{Mac}/(1 + y_2/2)$.
The headline number every trading-floor risk system displays for a bond position is DV01 (or PV01, basis point value):
$$\text{DV01} = -\frac{\partial B}{\partial y} \times 10^{-4} = B \cdot D_\text{mod} \cdot 10^{-4}.$$
The change in price, in pounds, per one basis point (0.01%) increase in yield. A bond with $D_\text{mod} = 7$ and price £100 has DV01 = £0.07.
Duration captures only the linear part. For small yield moves (a few bps) it's enough; for large ones (1%+) you'll need convexity too. That's the next slide.
The second-order term in the Taylor expansion of the bond price:
$$\frac{\Delta B}{B} \approx -D_\text{mod}\, \Delta y + \tfrac{1}{2} C\, (\Delta y)^2,$$
where convexity is
$$C = \frac{1}{B}\, \frac{\partial^2 B}{\partial y^2} = \frac{1}{B} \sum_i t_i^2\, C_i\, e^{-y t_i}.$$
$\partial^2 B/\partial y^2$ is a sum of positive terms, so $C > 0$ for any bond with positive cashflows. Geometrically: the price-yield curve is convex, so a duration line underestimates the price on both sides of $y_0$.
For two bonds with the same duration, the more convex one outperforms when yields move by a lot — in either direction. This is why long-dated, low-coupon bonds (high convexity) command a premium in volatile-rate environments.
| Bond | $D_\text{mod}$ (yr) | $C$ (yr$^2$) | $\Delta B / B$ for $\Delta y = +1\%$ |
|---|---|---|---|
| 5-yr 5% coupon | 4.4 | 22 | $-4.4\% + 0.11\% \approx -4.29\%$ |
| 10-yr 5% coupon | 7.9 | 76 | $-7.9\% + 0.38\% \approx -7.52\%$ |
| 30-yr zero | 30 | 900 | $-30\% + 4.5\% \approx -25.5\%$ |
Notice how the convexity correction grows with $(\Delta y)^2$ and with maturity squared. For the 30-year zero, ignoring it would mis-price a 100 bp move by nearly 5%.
The market gives you the prices of a handful of bonds. You want the whole curve of discount factors $Z(0, T)$ for every $T$. The recipe is iterative:
The bonds you bootstrap from are at discrete maturities. To price something in between you need to interpolate. Common choices:
Once $Z(0, T)$ is known on a fine grid, you can:
In practice the inputs are not bond prices but a mixed bag of deposits, futures, FRAs and swap rates. The swap curve has become the reference rather than the Treasury curve, because OIS — not Treasuries — is what dealers fund at. The mechanics are the same; the input instruments are different.
A vanilla swap: party A pays a fixed rate $K$ on notional $N$, party B pays floating LIBOR/SOFR on the same notional, on the same schedule of dates $t_1, \ldots, t_n$.
Pays $N \cdot L_i \cdot \tau_i$ at $t_i$, where $L_i$ is the LIBOR fixing at $t_{i-1}$. By the standard arbitrage argument, the PV of all floating coupons plus the (hypothetical) return of notional at $t_n$ equals $N$ today:
$$\text{PV}_\text{flt} = N\, [1 - Z(0, t_n)].$$
Pays $N \cdot K \cdot \tau_i$ at each $t_i$:
$$\text{PV}_\text{fix} = N\, K \sum_i \tau_i\, Z(0, t_i).$$
At inception, neither party pays the other — so the fair fixed rate is the one that makes the two legs equal in PV:
$$\boxed{\;K^* = \frac{1 - Z(0, t_n)}{\sum_i \tau_i\, Z(0, t_i)}\;}$$
This is the swap rate, and it is identical to the par yield of a bond with the same schedule. The swap curve and the par-yield curve are the same object viewed from two angles.
Notional outstanding in vanilla IRS is in the hundreds of trillions of dollars — an order of magnitude larger than the cash bond market. Banks use them to manage the interest-rate risk on their loan books; corporates use them to switch between fixed and floating funding; pension funds use them to hedge their long-dated liabilities.
Pick a coupon rate, maturity, face value and yield. The widget computes the dirty price, modified duration and convexity, and shows three pictures: the price-yield curve with the current point marked, the Taylor approximations (duration only vs. duration + convexity) against the true curve, and the cashflow schedule.
The middle panel is the most useful: it shows how badly a pure-duration trader mis-prices large yield moves, and how much of the gap convexity closes. The cashflow chart on the right is the bond stripped back into its component zeros — literally the picture from slide 01.