Bond Valuation and Analysis in Python
Joshua Mayhew
Options Trader
Duration = % change in bond price for 1% change in yields
Dollar duration = $ change in bond price for 1% change in yields:
Tells us how much money we make or lose for a change in interest rates
$ \text{Dollar Duration} = \text{Duration} \times \text{Bond Price} \times 0.01$
DV01 = $ change in bond price for 0.01% change in yields.
0.01% = 1% of 1% = 1 basis point
Short for "dollar value of one basis point"
$ \text{DV01} = \text{Duration} \times \text{Bond Price} \times 0.0001$
Bond with a price of USD 92.28 and duration of 7.98%:
dollar_duration = 92.28 * 7.98 * 0.01
print("Dollar Duration: ", dollar_duration)
Dollar Duration: 7.36
DV01 = 92.28 * 7.98 * 0.0001
print("DV01: ", DV01)
DV01: 0.0736
portfolio_dv01 = 10000
bond_dv01 = 0.0736
hedge_quantity = portfolio_dv01 / bond_dv01
print("Number of bonds to sell: ", hedge_quantity)
Number of bonds to sell: 135,869
bond_price = 92.28
hedge_amount = hedge_quantity * bond_price
print("Dollar amount to sell: USD", hedge_amount)
Dollar amount to sell: USD 12,538,043
$ \text{Price Change} = -100 \times \text{Dollar Duration} \times \Delta y$
Estimated bond price change if interest rates drop 3%:
-100 * 7.36 * -0.03
22.08
Actual change from repricing the bond:
-npf.pv(rate=0.02, nper=10, pmt=4, fv=100) - 92.28
25.69
Bond Valuation and Analysis in Python