Makeham’s Formula

Makeham’s formula can also be derived via bond notation and can be useful for obtaining the price of a bond when we do not know the number of coupons:

P = \frac{g}{j}(C-K) + K,

where K is the present value of the redemption amount.

Examples

Suppose we have a 1,000 bond that pays 5% annual coupons. The redemption amount is 1,250 and the present value of the redemption amount is 776.1516538. If it is priced to yield 10% compounded annually, what is the price of the bond? Also, find the term and number of coupons.

TmVal’s Bond class has a method called makeham() which it calls internally when the term and price are missing, and when the present value of the redemption amount is provided via the k argument. Because it is called internally, we do not have to explicitly call this method to get the bond price.

In [1]: from tmval import Bond

In [2]: bd = Bond(
   ...:    face=1000,
   ...:    red=1250,
   ...:    k=776.1516538,
   ...:    alpha=.05,
   ...:    cfreq=1,
   ...:    gr=.10
   ...: )
   ...: 

In [3]: print(bd.term)
5.0

In [4]: print(bd.n_coupons)
5.0

In [5]: print(bd.price)
965.690992294366

We could call makeham() anyway, just to verify:

In [6]: print(bd.makeham())
965.690992294366