簡體   English   中英

如何以可變貼現率貼現現金流並匯總所有現金流

[英]How to discount Cashflows with variable discount rates and sum all cashflows

我正在嘗試為一種債券定價,該債券將每半年支付一次息票 (c),為期 4 年(這意味着總共支付 8 次息票)並返還本金 (p) 金額以及第 8 次付款 (c+p)。 貼現每個現金流的貼現率 (dr) 將不同。

輸入:

博士 = [0.10, 0.12, 0.15, 0.22, 0.37, 0.6, 0.8, 0.85], p = 1000, c = 2, T = 4, 頻率 = 2

我在stackoverflow中找到了下面的代碼,但這並沒有使用不同的“dr”來貼現每個現金流,也沒有在貼現后對所有現金流求和。 有人可以幫忙嗎? '''

par = 1000
coupon_rate = 3
T = 5
freq = 2


def cf_calculator(par, r, T, freq):
    for i in range(0,(T * freq)+1):
        if i < (T * freq):
            coupon = ((r/100) * par) / freq
            print(coupon)
        else: 
            coupon = (((r/100) * par) / freq) + par
            print(coupon)

print(cf_calculator(par,coupon_rate,T,freq))

'''

綁定 CF for 循環和 if else 循環

我盡量避免循環:

p = 1000
c = 2 
T = 4
freq = 2
dr = [0.10, 0.12, 0.15, 0.22, 0.37, 0.6, 0.8, 0.85]

import numpy as np
cashflows = np.dot(p,[(c/100 + (i==freq*T-1)) for i in range(freq*T) ])
print(cashflows)

dcf = sum([cf[0]/((1+cf[1])**(i+1)) for i,cf in enumerate(zip(cashflows,dr))])
print(dcf)

Output:

[20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 1020.0]
69.40091054501804

我希望數學是正確的。 並且代碼假定列表dr的長度等於T*freq 對於生產級代碼,您可能需要添加 try except 塊,檢查上述假設。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM