程式

QuantLib 債券收益率

  • November 11, 2020

我想我的問題與此處提出的問題相同,但我仍然無法解決我的問題:

python Quantlib中等效的Excel YIELD函式

我正在嘗試計算債券的收益率並將其與我在 Excel/MatLab 中獲得的結果相匹配。

在 Excel 和 MatLab 中,我可以獲得相同的結果,但我需要在 Python 中實現。(0.75358%)

=YIELD("16/03/2020","21/11/2029",0.0275,118.607,100,2,3)

=YIELD(結算,到期,利率,公關,贖回,頻率,基礎)

所以我知道我需要創建一個 ql.FixedRateBond 然後使用 bondYield 函式。

我認為上面的頻率與 ql.Seminannual 匹配,基礎是我的 ql.Actual365Fixed() 的 dayCount 約定。

但是我必須在一些額外的 Python 參數上出錯,因為我的 Python 答案太離譜了。

有人可以幫我解決下面我的 Python 規範中可能出錯的地方嗎?

settlement= ql.Date(16,3,2020)
maturity= ql.Date(21,11,2029)
bond = ql.FixedRateBond(0, ql.TARGET(), 100, start, maturity, ql.Period('6M'), [0.0275], ql.Actual365Fixed())
bond.bondYield(118.6070, ql.Actual365Fixed(), ql.Compounded, ql.Semiannual)

(Python 結果 0.6284% 順便說一句)

這裡的問題是,當您呼叫該bondYield方法時,如果您不指定結算日期,QuantLib 將根據全域評估日期計算折扣因子。預設情況下,這將是系統日期。

所以要麼在方法中定義結算日期,作為頻率後面的參數:

start = ql.Date(16,3,2020)
maturity = ql.Date(21,11,2029)
bond = ql.FixedRateBond(2, ql.TARGET(), 100, start, maturity, ql.Period('6M'), [0.0275], ql.Actual365Fixed())
bond.bondYield(118.607, ql.Actual365Fixed(), ql.Compounded, ql.Semiannual, start)

或者,更改全域評估日期。例如,您可以在執行該bondYield方法之前插入此行。

ql.Settings.instance().evaluationDate = ql.Date(16,3,2020)

引用自:https://quant.stackexchange.com/questions/59311