【问题标题】:Python - yield to maturity (finance - bonds)Python - 到期收益率(金融 - 债券)
【发布时间】:2021-03-01 23:22:03
【问题描述】:

我正在尝试计算债券的到期收益率(在 Google Colab (Jupyter) 中工作)。 该问题的数学公式为: 价格 = 1276.76 美元,期数 = 60 [0.5 年] = 30 年,每期付款 = 40 美元,最终付款(面值)= 1000 美元,利率 = r。

我试图通过函数导出“r”。
当采用硬编码公式和函数的方法时,我发现:

# Yield to maturity

""" Get yield-to-maturity of a bond """
import scipy.optimize as optimize


def bond_ytm(price, par, T, coup, freq=2, guess=0.05):
    freq = float(freq)
    periods = T*freq
    coupon = coup/100.*par/freq
    dt = [(i+1)/freq for i in range(int(periods))]
    ytm_func = lambda(y): \
        sum([coupon/(1+y/freq)**(freq*t) for t in dt]) + \
        par/(1+y/freq)**(freq*t) - price
        
    return optimize.newton(ytm_func, guess)
from bond_ytm import bond_ytm
ytm = bond_ytm(95.0428, 100, 1.5, 5.75, 2)
print(ytm)

我收到错误:lambda 行中的“无效语法”以及删除它时(为了检查函数本身是否有效)“没有名为 'bond_ytm' 的模块”,甚至将其作为额外文件保存在同一目录中(.jpynb) python 文件。 我也不明白 lambda 内联函数、dt 数组/for 循环,以及调用 bond_ytm 的位置和原因。

这是与 github 非常相似的方法,但也没有运行,第二部分使用了另一个函数:
https://github.com/jamesmawm/Mastering-Python-for-Finance-source-codes/blob/master/B03898_05_Codes/bond_ytm.py

if __name__ == "__main__":
    ytm = bond_ytm(95.0428, 100, 1.5, 5.75, 2)
    print ytm

这让我有同样缺失的理解。

这是一个包裹的大型文档,我不知道他们的计算方法,但我可以在其中手动输入期间的日期,并允许计算付款(优惠券)日期之间的应计利息。 https://bond-pricing.readthedocs.io/en/latest/#module-bond_pricing.simple_bonds:

>>> bond_yield(settle="2012-04-15", mat="2022-01-01", cpn=8e-2,
... price=94.33, freq=1)
0.08884647275135965

>>> bond_yield(mat=10.25, cpn=8e-2, price=93.37, freq=2)
0.09000591604105035

>>> bond_yield(settle="2012-04-15", mat="2022-01-01", cpn=8e-2,
... price=[93, 94, 95], freq=1)
array([0.09104904, 0.08938905, 0.08775269])

【问题讨论】:

  • 关于这个话题有一些非常过时的讨论——与python无关且没有代码:stackoverflow.com/questions/14689092/…stackoverflow.com/questions/1173555/…
  • 请从intro tour 重复on topichow to ask。通过所有这些,我不清楚您的问题是什么。您在导入模块时遇到了问题——但如果没有您的环境的详细信息,我们只能猜测问题,并且这些猜测已经记录在现成的在线资源中。您辩称在两三点上缺乏理解——开放式的“我不明白”和多点都超出了本网站的范围。
  • @Prune 谢谢。我的问题是我想计算 YTM - 到期收益率。图书馆“bond_pricing”似乎做到了,但我不知道他们是如何计算的,我想手动计算。如上所述,我发现没有文档/cmets 的代码可以这样做。但是我无法运行它们,并且在 lambda 行中出现“无效语法”错误,查看了对 lambda 的几种解释,我无法理解并修复错误。我在帖子中添加了一些类似的网站和代码,以便人们获得更简单的上下文和类似的方法,并能够更好地帮助我。
  • @Wurschti 你找到了 bond_ytm 的解决方案吗?我也面临与 lambda 函数类似的问题。您能否建议解决此问题的解决方法。谢谢

标签: python function lambda google-colaboratory finance


【解决方案1】:

如果你要找的是内部收益率,有numpy financial library(需要安装pip)可以找到。

>>> import numpy_financial as npf
>>> npf.irr([-1276.76] + [40]*60 + [1000])
0.02985264673122634

【讨论】:

  • 酷,谢谢你,我一定会看的numpy金融库。这里的 IRR 很容易计算。但是,如果我有一个每年支付两次 40 美元的债券。收益率(或利率)因当前日期与付款日期的接近程度而异。付款前一天的预期收益率高于下一次付款前一周或一个月。所以我想计算应计利息。 (等待下一次付款累积的理论利息)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多