需要帮助使债券价格可以针对不同的贴现率假设进行迭代(Python v3.10.6)

问题描述 投票:0回答:1

** 信息:我正在使用 Python 3.10.6**

我目前正在尝试提出一个可以迭代/通过不同利率的债券价格函数。最终目标是创建基于 CIR 模型的债券价格模拟。

基本上,要计算债券价格,我需要预先定义另外两个函数。然后需要将这两个函数相乘并相加,得出债券价格

  • 债券现金流量
  • 折扣因素

债券现金流函数:

def bond_cash_flows(maturity, principal=100, coupon_rate=0.03, coupons_per_year=12):
    n_coupons= round(maturity*coupons_per_year)
    coupon_amt= principal*coupon_rate/coupons_per_year
    coupon_times=np.arange(1, n_coupons+1)
    cash_flows=pd.Series(data=coupon_amt, index=coupon_times)
    cash_flows.iloc[-1] += principal
    return cash_flows

折扣因子函数

def discount(t,r):
    discounts = pd.DataFrame([(r+1)**-i for i in t])
    discounts.index = t
    return discounts

最后,债券价格函数

    
def bond_price(maturity, principal=100, coupon_rate=0.03, coupons_per_year=12, discount_rate=0.03):
    cash_flows=bond_cash_flows(maturity, principal, coupon_rate, coupons_per_year)
    discounts= discount(cash_flows.index, r=discount_rate/coupons_per_year)
    return (pd.DataFrame(cash_flows)*discounts).sum()

什么似乎有效:

  • 当我硬编码利率时,债券价格函数工作正常(https://i.stack.imgur.com/AYq4x.png)](https://i.stack.imgur.com/AYq4x.png)
  • 现金流和贴现功能有效

什么不起作用: 当我尝试将利率列表插入债券价格公式时,它抛出了这个错误。通常它也会抛出某种尺寸错误,如果不是这个错误信息的话

我想要的输出:

  • 能够输入利率列表,公式可以遍历利率并输出每个利率的差异债券价格

感谢您对此的投入。抱歉,我是 Python 的初学者(但不是金融)

我试着想出函数并将不同的输入更改为某些数据类型,以确保函数可以处理输入。

但是我每次都会因为不同类型的值或尺寸错误而被抛弃。

期望的输出基本上是将参数输入债券价格函数并传递超过 1 个利率的能力,输出是不同利率下的债券价格。

我希望一切都清楚。谢谢

python python-3.x finance
1个回答
0
投票

您正在使用变量

discount
作为函数内的局部变量
discount(t, r)
bond_price
.

如果你在函数内部设置一个变量的值,python 将其理解为创建一个具有该名称的局部变量。这个本地 变量屏蔽了全局变量。

在你的例子中,

discount
被认为是一个局部变量,它被使用 在被设置之前,因此是错误的。

为了解决这个问题,你可以通过在你的函数中放置

global discount
来明确地说它是一个全局的。

请参阅以下参考资料:

例子:

def discount(t,r):
    global discounts
    discounts = pd.DataFrame([(r+1)**-i for i in t])
    discounts.index = t
    return discounts

其他解决方案: 您可以通过传递参数而不是依赖全局变量来解决这个问题

例子:

def discount(t, r, discounts):
    # we use 'discounts' variable from parameter
    # discounts = pd.DataFrame([(r+1)**-i for i in t])
    discounts.index = t
    return discounts

希望有帮助。

*在 Python 中使用同名变量时要小心。

© www.soinside.com 2019 - 2024. All rights reserved.