-
Compound Interest Part 1 6
-
Lecture1.1
-
Lecture1.2
-
Lecture1.3
-
Lecture1.4
-
Lecture1.5
-
Lecture1.6
-
-
Compound Interest Part 2 3
-
Lecture2.1
-
Lecture2.2
-
Lecture2.3
-
-
Present Value 4
-
Lecture3.1
-
Lecture3.2
-
Lecture3.3
-
Lecture3.4
-
-
Annuities 6
-
Lecture4.1
-
Lecture4.2
-
Lecture4.3
-
Lecture4.4
-
Lecture4.5
-
Lecture4.6
-
-
Perpetuities 2
-
Lecture5.1
-
Lecture5.2
-
-
Bonds 6
-
Lecture6.1
-
Lecture6.2
-
Lecture6.3
-
Lecture6.4
-
Lecture6.5
-
Lecture6.6
-
-
Dividend Discount Model 3
-
Lecture7.1
-
Lecture7.2
-
Lecture7.3
-
-
Risk 8
-
Lecture8.1
-
Lecture8.2
-
Lecture8.3
-
Lecture8.4
-
Lecture8.5
-
Lecture8.6
-
Lecture8.7
-
Lecture8.8
-
-
Capital Asset Pricing Model 6
-
Lecture9.1
-
Lecture9.2
-
Lecture9.3
-
Lecture9.4
-
Lecture9.5
-
Lecture9.6
-
Premium Bond
Premium Bonds¶
Premium bonds act in the opposite way. Their coupon payments are greater than the discount rate so they pull to par but do so from a premium over the par value in the beginning.
#Define parameters
n = 10
F = 1000
c = .08
r = .05
vals = [bond_value(F, c, t, r) for t in time_left]
plt.plot(time_left, vals)
plt.xlim([10,0])
plt.xlabel("Time to Maturity")
plt.ylabel("Bond Present Value")
plt.title("Bond Present Value vs. Time to Maturity")
plt.show()
Comparing the Discount, Par, and Premium Bonds¶
We can see that in all three cases, the values are going to approach par as the time to maturity gets smaller and smaller.
#Get the different values
vals1 = [bond_value(F, .02, t, r) for t in time_left]
vals2 = [bond_value(F, .05, t, r) for t in time_left]
vals3 = [bond_value(F, .08, t, r) for t in time_left]
#Plot the values
plt.plot(time_left, vals1)
plt.plot(time_left, vals2)
plt.plot(time_left, vals3)
plt.xlim([10,0])
plt.xlabel("Time to Maturity")
plt.ylabel("Bond Present Value")
plt.title("Bond Present Value vs. Time to Maturity")
plt.legend(["Coupon Rate=2%",
"Coupon Rate=5%",
"Coupon Rate=8%"])
plt.show()
Solving for the Coupon Rate¶
There are some cases where what we are solving for is not actually the present value but instead some other component, like, for example the coupon rate. We can re-arrange the equation to do this. Start with the equation from before.
$$ PV = F \cdot c \cdot \frac{1-(1+r)^n}{r} + \frac{F}{(1+r)^n}$$
where
$ PV = \text{Present Value} $
$ F = \text{Face Value} $
$ c = \text{Coupon Rate} $
$ r = \text{Discount Rate} $
$ n = \text{Number of Periods} $
Subtract the face value part of the equation.
$$ PV - \frac{F}{(1+r)^n} = F \cdot c \cdot \frac{1-(1+r)^n}{r}$$
Now, on the right side there is the coupon rate times the face value and the annuity factor. Dividing by this we can compute the coupon rate.
$$c = \frac{PV - \frac{F}{(1+r)^n}}{F \cdot \frac{1-(1+r)^n}{r}}$$
Let's do an example with the parameters below.
#We can also use the equation to find the coupon rate that corresponds to a certain PV, FV, n and r
PV = 926.399129485853
F = 1000
n = 10
r = .06
#to find the coupon rate, first we need to figure out what the annuity part of the bond is worth
face_value_PV = F/(1+r)**n
print(face_value_PV)
558.3947769151179
#So let's take out that from the PV
annuity_PV = PV - face_value_PV
print(annuity_PV)
368.00435257073514
So we know that the annuity is worth $368. We also can find the annuity factor since we have r and n
annuity_factor = (1-(1.06)**-n)/r
print(annuity_factor)
7.360087051414703
So we know that the payment times the annuity factor is what an annuity's present value equals, so....
coupon = annuity_PV/annuity_factor
print(coupon)
50.0
#Coupon rate is coupon/face value
print(coupon/F)
0.05