Unit 3, lesson 18

Bootstrapping discount curves

How bootstrapping solves a triangular system of bond prices for discount factors at the curve nodes, why curve interpolation is a separate modeling choice, and how implied forward rates and repricing test curve consistency.

  • Video 18
  • Bonds, discount curves and rate sensitivities

A desk has prices for a one-year zero-coupon bond and for two-year and three-year coupon bonds, and it needs the value today of a payment due in 18 months, a date on which none of these bonds pays. The prices determine the discount factors at their own payment dates, one date at a time, and nothing more. This lesson solves for those factors in maturity order, checks that they reprice every quote, reads forward rates off them, and shows that the value of the 18-month payment depends on an interpolation rule that the quotes do not supply.

Key terms

Discount curve and curve nodes

Definition Fix a valuation date 00, a currency and a funding or collateral convention. A discount curve is a function T↦P(0,T)T \mapsto P(0, T) on an interval [0,Tmax⁡][0, T_{\max}] that gives today’s price of 1 currency unit paid with certainty at TT, the price of a default-free zero-coupon bond maturing at TT, with P(0,0)=1P(0, 0) = 1. It is known today, so it is a deterministic function of the maturity, while bond prices P(t,T)P(t, T) at later dates t>0t > 0 can be random once interest-rate dynamics are introduced. In the frictionless, default-free model of this lesson, absence of arbitrage requires P(0,T)>0P(0, T) > 0, because a claim that pays 1 at TT and costs nothing or less than nothing would be an arbitrage. For T>0T > 0 the continuously compounded zero rate is

z(T)=−ln⁡P(0,T)T.z(T) = -\frac{\ln P(0, T)}{T}.

A curve node is a maturity TjT_j at which the value Pj=P(0,Tj)P_j = P(0, T_j) is determined by the calibration instruments. Values between nodes, and beyond the last node, come from an interpolation or extrapolation rule chosen by the modeler.

In plain words A discount curve is a price list for money delivered on future dates. The nodes are the dates the market instruments pin down, and the rest of the curve is filled in by a rule.

Example The constructed bootstrap below produces nodes at 11, 22 and 33 years with

P1=0.95,P2≈0.896154,P3≈0.852071.\begin{aligned} P_1 &= 0.95, \\[0.4em] P_2 &\approx 0.896154, \\[0.4em] P_3 &\approx 0.852071 . \end{aligned}

The zero rates are z(1)≈5.1293z(1) \approx 5.1293 percent, z(2)≈5.4822z(2) \approx 5.4822 percent and z(3)≈5.3362z(3) \approx 5.3362 percent. The factors decrease with maturity while the zero rates rise and then fall, so the two descriptions of the same curve can have different shapes. A payment at 1.51.5 years falls on no node.

Triangular system

Definition Let instruments i=1,…,ni = 1, \dots, n have prices ViV_i at the valuation date and deterministic payments CijC_{ij} at node dates T1<⋯<TnT_1 < \dots < T_n, and suppose instrument ii pays nothing after TiT_i. Its pricing equation is

Vi=∑j=1iCij PjV_i = \sum_{j=1}^{i} C_{ij} \, P_j

for i=1,…,ni = 1, \dots, n, a linear system whose matrix (Cij)(C_{ij}) is lower triangular. If every diagonal entry CiiC_{ii} is nonzero, the system has exactly one solution, found by forward substitution,

Pi=Vi−∑j<iCijPjCii.P_i = \frac{V_i - \sum_{j < i} C_{ij} P_j}{C_{ii}} .

The determinant of a triangular matrix is the product of its diagonal entries, so a zero CiiC_{ii} leaves the system with no solution or with infinitely many. An instrument whose price introduces two new payment dates leaves two unknowns in one equation, and they are identified only by another price or by an interpolation rule. With more instruments than nodes, two different prices for the same cash flows leave the equations without any solution, and no single curve reprices them all. The unique solution need not be positive, so positivity has to be checked separately.

In plain words Sort the instruments by their last payment date. Then each new instrument brings in exactly one new date, and everything else in its equation is already known.

Example A one-year zero-coupon bond pays 100100 and costs 9595. A two-year bond pays 44 and 104104 and costs 9797. A three-year bond pays 44, 44 and 104104 and costs 9696. These constructed prices give

95=100 P197=4P1+104P296=4P1+4P2+104P3,\begin{aligned} 95 &= 100 \, P_1 \\[0.4em] 97 &= 4 P_1 + 104 P_2 \\[0.4em] 96 &= 4 P_1 + 4 P_2 + 104 P_3 , \end{aligned}

with diagonal entries 100100, 104104 and 104104, so the three factors are unique. By contrast, a bond that pays 44 at 1.51.5 years and 104104 at 22 years for a price of 9797 has the two unknowns P(0,1.5)P(0, 1.5) and P(0,2)P(0, 2), and the pairs 0.920.92 and 0.8973080.897308 or 0.930.93 and 0.8969230.896923 both reprice it, as do infinitely many others.

Bootstrapping

Definition Bootstrapping is the algorithm that solves the triangular system node by node in maturity order. It sets P1=V1/C11P_1 = V_1 / C_{11}, and for i=2,…,ni = 2, \dots, n it values the payments of instrument ii at the nodes already found, subtracts that value from ViV_i, and divides the remainder by the final payment CiiC_{ii}. Its hypotheses are deterministic default-free payments, one valuation date, and inputs on common conventions for currency, settlement, day count and collateral, with quotes taken consistently from the bid, the ask or the mid. Under them the result is exact and reprices every input. When an instrument pays between nodes, those payment dates are tied to the nodes by an interpolation rule, and each step becomes one equation in the newest node, in general a nonlinear one. Calibrating several curves at once, or fitting more instruments than nodes by optimization, are different methods.

In plain words Bootstrapping is forward substitution with financial bookkeeping. The short instruments fix the near dates, and each longer instrument is stripped of the payments whose values are already known, so that what remains prices its final payment.

Example The one-year zero gives P1=95/100=0.95P_1 = 95/100 = 0.95. The first coupon of the two-year bond is worth 4⋅0.95=3.84 \cdot 0.95 = 3.8, which leaves 97−3.8=93.297 - 3.8 = 93.2 for its final payment, so

P2=93.2104=233260≈0.896154.\begin{aligned} P_2 &= \frac{93.2}{104} = \frac{233}{260} \\[0.4em] &\approx 0.896154 . \end{aligned}

The two coupons of the three-year bond are worth 3.83.8 and about 3.5846153.584615, which leaves about 88.61538588.615385 for its final payment, so

P3≈88.615385104≈0.852071.\begin{aligned} P_3 &\approx \frac{88.615385}{104} \\[0.4em] &\approx 0.852071 . \end{aligned}

With exact fractions the remainder is 1152/131152/13 and P3=144/169P_3 = 144/169.

Curve interpolation

Definition An interpolation rule assigns values P(0,t)P(0, t) at dates between nodes. Log-linear interpolation on [Tj,Tj+1][T_j, T_{j+1}] sets

ln⁡P(0,t)=(1−w)ln⁡Pj+wln⁡Pj+1,\begin{aligned} \ln P(0, t) &= (1 - w) \ln P_j \\[0.4em] &\quad + w \ln P_{j+1}, \end{aligned}

with weight w=(t−Tj)/(Tj+1−Tj)w = (t - T_j)/(T_{j+1} - T_j), so P(0,t)=Pj 1−wPj+1 wP(0, t) = P_j^{\,1-w} P_{j+1}^{\,w}. Positive nodes give positive values, and the instantaneous forward rate f(0,t)=−∂tln⁡P(0,t)f(0, t) = -\partial_t \ln P(0, t) is constant on each open interval between nodes,

f(0,t)=ln⁡Pj−ln⁡Pj+1Tj+1−Tj,f(0, t) = \frac{\ln P_j - \ln P_{j+1}}{T_{j+1} - T_j},

with a jump at a node wherever the neighboring constants differ. Other common rules interpolate the factors P(0,t)P(0, t) linearly or the zero rates zz linearly. All of them agree at the nodes and in general differ between them, so off-node prices, forward rates and sensitivities depend on the rule. The rule is a modeling assumption, not information contained in the quotes.

In plain words The instruments fix the curve only at the nodes. Interpolation is a choice of how to draw the curve between them, and a different choice prices an off-node payment differently even though every input instrument still reprices.

Example At t=1.5t = 1.5, halfway between the first two nodes, w=1/2w = 1/2, and log-linear interpolation gives

P(0,1.5)=P1P2≈0.922684.\begin{aligned} P(0, 1.5) &= \sqrt{P_1 P_2} \\[0.4em] &\approx 0.922684 . \end{aligned}

Linear interpolation of the factors gives 0.9230770.923077 instead. Linear interpolation of the zero rates, between z(1)≈0.051293z(1) \approx 0.051293 and z(2)≈0.054822z(2) \approx 0.054822, gives z(1.5)≈0.053057z(1.5) \approx 0.053057 and P(0,1.5)≈0.923498P(0, 1.5) \approx 0.923498. A payment of 100100 at 1.51.5 years is therefore worth 92.268492.2684, 92.307792.3077 or 92.349892.3498, depending only on the rule.

Implied forward rate

Definition For dates T1<T2T_1 < T_2 on the curve, let δ>0\delta > 0 be the accrual fraction from T1T_1 to T2T_2 under the stated day count. The implied simple forward rate F(0;T1,T2)F(0; T_1, T_2) is defined by

1+δ F(0;T1,T2)=P(0,T1)P(0,T2).\begin{aligned} &1 + \delta \, F(0; T_1, T_2) \\[0.4em] &\quad = \frac{P(0, T_1)}{P(0, T_2)} . \end{aligned}

It is the rate KK that gives zero time-0 value to an agreement, made today, to deposit 1 at T1T_1 and receive 1+δK1 + \delta K at T2T_2, since that agreement is worth −P(0,T1)+(1+δK)P(0,T2)-P(0, T_1) + (1 + \delta K) P(0, T_2). For a positive curve that is differentiable in TT, the instantaneous forward rate and its inverse relation are

f(0,T)=−∂Tln⁡P(0,T),P(0,T)=e−∫0Tf(0,u) du.\begin{aligned} f(0, T) &= -\partial_T \ln P(0, T), \\[0.4em] P(0, T) &= e^{-\int_0^T f(0, u)\, du} . \end{aligned}

These are identities of the curve at time 00. They are not forecasts of the spot rates that will prevail later.

In plain words The ratio of two discount factors is the growth factor that today’s curve fixes for money moved from the earlier date to the later one. The forward rate restates that growth factor as a rate in a stated convention.

Example From the bootstrapped nodes, with δ=1\delta = 1,

F(0;1,2)=P1P2−1=14233≈0.060086,\begin{aligned} F(0; 1, 2) &= \frac{P_1}{P_2} - 1 = \frac{14}{233} \\[0.4em] &\approx 0.060086 , \end{aligned}

and F(0;2,3)=P2/P3−1=149/2880≈0.051736F(0; 2, 3) = P_2/P_3 - 1 = 149/2880 \approx 0.051736. Under log-linear interpolation the instantaneous forward rate is about 0.0512930.051293 on the interval from 00 to 11, about 0.0583500.058350 from 11 to 22 and about 0.0504420.050442 from 22 to 33, so it jumps at both interior nodes.

Curve consistency

Definition A curve is consistent when it reprices every calibration instrument exactly, all its nodes are positive, and every quantity computed from it, whether an off-node price, a forward rate or a sensitivity, uses the same nodes, the same interpolation rule and the same conventions for currency, settlement, day count and collateral. Repricing confirms the nodes at the payment dates. It cannot show that an off-node value is the right one, and it says nothing about future realized rates. A factor that increases from one node to the next means a negative forward rate, which the frictionless model allows. Factors that never increase follow only from an extra assumption, such as the possibility of holding cash from one date to the next at no cost. A bootstrap step whose remainder is zero or negative would give a factor that is not positive, so the quotes then admit an arbitrage in the frictionless model or the instruments are misspecified.

In plain words One curve, one interpolation rule and one set of conventions serve every calculation. Repricing the inputs is the first test, and passing it says nothing about the dates between the nodes.

Example Putting the nodes back into the three pricing equations gives 100⋅0.95=95100 \cdot 0.95 = 95, then 4⋅0.95+104⋅0.896154≈974 \cdot 0.95 + 104 \cdot 0.896154 \approx 97 and 4⋅(0.95+0.896154)+104⋅0.852071≈964 \cdot (0.95 + 0.896154) + 104 \cdot 0.852071 \approx 96, the quoted prices, and with the exact fractions the equalities are exact. Now change only the two-year price from 9797 to 105105. The bootstrap gives

P2=105−3.8104=253260≈0.973077,\begin{aligned} P_2 &= \frac{105 - 3.8}{104} = \frac{253}{260} \\[0.4em] &\approx 0.973077 , \end{aligned}

which exceeds P1=0.95P_1 = 0.95, and F(0;1,2)=0.95/0.973077−1≈−0.023715F(0; 1, 2) = 0.95/0.973077 - 1 \approx -0.023715, a negative forward rate of about −2.37-2.37 percent. The curve is still positive and reprices its inputs, so the change alone does not create an arbitrage.

Check yourself

  1. A one-year zero-coupon bond paying 100100 costs 9696, and a two-year bond paying 55 after one year and 105105 after two years costs 99.399.3. Bootstrap the two discount factors, then find the simple forward rate from year 1 to year 2 and the continuously compounded two-year zero rate.
Show the answer

The zero gives P1=96/100=0.96P_1 = 96/100 = 0.96. The first coupon of the bond is worth 5⋅0.96=4.85 \cdot 0.96 = 4.8, so

P2=99.3−4.8105=94.5105=0.9.\begin{aligned} P_2 &= \frac{99.3 - 4.8}{105} \\[0.4em] &= \frac{94.5}{105} = 0.9 . \end{aligned}

The forward rate with δ=1\delta = 1 is 0.96/0.9−1=1/15≈0.0666670.96/0.9 - 1 = 1/15 \approx 0.066667, and the two-year zero rate is −ln⁡(0.9)/2≈0.052680-\ln(0.9)/2 \approx 0.052680. Both nodes reprice their instruments, 100⋅0.96=96100 \cdot 0.96 = 96 and 4.8+105⋅0.9=99.34.8 + 105 \cdot 0.9 = 99.3.

  1. Keep the one-year zero at 9595 per 100100, so P1=0.95P_1 = 0.95, and the two-year bond paying 44 and 104104, but leave its price V2V_2 open. For which prices does the bootstrap give a positive P2P_2, and for which does it give P2>P1P_2 > P_1? A colleague says any price above the second threshold is an arbitrage. Is that right?
Show the answer

The bootstrap gives P2=(V2−3.8)/104P_2 = (V_2 - 3.8)/104, which is positive exactly when V2>3.8V_2 > 3.8. If V2≤3.8V_2 \le 3.8, buying the two-year bond and selling 0.040.04 units of the one-year zero costs V2−3.8≤0V_2 - 3.8 \le 0 today, the short zero absorbs the coupon of 44 at year 1, and the bond still pays 104104 at year 2, an arbitrage. Next, P2>P1P_2 > P_1 exactly when V2−3.8>98.8V_2 - 3.8 > 98.8, that is when

V2>108⋅0.95=102.6.V_2 > 108 \cdot 0.95 = 102.6 .

Such a price gives a negative forward rate from year 1 to year 2, and in the frictionless model that is not an arbitrage. It becomes one only under an extra assumption. If cash could be held from year 1 to year 2 at no cost, one could sell the two-year bond, buy 1.081.08 units of the one-year zero, collect the positive amount V2−102.6V_2 - 102.6 today, use 44 of the 108108 received at year 1 to pay the coupon, and hold the other 104104 to pay the final amount at year 2. The colleague is right only in a model that includes free storage of cash.

  1. Keep P1=0.95P_1 = 0.95. A new bond pays 44 at 1.51.5 years and 104104 at 22 years and costs 9797. Can the bootstrap determine P(0,1.5)P(0, 1.5) and P(0,2)P(0, 2)? If log-linear interpolation between the nodes at 11 and 22 years is added, what are they, and what would linear interpolation of the factors give?
Show the answer

Not from the price alone. The equation 4P(0,1.5)+104P(0,2)=974 P(0, 1.5) + 104 P(0, 2) = 97 has two unknowns, and for example 0.920.92 with 0.8973080.897308 and 0.930.93 with 0.8969230.896923 both satisfy it. Log-linear interpolation sets P(0,1.5)=0.95 P2P(0, 1.5) = \sqrt{0.95 \, P_2} with P2=P(0,2)P_2 = P(0, 2). Writing u=P2u = \sqrt{P_2} turns the equation into

104u2+40.95 u−97=0,104 u^2 + 4\sqrt{0.95}\, u - 97 = 0 ,

whose roots have a negative product, so exactly one is positive, u≈0.947198u \approx 0.947198. Hence P2≈0.897184P_2 \approx 0.897184 and P(0,1.5)≈0.923214P(0, 1.5) \approx 0.923214, and indeed 4⋅0.923214+104⋅0.897184≈974 \cdot 0.923214 + 104 \cdot 0.897184 \approx 97. Linear interpolation of the factors sets P(0,1.5)=(0.95+P2)/2P(0, 1.5) = (0.95 + P_2)/2, so 2(0.95+P2)+104P2=972(0.95 + P_2) + 104 P_2 = 97, which gives P2=95.1/106≈0.897170P_2 = 95.1/106 \approx 0.897170 and P(0,1.5)≈0.923585P(0, 1.5) \approx 0.923585. The node at two years and the value at 1.51.5 years both depend on the rule, which the price cannot choose.

How this lesson connects