Quantlib

Quantlib 收益率曲線 - 零利率產出與預期不同

  • May 9, 2022

當我從創建的收益率曲線中讀取值時,我正在使用 zeroRate 創建收益率曲線 - 它與預期不同。

tod = ql.Date(5,5,2022)
ardates = [tod,  tod+ql.Period(1,ql.Weeks),  tod+ql.Period(1,ql.Months),  tod+ql.Period(3,ql.Months),
          tod+ql.Period(6,ql.Months),tod+ql.Period(1,ql.Years),tod+ql.Period(2,ql.Years) ]
arzeros = [0.43902, 0.80713,1.0581, 1.19588,1.64246, 2.2557, 2.72901]

arc1 = ql.ZeroCurve(ardates, arzeros, ql.Actual360(), ql.UnitedStates())
arc2 = ql.CubicZeroCurve(ardates, arzeros, ql.Actual360(), ql.UnitedStates())

在試圖從這些收益率曲線中檢索零利率的價值……

print(arc1.zeroRate(0, ql.Compounded, ql.Continuous).rate())

0.4932915599104186;預期值為~0.43902

print(arc1.zeroRate(1, ql.Compounded, ql.Continuous).rate())

4.125908149916458;預期值為~2.2557

print(arc1.zeroRate(2, ql.Compounded, ql.Continuous).rate())

5.772093785892491;預期值為~2.72901

有人可以幫我解決這個問題嗎?我已經定義了收益率曲線 - 某個日期的利率。我想按原樣讀出值,但這沒有發生。

問候, 羅希特

如果您想要連續費率,請ql.Continuous按照@lampishthing 的建議傳遞;並且,t使用他們的答案中的實際/365 天計數器進行計算。

添加更多資訊:如果您想要復合利率,您可以通過ql.Compounded,在這種情況下,您確實需要通過第三個,即頻率;所以

arc1.zeroRate(t, ql.Compounded, ql.Continuous)

沒有意義,但例如

arc1.zeroRate(t, ql.Compounded, ql.Semiannual)

會,併計算與您傳遞給期限結構的連續利率相對應的半年復合利率。

但是,真正的問題是,如果您.rate()從呼叫中刪除 並讓庫列印完整資訊;例如,這是您上次約會的結果:

>>> t = ql.Actual360().yearFraction(tod, ardates[-1])
>>> print(arc1.zeroRate(t, ql.Continuous))
272.901000 % Actual/360 continuous compounding

該庫使用十進製表示的費率,因此通過

[0.43902, 0.80713,1.0581, 1.19588,1.64246, 2.2557, 2.72901]

你真的超過了 43%、80%、105% 等等。你想寫的大概是

arzeros = [0.0043902, 0.0080713, 0.010581, 0.0119588, 0.0164246, 0.022557, 0.0272901]

這會給你

>>> print(arc1.zeroRate(t, ql.Continuous))
2.729010 % Actual/360 continuous compounding

以及復合案例的合理值:

>>> print(arc1.zeroRate(t, ql.Compounded, ql.Annual))
2.766589 % Actual/360 Annual compounding

當曲線用於分攤或預測時,使用正確的輸入率表示法也可以為您提供正確的價格;當然,43% 或 272% 的比率是行不通的。

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