Time Value of Money and Interest Rates › Worked Example: Bond Valuation

Michael BrenndoerferUpdated February 6, 20266 min read
Quantitative FinanceAll chapters
Part 1 of 15Mathematical Foundations
Chapter 1Time Value of Money and Interest Rates › Worked Example: Bond Valuation
Reading section 6 of 9 · Worked Example: Bond Valuation · 6 minSection 6 of 9 · 6 min

Book contents

Section 6 of 9 · 6 min read

Time Value of Money and Interest Rates › Worked Example: Bond ValuationOne section · Sections in this chapter6 / 9 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

Let us apply our time value framework to a plain fixed-coupon bond with a stated maturity and principal repaid at maturity. Its cash flows consist of periodic coupons and that final principal repayment. Valuing this bond is a direct application of present value concepts; other bond structures can have different cash flows.

Consider a 5-year bond with:

  • Face value: $1,000
  • Coupon rate: 4% (annual payments)
  • Market yield: 5%

The bond's price equals the present value of all future cash flows:

P=∑t=1540(1.05)t+1000(1.05)5P = \sum_{t=1}^{5} \frac{40}{(1.05)^t} + \frac{1000}{(1.05)^5}

where:

  • PP: bond price (present value of all cash flows)
  • 4040: annual coupon payment ($1,000 × 4%)
  • 1.051.05: one plus the yield (1 + 0.05)
  • 10001000: face value returned at maturity
  • The first term ∑t=1540(1.05)t\sum_{t=1}^{5} \frac{40}{(1.05)^t}: present value of the coupon stream (an annuity)
  • The second term 1000(1.05)5\frac{1000}{(1.05)^5}: present value of the principal repayment

The structure of this formula reflects the two components of a bond's value. The coupon stream is an annuity: five equal payments of $40, one at the end of each year. We can either discount each payment separately or use the annuity formula. The principal repayment is a single lump sum occurring at maturity, which we discount using the basic present value formula. The bond price is simply the sum of these two present values.

In[31]:
Code
def annuity_pv(payment, r, periods):
    """Present value of ordinary annuity."""
    if r == 0:
        return payment * periods
    annuity_factor = -np.expm1(-periods * np.log1p(r)) / r
    return payment * annuity_factor


def bond_price(face_value, coupon_rate, yield_rate, years):
    """
    Calculate bond price given face value, coupon rate, yield, and maturity.
    Assumes annual coupon payments.
    """
    coupon = face_value * coupon_rate

    # PV of coupons (annuity)
    pv_coupons = annuity_pv(coupon, yield_rate, years)

    # PV of face value
    pv_face = face_value / (1 + yield_rate) ** years

    return pv_coupons + pv_face


# Bond parameters
face_value = 1000
coupon_rate = 0.04
yield_rate = 0.05
years = 5

price = bond_price(face_value, coupon_rate, yield_rate, years)
coupon = face_value * coupon_rate
Out[32]:
Console
Bond Valuation
========================================
Face value:    $1,000
Coupon rate:   4.0% ($40/year)
Market yield:  5.0%
Maturity:      5 years

Bond price:    $956.71
Discount:      $43.29

The bond trades at a discount ($956.71 vs. $1,000 face) because its 4% coupon is below the 5% market yield. Investors require compensation for accepting below-market coupons, which comes in the form of a lower price.

Let's visualize how the bond's cash flows contribute to its price:

Out[33]:
Visualization
Bar chart showing nominal bond cash flows over 5 years with larger final payment.
Nominal cash flows of a 5-year bond with 4% coupon. The final year includes both the coupon payment and principal repayment.
Bar chart showing four successively smaller present values for the equal $40 coupons, followed by a much larger year-5 present value because the final cash flow includes principal.
Present value of bond cash flows discounted at 5% yield. Equal coupon payments have lower present values at later dates; the principal-bearing year-5 payment still contributes the most.

The final cash flow of $1,040 (coupon plus principal) accounts for the bulk of the bond's value, but its contribution is substantially reduced when discounted back five years.

Out[34]:
Visualization
Downward sloping curve showing bond price decreasing as yield increases, crossing par at 4% yield.
Inverse relationship between bond price and yield for a 5-year, 4% coupon bond. When yield equals the coupon rate (4%), the bond trades at par ($1,000). Below par when yields exceed coupons; above par when yields fall below coupons.