Chapter 03
Spot, yield and forward
Discount factors are what the market prices, but nobody quotes them. Three different rates are read off the same curve, each answering a different question.
Spot rates
The spot rate \(s_t\) is the single annually-compounded rate that turns one unit today into the value of one unit at time \(t\). It is defined by inverting the compounding relation:
One discount factor in, one rate out. No other bond is involved.
The spot curve is the cleanest object of the three. Each point is a pure zero-coupon rate for a single date, uncontaminated by any coupon payments along the way. This is the curve you discount arbitrary future cash flows with.
Yield to maturity
The yield to maturity is the flat rate that, applied to every one of a bond’s cash flows, reproduces its market price. It is the internal rate of return of the bond:
Solved numerically for \(y\) — there is no closed form once a bond has more than a couple of coupons.
YTM is a summary, not a curve. It compresses a whole schedule of payments into one number by pretending every cash flow is discounted at the same rate, which is exactly what the spot curve says is not true. Two bonds maturing on the same day with different coupons will have different yields, even though they face an identical term structure.
Notice in the results that spot and YTM coincide at one year — both 5.07%. A one-year bond pays only once, so “discount every flow at the same rate” and “discount the single flow at its own spot rate” are the same statement. They separate from year five onward, once there are enough coupons for the shape of the curve to matter.
Forward rates
A forward rate \(f_{t,t+1}\) is the rate agreed today for borrowing over a future year. It follows from a no-arbitrage argument: investing for \(t+1\) years must return the same as investing for \(t\) years and rolling forward at the agreed rate.
Rearranged in terms of the discount factors, it becomes almost trivial — the forward rate is just the ratio of two neighbouring factors:
Ten discount factors give nine one-year forwards, each spanning the gap between consecutive maturities.
Why forwards move fastest
This is the relationship worth carrying away. Rearranging the no-arbitrage condition across all periods shows that compounding the spot rate to time \(t\) is the same as compounding every forward rate up to \(t\):
The spot rate is the geometric mean of every forward rate out to that date.
An average always lags the series it averages. When forwards are falling, each new one drags the running mean down only slightly, because it is diluted by all the higher forwards before it. So the spot curve declines gently while the forward curve — the marginal quantity being averaged — declines steeply.
That is precisely the pattern in this curve. The spot rate drifts from 5.07% to 3.87%, a fall of 1.2 points. Over the same span the forward rate collapses from 5.21% to 2.08%, a fall of more than three points. The forward curve is not a different market view; it is the same view, undiluted.
Reading the shape
Spot and yield peak near 5.14% at two years before turning down — a humped curve. Forwards are already falling by then. Because forwards lead and spots average, the forward curve turns first: it is the earlier signal of where the curve is heading.
All three are computed straight from the factors already recovered:
Srates = y.SpotRates() # d_t ** (-1/t) - 1
Ytm = y.BondsYtm() # IRR per bond, via numpy_financial
Frate = y.ForwardRates() # d_t / d_(t+1) - 1