用 Python 进行债券定价与分析
Joshua Mayhew
Options Trader
回忆零息债价格公式:
$PV = \frac{FV}{(1 + r)^n}$
可重排以求收益率 $(r)$:
$FV = PV \times (1 + r)^n$
$ \frac{FV}{PV} = (1 + r)^n$
$ \sqrt[n]\frac{FV}{PV} = (1 + r)$
$ \sqrt[n]\frac{FV}{PV} -1 = r$
用同一只零息债反向计算:
这只债的收益率是多少?
3年期零息债,价格90.19美元,面值100美元:
$r = \sqrt[n]\frac{FV}{PV} -1$
ytm = (100 / 90.19) ** (1/3) - 1
print(ytm)
0.035
我们用 ytm 表示"到期收益率"。
付息债公式:
$ PV = \frac{C}{(1 + r)^1} + \frac{C}{(1 + r)^2} + ... +\frac{C}{(1 + r)^n} + \frac{P}{(1 + r)^n}$
$ = \sum_{i=1}^n \frac{C}{(1 + r)^i} + \frac{P}{(1 + r)^n}$
此方程无法对 $r$ 显式求解
用试错法求 $r$
这也是 npf.rate() 的工作方式
回顾之前的付息债券,其:
其到期收益率是多少?
3年期付息债,年票息3%,价格97.22美元:
import numpy_financial as npf
npf.rate(nper=3, pmt=3, pv=-97.22, fv=100)
0.04
请将现值 PV 设为负数。
因为买入债券需支付价格(负现金流)。
用 Python 进行债券定价与分析