考虑到当前价格,期数,息票和票面价值都是已知的,我试图使用以下公式计算债券的到期收益率。
我使用以下代码创建了一个SymPy表达式:
expr = coupon/pow((1+ytm), exp)
exp= exp+0.5
for x in range(1, periods):
expr = expr + coupon/pow((1+ytm), exp)
exp = exp+0.5
exp = exp-0.5
expr = expr+100/pow((1+ytm), exp)
表达式一旦计算就看起来像这样:
Out[3]: 104.375*(ytm + 1)**(-28.7356164383562) + 4.375*(ytm + 1)**(-28.2356164383562) + ..... + 4.375*(ytm + 1)**(-0.735616438356164) + 4.375*(ytm + 1)**(-0.235616438356164)
试图用SymPy solve()
方法解决:
from sympy.solvers import solve
但是它似乎不起作用。非常感谢我应如何解决此问题。
答案 0 :(得分:1)
使用nsolve
可以轻松获得数值解。演示一个从您提供的内容中得出的表达式:
>>> print(filldedent(eq))
104.375*(ytm + 1)**(-28.7356164383562) + 4.375*(ytm +
1)**(-28.2356164383562) + 4.375*(ytm + 1)**(-0.735616438356164) +
4.375*(ytm + 1)**(-0.235616438356164)
>>> nsolve(eq-5, 1)
2.49587148297981