Tutorials › Exam FM - Financial Mathematics › Bootstrapping from Par-Coupon Bond Quotes

Exam FM · Bootstrapping the Curve · Tutorial 737 of 998

Bootstrapping from Par-Coupon Bond Quotes

Translate par-coupon quotes into bond cash flows, then solve and check discount factors one maturity at a time.

Advanced 10 min read

What You'll Learn

  • Write the par-price equation for annual-pay and semiannual-pay coupon bonds.
  • Solve sequentially for a new discount factor using previously bootstrapped factors.
  • Distinguish a par coupon rate from the spot rate for a bond’s maturity.
  • Check a bootstrap result by substituting it back into the quoted bond’s price equation.
  • Identify arithmetic and rate-interpretation traps that can produce incorrect discount factors.

Why Par-Coupon Quotes Need Bootstrapping

A par-coupon bond is quoted with a coupon rate that makes its price equal to its face value under the market’s discount factors. The coupon rate is therefore a property of the bond’s cash flows and the full set of discount factors at its payment dates. It is generally not the spot rate for the bond’s final maturity. Bootstrapping uses a sequence of par quotes to solve for discount factors, starting with the shortest maturity and using each result to value earlier coupons on the next bond.

The key is to translate each quote into actual cash payments before solving. For a bond with face value \(100\), an annual coupon rate of \(c\%\) means a coupon of \(c\) dollars per year if payments are annual. With semiannual payments, a nominal annual coupon rate \(c\%\) means a coupon of \(c/2\) dollars every half-year. The timing and size of each payment determine the price equation.

Definition: A discount factor \(D(t)\) is the present value at the valuation date of one unit payable at time \(t\). Under a no-arbitrage discounting model, a bond’s price is the sum of its dated cash flows multiplied by the corresponding discount factors. A par-coupon quote specifies a coupon rate for which the bond’s price equals its face value, here \(100\).

Par-Bond Equations and the Sequential Solve

Assume a valuation date that is a coupon date, a face value of \(100\), annual coupon payments, and annual maturities. Assume each quote is a par price of \(100\), with no accrued interest to include. For an \(n\)-year bond with annual coupon amount \(c\), its cash flows are \(c\) at years \(1,\ldots,n-1\) and \(100+c\) at year \(n\). Its par-price equation is

$$ 100=cD(1)+cD(2)+\cdots+cD(n-1)+(100+c)D(n). $$

If the earlier discount factors are already known, isolate the last one:

$$ D(n)=\frac{100-c\displaystyle\sum_{j=1}^{n-1}D(j)}{100+c}. $$

The formula applies when the cash flows and dates match the stated annual-pay model and the bond is quoted at par. It does not mean that every par quote directly gives a discount factor. The earlier coupon payments must first be valued using factors already obtained from shorter-maturity instruments.

Why the sequential formula holds: The bond’s value is the sum of the present values of its contractual cash flows. The earlier coupons contribute \(c\sum_{j=1}^{n-1}D(j)\), while the final coupon and principal contribute \((100+c)D(n)\). Setting that total equal to the par price \(100\) and subtracting the earlier-coupon value gives \((100+c)D(n)=100-c\sum_{j=1}^{n-1}D(j)\). Dividing by \(100+c\) yields the bootstrap formula.
1
Read the quote and payment schedule.
Convert the coupon rate into a dollar coupon at each payment date. Record the principal repayment with the final coupon.
2
Write the par-price equation.
Use one discount factor for every dated cash flow and set the total price equal to \(100\).
3
Substitute known factors.
Use previously bootstrapped factors to value all payments before the final date.
4
Solve and reprice.
Isolate the new terminal factor, then substitute it back into the original price equation.

Worked Example: Bootstrapping Three Annual Par Quotes

Three annual-pay bonds each have face value \(100\), annual coupons, and maturities of one, two, and three years. Their respective annual coupon rates are \(4\%\), \(5\%\), and \(6\%\), and each is quoted at par. Find \(D(1)\), \(D(2)\), and \(D(3)\). Assume the valuation date is a coupon date and all cash flows occur at the stated integer-year times.

Method. Write one par equation per bond and proceed from the shortest maturity. This avoids treating a longer bond’s coupon rate as if it were a discount rate for each payment date.

One-year bond. It pays \(104\) at year 1: a \(4\)-dollar coupon plus \(100\) principal. Therefore,

$$ 100=104D(1),\qquad D(1)=\frac{100}{104}=0.9615384615. $$

Two-year bond. Its coupon is \(5\) dollars per year. The year-1 coupon is discounted using \(D(1)\), and the year-2 payment is \(105\):

$$ \begin{aligned} 100&=5D(1)+105D(2),\\ 5D(1)&=5(0.9615384615)=4.8076923075,\\ D(2)&=\frac{100-4.8076923075}{105} =\frac{95.1923076925}{105} =0.9065934066. \end{aligned} $$

Three-year bond. Its annual coupon is \(6\) dollars, and its final payment is \(106\). The two earlier coupons have present value

$$ 6D(1)+6D(2) =6(0.9615384615)+6(0.9065934066) =5.7692307690+5.4395604396 =11.2087912086. $$

The remaining value needed from the final payment is \(100-11.2087912086=88.7912087914\). Thus,

$$ D(3)=\frac{88.7912087914}{106}=0.8376529131. $$

Rounded to six decimal places, the factors are \(D(1)=0.961538\), \(D(2)=0.906593\), and \(D(3)=0.837653\). Check the last equation using unrounded values: \(11.2087912086+106(0.8376529131)\approx100.000000\), as required. The displayed rounding may cause a very small difference if rounded factors are used for the check.

Semiannual Coupons: Work in Payment Periods

For semiannual bonds, use the actual coupon dates and actual coupon amounts. If a bond has face value \(100\), a nominal annual coupon rate \(c\%\) convertible semiannually, and a half-yearly payment schedule, each coupon is \(c/2\) dollars. A maturity of one year has two coupon dates, at \(0.5\) and \(1\) years. Its par equation is \(100=(c/2)D(0.5)+(100+c/2)D(1)\). The coupon rate is not itself a discount factor or a spot rate.

Worked Example: Bootstrapping Semiannual Discount Factors

A hypothetical set of semiannual-pay bonds has face value \(100\). A six-month bond with a nominal annual coupon rate of \(4\%\) and a one-year bond with a nominal annual coupon rate of \(4.5\%\) are both quoted at par. A 1.5-year bond with a nominal annual coupon rate of \(5\%\) is also quoted at par. Find the discount factors at \(0.5\), \(1\), and \(1.5\) years. Assume coupon dates coincide with these times, with no accrued interest.

Method. Convert each nominal annual coupon rate to its semiannual coupon, then use the shortest bond first. Keep full precision in intermediate calculations and round the final factors to six decimal places.

Six-month bond. Its one coupon is \(4/2=2\) dollars, paid with principal at six months:

$$ 100=102D(0.5),\qquad D(0.5)=\frac{100}{102}=0.9803921569. $$

One-year bond. Its coupons are \(4.5/2=2.25\) dollars, with \(102.25\) paid at one year:

$$ \begin{aligned} 100&=2.25D(0.5)+102.25D(1),\\ 2.25D(0.5)&=2.25(0.9803921569)=2.2058823530,\\ D(1)&=\frac{100-2.2058823530}{102.25} =\frac{97.7941176470}{102.25} =0.9564216880. \end{aligned} $$

1.5-year bond. Its coupon is \(5/2=2.5\) dollars at each half-year date, and the final payment is \(102.5\). The earlier-coupon value is

$$ 2.5D(0.5)+2.5D(1) =2.5(0.9803921569)+2.5(0.9564216880) =2.4509803923+2.3910542200 =4.8420346123. $$

Therefore,

$$ D(1.5)=\frac{100-4.8420346123}{102.5} =\frac{95.1579653877}{102.5} =0.9283703940. $$

To six decimal places, \(D(0.5)=0.980392\), \(D(1)=0.956422\), and \(D(1.5)=0.928370\). Repricing the last bond with unrounded values gives \(4.8420346123+102.5(0.9283703940)\approx100.000000\). Using \(2.25\) rather than \(4.5\) as the semiannual coupon is essential; treating the annual rate as the payment amount would misstate every cash flow.

A Par Coupon Rate Is Not a Spot Rate

A spot rate applies to a single payment at one maturity. A par coupon rate, by contrast, is the coupon rate that makes the present value of several payments equal to par. Its par equation includes discount factors for every coupon date, not just the final date. Consequently, equating a quoted par coupon rate to a spot rate generally gives a wrong discount factor.

The distinction is visible when earlier discount factors are given. The coupon rate determines the cash-flow amounts; the known factors value the earlier coupons; the par equation then determines the remaining factor. The following example also illustrates why checking the arithmetic in the numerator matters.

Worked Example: Checking a Three-Year Par Equation

A three-year annual-pay bond with face value \(100\) has a \(6\%\) annual coupon rate and is quoted at par. Suppose the earlier discount factors are \(D(1)=0.95\) and \(D(2)=0.90\). Find \(D(3)\). Assume all coupons are paid annually on the valuation-date anniversaries.

Method. The coupon is \(6\) dollars, and the final payment is \(106\). Substitute the given factors into the cash-flow equation:

$$ \begin{aligned} 100&=6(0.95)+6(0.90)+106D(3),\\ 6(0.95)&=5.70,\\ 6(0.90)&=5.40,\\ 6(0.95)+6(0.90)&=5.70+5.40=11.10,\\ D(3)&=\frac{100-11.10}{106} =\frac{88.90}{106} =0.8386792453. \end{aligned} $$

Thus \(D(3)=0.838679\) to six decimal places. The check is \(5.70+5.40+106(0.8386792453)=5.70+5.40+88.90=100.00\). In particular, the numerator is \(88.90\), not \(90.75\): \(100-5.70-5.40=88.90\). The value \(90.75/106=0.8561320755\) would require earlier coupons with a total present value of \(9.25\), which is not the total for the stated inputs.

Common Mistakes and Practical Checks

Par-coupon bootstrapping is a cash-flow calculation, so small interpretation errors can change the result. Before accepting a new factor, confirm both the equation and the arithmetic.

  • Calling the par coupon the spot rate. A coupon rate sets the bond’s payments. The discount factor at maturity is found only after discounting the earlier coupons with their own factors.
  • Putting principal in the wrong payment. The final cash flow is \(100+c\) for an annual bond with coupon \(c\), not \(100\) alone. For semiannual bonds, add the principal to the final semiannual coupon.
  • Using an annual coupon as a semiannual payment. A nominal annual coupon rate of \(4.5\%\) on face \(100\), paid twice a year, gives a coupon of \(2.25\) each half-year, not \(4.50\).
  • Mixing time units. A six-month factor is \(D(0.5)\), not \(D(1)\). Each payment must be paired with the factor for its actual payment date.
  • Rounding too early. Keep more digits in intermediate factors, especially when later equations subtract coupon present values from \(100\). Round the reported factors only at the end.
  • Skipping the repricing check. Substitute the factor into the original equation. The resulting value should equal the quoted par price, subject only to rounding.
Key takeaway: A par quote supplies an equation, not a spot rate. Translate the coupon schedule into dated cash flows, value earlier coupons using known discount factors, solve for the new terminal factor, and verify that the bond reprices to \(100\).

Check Your Understanding

For each problem, assume the stated valuation date is a coupon date, face value is \(100\), bonds are quoted at par, and there is no accrued interest. Round discount factors to six decimal places.

  1. A one-year annual-pay bond has a \(3\%\) coupon rate. Find \(D(1)\). (Answer: \(0.970874\))
  2. A two-year annual-pay bond has a \(4\%\) coupon rate. If \(D(1)=0.96\), find \(D(2)\). (Answer: \(0.924615\))
  3. A three-year annual-pay bond has a \(5\%\) coupon rate. If \(D(1)=0.97\) and \(D(2)=0.93\), find \(D(3)\). (Answer: \(0.861905\))
  4. A six-month bond has a nominal annual coupon rate of \(3\%\), paid semiannually. Find \(D(0.5)\). (Answer: \(0.985222\))
  5. A one-year bond has a nominal annual coupon rate of \(4\%\), paid semiannually. If \(D(0.5)=0.9852216749\), find \(D(1)\). (Answer: \(0.961074\))
  6. A two-year annual-pay par bond has a \(5\%\) coupon rate. Given \(D(1)=0.95\), write the equation and solve for \(D(2)\). (Answer: \(100=5(0.95)+105D(2)\), so \(D(2)=0.907143\))
Clinical Biostats