Section 4.3 Pricing Bonds
Theorem 4.3.1. Setting price of bond with periodic coupons..
Given a bond with stated rate of rbond, nominal rate of rnommaturity (face) value of MV, and which matures in t years with coupons provided m times a year, the purchase price is given byProof.
The yearly coupon value equals \(MV \cdot r_{bond}\) broken up into m payments of size \(R = MV \frac{r_{bond}}{m}\text{.}\) These coupons can be thought of as a regular annuity with \(n = m \cdot t\) payments and finding the present value of these yields the second part of this formula.
The maturity value also is factored into the price by using the compound interest formulas with the nominal rate and moving back n periods to the time when the bond is sold. This is the first part of this formula.
Corollary 4.3.2.
For Bonds where bond rate = nominal rate, purchase price equals maturity valueProof.
In this case, \(r_{nom} = r_{bond} = r\) gives
Example 4.3.3.
A 14% bond with semiannual coupons, face value of MV=$40,000,000 for 25 years and with nominal annual rate of 10%.
xxxxxxxxxx
layout=dict(top=[['MV'],['m','t'],['r1','r2']])) (
def _(r1 = input_box(0.10,label="nominal rate",width=6),
r2 = input_box(0.14,label="stated bond rate",width=6),
m = input_box(2,label="coupons per year",width=4),
t = input_box(25,label="years",width=4),
MV = input_box(40000,label="Bond Face Value",width=10)):
n = t*m # number of periods = years?
term = (1-(1+r1/m)^(-n))/(r1/m)
print "Coupon Multiplier = ",term.n()
valueCoupons = MV*r2/2 * term # Annual coupons are the biannual payments
valueBondEnd = MV*(1+r1/m)^(-n) # Present value of F in 25 years
print "Coupons Value = ",valueCoupons
print "Redemption PV = ",valueBondEnd
print "Purchase Price of Bond = ",valueCoupons+valueBondEnd
Corollary 4.3.4. Book Value of a Bond.
For a bond convertible m times a year and with a yield rate convertible m times a year, if the Face Value is FV and Book Value is BV and Redemption Value is RV, when redeeming immediately after the kth coupon payment yieldsExample 4.3.5.
Suppose a 10 year $2000 bond earns interest at 10.2% convertible semiannually and that the yield rate is 7.1% convertible semiannually. If the redemption value immediately after the 13th coupon payment is $2300.00, the book value BV is given by
xxxxxxxxxx
layout=dict(top=[['MV','k'],['m','t'],['r1','r2'],['RV']])) (
def _(r1 = input_box(0.071,label="nominal rate",width=6),
r2 = input_box(0.102,label="stated bond rate",width=6),
m = input_box(2,label="coupons per year",width=4),
t = input_box(10,label="years",width=4),
k = input_box(13,label="Coupon Number",width=4),
MV = input_box(2000,label="Bond Face Value",width=10),
RV = input_box(2030,label="Redemption Value at coupon number",width=10)):
n = t*m
term = (1-(1+r1/m)^(-n+k))/(r1/m)
valueCouponsRemain = MV*r2/m * term # Annual coupons are the m payments
valueMV = RV*(1+r1/m)^(-n+k) # Present value of MV
BV = round(100*(valueCouponsRemain+valueMV))/100
print "Book Value of Bond after the ",k,"th coupon = ",BV.n()
Corollary 4.3.6. Redemption Value of a Bond.
For a bond convertible m times a year and with a yield rate convertible m times a year, if the Face Value is FV and Book Value is BV and Redemption Value is RV, when redeeming immediately after the kth coupon payment yieldsxxxxxxxxxx
layout=dict(top=[['MV','k'],['m','t'],['r1','r2'],['BV']])) (
def _(r1 = input_box(0.071,label="nominal rate",width=6),
r2 = input_box(0.102,label="stated bond rate",width=6),
m = input_box(2,label="coupons per year",width=4),
t = input_box(10,label="years",width=4),
k = input_box(13,label="Coupon Number",width=4),
MV = input_box(2000,label="Bond Face Value",width=10),
BV = input_box(2212.70,label="Book Value at coupon number",width=10)):
n = t*m
term = (1-(1+r1/m)^(-n+k))/(r1/m)
valueCouponsRemain = MV*r2/m * term # Annual coupons are the m payments
RV = (BV - valueCouponsRemain)/(1+r1/m)^(-n+k) # Present value of MV
RV = round(100*RV)/100
print "Redemption Value of Bond after the ",k,"th coupon = ",RV.n()