Quantlib
Quantlib 收益率曲線 - 零利率產出與預期不同
當我從創建的收益率曲線中讀取值時,我正在使用 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% 的比率是行不通的。