Tutorials › Exam FM - Financial Mathematics › Common Errors in Coupon-Bond Bootstrapping

Exam FM · Bootstrapping the Curve · Tutorial 753 of 998

Common Errors in Coupon-Bond Bootstrapping

Use dated cash flows and the correct bond price to bootstrap discount factors in sequence, then test whether the result reprices the quoted bonds.

Advanced 14 min read

What You'll Learn

  • Distinguish a bond’s yield to maturity from the discount factors used in a term-structure bootstrap.
  • Match each coupon and redemption cash flow to its actual payment date.
  • Convert a clean bond price to a dirty price using accrued interest.
  • Use the contractual redemption amount when forming the final cash flow.
  • Solve discount factors in maturity order and verify the result by repricing.

Why Bootstrap Errors Matter

Coupon-bond bootstrapping turns observed bond prices into discount factors for specific future dates. The arithmetic is usually short; the difficulty is ensuring that the price, cash-flow dates, coupon amounts, and redemption amount all describe the same bond at the same valuation date. A small input error can produce a plausible-looking factor that does not belong to the market curve.

The calculations below assume certain cash flows, a common valuation date, and prices expressed in the same currency and per the same face amount. Taxes, default risk, and transaction costs are ignored. The curve is represented by \(D(t)\), the discount factor at time \(t\): one dollar payable at time \(t\) has present value \(D(t)\) dollars. By convention, \(D(0)=1\). A coupon bond’s price is the sum of each dated cash flow multiplied by its discount factor.

Definition: For a bond with cash flows \(C_j\) payable at times \(t_j\), its dirty price \(P_{\text{dirty}}\) is $$ P_{\text{dirty}}=\sum_j C_jD(t_j). $$ A clean price excludes accrued interest. When a clean price is quoted, add accrued interest to obtain the dirty price used in this present-value equation.

Yield Is Not a Set of Spot Rates

A bond’s yield to maturity is the single rate that reproduces its price when every cash flow is discounted at that rate under the bond’s stated compounding convention. It is a summary rate for that bond’s cash-flow pattern. A bootstrap instead finds discount factors for individual payment dates. Different dates can have different factors, so a bond’s yield generally cannot be used as the spot rate for each of its cash flows.

The basic sequential step follows directly from the pricing equation. Suppose all earlier cash flows have known discount factors and only the final payment date has an unknown factor. Subtract the present values of the known cash flows from the price, then divide by the final cash flow. This works only when the price and every cash flow have been correctly identified.

$$ P_{\text{dirty}} =\sum_{j=1}^{k-1}C_jD(t_j)+C_kD(t_k) \quad\Longrightarrow\quad D(t_k)= \frac{P_{\text{dirty}}-\sum_{j=1}^{k-1}C_jD(t_j)}{C_k}. $$

The justification is simply rearrangement of the bond’s present-value equation. Each earlier payment contributes its own present value, \(C_jD(t_j)\). Removing those known contributions leaves \(C_kD(t_k)\), the present value of the final payment. Dividing by \(C_k\) isolates the unknown factor. The denominator is the entire final cash flow, including both the last coupon and redemption.

Worked Example: A Bond Yield Does Not Replace Bootstrapped Factors

A one-year instrument establishes \(D(1)=0.96\). A two-year bond has annual coupons of $5 per $100 face value, redemption of $100, and a dirty price of $100. Find \(D(2)\). Then compare it with the factors obtained by incorrectly treating this bond’s yield to maturity as a spot rate at both dates.

Method. Use the known one-year factor in the bond’s cash-flow equation. Its cash flows are $5 at time 1 and $105 at time 2, where the latter includes the final coupon and redemption.

$$ 100=5(0.96)+105D(2) $$

The present value of the first coupon is \(5(0.96)=4.80\). Therefore,

$$ D(2)=\frac{100-4.80}{105} =\frac{95.20}{105} =0.9066667\ldots $$

The bond’s yield to maturity is 5%: discounting its cash flows at 5% gives

$$ \frac{5}{1.05}+\frac{105}{1.05^2} =4.7619048+95.2380952 =100.00. $$

If 5% is incorrectly used as a spot rate at both dates, the supposed factors are \(1/1.05=0.9523810\) and \(1/1.05^2=0.9070295\). They contradict the independently established \(D(1)=0.96\). The correct bootstrap factor also reprices the bond: \(5(0.96)+105(0.9066667)\approx4.80+95.20=100.00\).

Common mistake avoided: applying one bond’s yield to every cash-flow date. A yield is not a replacement for the curve’s date-specific factors.

Match Coupon Amounts to Their Actual Dates

The coupon frequency determines both the amount of each coupon and the dates on which it is paid. For example, a 5% annual coupon rate on $100 face value with semiannual payments means two payments of $2.50 per year—not payments of $5 every six months. The final payment combines the final coupon with the contractual redemption amount.

Time labels must also match the valuation date. A factor at time 1 discounts a payment one year after the valuation date; it does not automatically discount the second coupon of every bond. If payments occur at half-year intervals, use the factors at those half-year dates. Do not shift the payments to annual dates merely because the curve is tabulated annually.

Worked Example: Semiannual Coupons at the Correct Dates

A bond has $100 face value, a 5% annual coupon rate paid semiannually, redemption of $100, and a dirty price of $101.25. Measured from the valuation date, its three payment dates are 0.5, 1.0, and 1.5 years. The known factors are \(D(0.5)=0.99\) and \(D(1)=0.97\). Find \(D(1.5)\).

Method. Each semiannual coupon is \(100(0.05)/2=$2.50\). The final payment is $102.50: the $2.50 final coupon plus $100 redemption. Match each payment to its stated date.

$$ 101.25=2.50(0.99)+2.50(0.97)+102.50D(1.5) $$

The first coupon’s present value is \(2.50(0.99)=2.475\). The second coupon’s present value is \(2.50(0.97)=2.425\). Together they contribute \(2.475+2.425=4.900\). Thus,

$$ D(1.5)=\frac{101.25-4.900}{102.50} =\frac{96.350}{102.50} =0.9400000. $$

As a check, \(4.900+102.50(0.94)=4.900+96.350=101.250\), the quoted dirty price. If one mistakenly used a $5 coupon every half-year, the cash flows and final payment would be different; that would be a different bond. Likewise, replacing the stated dates with 1, 2, and 3 years would use factors for the wrong payments and would not determine the required \(D(1.5)\).

Common mistake avoided: confusing the annual coupon rate with the amount paid each coupon date, or assigning factors to approximate rather than actual payment dates.

Use the Dirty Price and the Contractual Redemption

A clean quote is not, by itself, the price to put into the present-value equation when the bond is between coupon dates. Under the usual accrued-interest convention, accrued interest is the coupon earned since the last payment date, calculated according to the specified day-count rule. Add it to the clean price to obtain the dirty price. The precise accrued-interest calculation depends on the bond’s day-count convention; do not assume a fraction of a coupon period unless the problem supports that convention.

Similarly, redemption is the amount the contract promises to pay at maturity. It need not equal face value. If the final coupon is \(c\) and redemption is \(R\), the final cash flow is \(c+R\), not \(c+\text{face value}\) unless those amounts are equal.

Worked Example: Accrued Interest and a Non-Par Redemption

A hypothetical bond has $100 face value, an 8% annual coupon rate paid semiannually, and contractual redemption of $103. Each coupon is $4. Settlement is halfway through a coupon period, and accrued interest is therefore half of the $4 coupon, or $2. The quoted clean price is $102.10. Relative to settlement, payments occur in 0.25, 0.75, and 1.25 years. The first two factors are \(D(0.25)=0.99\) and \(D(0.75)=0.96\). Find \(D(1.25)\).

Method. Convert the clean price to a dirty price and use the actual final payment, which is the $4 coupon plus $103 redemption.

$$ P_{\text{dirty}}=102.10+2.00=104.10 $$

The first two coupons have present values \(4(0.99)=3.96\) and \(4(0.96)=3.84\), totaling \(7.80\). The maturity cash flow is \(4+103=107\). Therefore,

$$ D(1.25)=\frac{104.10-3.96-3.84}{107} =\frac{96.30}{107} =0.9000000. $$

Repricing gives \(3.96+3.84+107(0.90)=3.96+3.84+96.30=104.10\), exactly the dirty price. Omitting accrued interest would instead use $102.10 in the numerator, giving \(94.30/107\approx0.8813084\), which does not reprice the bond at its correct dirty price.

Common mistake avoided: bootstrapping from the clean quote without adding accrued interest, or treating the $103 contractual redemption as $100.

Worked Example: The Final Cash Flow Uses the Stated Redemption

A bond has annual coupons of $3, contractual redemption of $104, and a dirty price of $100. Its one-year factor is \(D(1)=0.96\). Find \(D(2)\), then calculate the erroneous result from assuming redemption is $100 instead.

Method. At time 1 the bond pays $3. At time 2 it pays the final $3 coupon plus $104 redemption, or $107. The correct equation is

$$ 100=3(0.96)+107D(2). $$

The first coupon contributes \(3(0.96)=2.88\). The amount left for the maturity payment is \(100-2.88=97.12\), so

$$ D(2)=\frac{97.12}{107} =0.9076635514\ldots $$

If redemption is wrongly treated as $100, the assumed final payment is $103. That gives the incorrect calculation

$$ D(2)_{\text{wrong}}=\frac{97.12}{103} =0.9429126214\ldots $$

The correct result checks: \(2.88+107(0.9076635514\ldots)=100.00\). By contrast, \(2.88+103(0.9429126214\ldots)=100.00\) only under the false assumption that the maturity payment is $103. It does not price the contractual $107 cash flow.

Common mistake avoided: using face value as redemption by habit. Read the maturity payment in the bond terms and include the final coupon.

Solve in Maturity Order and Reprice

Sequential bootstrapping depends on having the factors for earlier payment dates. A bond maturing at time 3 may contain cash flows at times 1, 2, and 3. Its price equation can isolate \(D(3)\) only after \(D(1)\) and \(D(2)\) are known. Attempting to solve that bond first leaves multiple unknown factors in one equation; one equation cannot uniquely determine them all without additional information.

1
List actual cash flows and dates.
Record each coupon date, coupon amount, and final redemption. Measure times from the valuation date.
2
Check the quoted price.
Confirm whether it is clean or dirty. If it is clean, calculate accrued interest under the stated convention and add it.
3
Use known earlier factors.
Subtract the present values of all already-bootstrapped cash flows from the dirty price.
4
Isolate the new factor.
Divide the remaining value by the cash flow at the new maturity, including both coupon and redemption when applicable.
5
Reprice the input bond.
Substitute the solved factors into the full price equation. The result should agree with the input dirty price, subject only to stated rounding.

Repricing is a direct diagnostic, not an optional presentation step. If a bond fails its check, inspect the price type, date alignment, coupon frequency, redemption, and arithmetic. Solving maturities out of order can also make a spreadsheet appear to produce an answer when it has silently used an unavailable factor or an arbitrary assumption.

Key takeaway: A valid coupon-bond bootstrap is a dated cash-flow calculation. Use the dirty price, the actual payment dates, and the contractual cash flows; solve each new maturity only after its earlier factors are available, and verify by repricing.

Check Your Understanding

For each problem, identify the cash flows and dates before solving. Answers are shown for checking.

  1. A one-year zero-coupon bond with redemption of $100 has a price of $96. A two-year annual-coupon bond has a $4 coupon, $100 redemption, and dirty price of $99. Using the one-year factor from the zero-coupon bond, find \(D(2)\). (Answer: \(D(1)=0.96\), \(D(2)=(99-3.84)/104=0.915\).)
  2. A semiannual bond has a clean price of $100.80 and accrued interest of $1.90. Its first coupon, $3, is due in 0.5 years; the final coupon plus redemption is $103 and is due in 1 year. If \(D(0.5)=0.98\), find \(D(1)\). (Answer: Dirty price \(=102.70\); \(D(1)=(102.70-3(0.98))/103=99.76/103\approx0.9685\).)
  3. A two-year bond has an annual coupon of $2, redemption of $105, dirty price of $101, and \(D(1)=0.97\). Find \(D(2)\). (Answer: \(D(2)=(101-1.94)/107=99.06/107\approx0.9258\).)
  4. A three-year annual-coupon bond pays $5 each year and redeems at $100. Its dirty price is $104.15, with \(D(1)=0.98\) and \(D(2)=0.95\). Find \(D(3)\), and state why this solve needs the earlier factors. (Answer: \(D(3)=(104.15-4.90-4.75)/105=94.50/105=0.90\); the earlier coupons must be valued and subtracted first.)
  5. A two-year bond pays annual coupons of $5, redeems at $100, and has a dirty price of $100. If \(D(1)=0.96\), find \(D(2)\). Its yield to maturity is 5%. Explain why using that yield as the one-year spot rate would be inconsistent. (Answer: \(D(2)=(100-4.80)/105\approx0.9067\); a 5% one-year spot rate implies \(D(1)=1/1.05\approx0.9524\), not the given 0.96.)
Clinical Biostats