根據市場數據創建美元 LIBOR 遠期曲線的最佳方法
這是一個非常基本的問題,我確信之前已經回答了這個問題,但我似乎找不到它。
根據市場數據建構美元 Libor 遠期曲線的最佳方法是什麼?
例如,我可以拉下美元 Libor 的以下遠期/預測曲線:
maturity 1M USD Libor 3M USD Libor 6M USD Libor 1Y USD Libor 1M 0.1551 0.2357 0.249 0.3658 3M 0.1622 0.2341 0.2473 0.3809 6M 0.1439 0.2051 0.2478 0.4081 1Y 0.1202 0.1948 0.2758 0.4797 2Y 0.1069 0.2265 0.3754 0.6704 3Y 0.2094 0.3452 0.5159 0.8479 4Y 0.392 0.5293 0.7074 1.0331 5Y 0.5843 0.7193 0.8862 1.2173 7Y 0.9077 1.0438 1.2055 1.5262 10Y 1.2002 1.3265 1.4985 1.763 15Y 1.255 1.3852 1.5278 1.7989 20Y 1.2285 1.3538 1.4866 1.7496 30Y 0.9059 1.0612 1.1455 1.3755
注意:為簡單起見,我只選擇了沿我可以訪問的曲線的費率。實際上,這些都是我每天都可以使用的。
我一直在嘗試導入上述數據(儘管我不確定哪個 Helper 最合適),最終目標是使用生成的曲線來預測浮動利率以評估 IRS。
編輯:為了澄清,最好將上述曲線視為前向生成或投影曲線。其預期用途是預測未來 300 萬美元的 LIBOR 利率。
編輯 2:上述曲線根據期限進行了調整,我使用單獨的曲線進行貼現/估值。
如果這些數字只是 3M 利率,我擔心您沒有足夠的資訊來建構曲線來評估其他工具。
例如,您有一個從 1Y 和 2Y 開始的 3M 利率,但沒有即期或掉期利率,您沒有關於從 1Y3M、1Y6M 和 1Y9M 開始的 3M 期貨的資訊……
我認為您可以做的一件事是建構一條曲線,使用
ql.ForwardCurve
該類對這些速率進行平面插值(期望連續速率作為輸入)。import QuantLib as ql import matplotlib.pyplot as plt nodes = [ ('1M', 0.2357), ('3M', 0.2341), ('6M', 0.2051), ('1Y', 0.1948), ('2Y', 0.2265), ('3Y', 0.3452), ('4Y', 0.5293), ('5Y', 0.7193), ('7Y', 1.0438), ('10Y', 1.3265), ('15Y', 1.3852), ('20Y', 1.3538), ('30Y', 1.0612), ] today = ql.Date().todaysDate() calendar = ql.TARGET() dates = [calendar.advance(today, ql.Period(tenor)) for tenor, rate in nodes] rates = [rate for tenor, rate in nodes] dayCounter = ql.Actual360() contRates = [ql.InterestRate(rate, dayCounter, ql.Compounded, ql.Quarterly).equivalentRate(ql.Continuous, ql.NoFrequency, 1).rate() for rate in rates] curve = ql.ForwardCurve(dates, contRates, ql.Actual360()) curve.enableExtrapolation() rates = [curve.forwardRate(dt, dt+ql.Period('3M'), ql.Actual360(),ql.Compounded, ql.Quarterly).rate() for dt, rate in curve.nodes()] times = [dayCounter.yearFraction(today, dt) for dt, rate in curve.nodes()] plt.plot(times, rates, 'o');
請注意,我故意繪製了點而不是線,因為您實際使用這條曲線得到的是所提供的前向的平面插值,即:
allDates = ql.MakeSchedule(dates[0], curve.maxDate(), ql.Period('1D')) allTimes = [dayCounter.yearFraction(today, dt) for dt in allDates] fwds = [curve.forwardRate(dt, dt+ql.Period('3M'), ql.Actual360(),ql.Compounded, ql.Quarterly).rate() for dt in allDates] plt.plot(allTimes, fwds)
其他替代方法是將曲線擬合到這些點或使用更高級的插值方法,儘管您可能在任何這些替代方法上的點太少而無法獲得不錯的結果。
這是使用單調凸插值的前向曲線的樣子。
您有更多的流動性工具可用於建構您的 LIBOR 曲線,尤其是在 5Y 點以下。我們通常做的是將所有低於 5 年的歐洲美元期貨合約(所以現在最後一個是 SEP25 合約)並應用適當的平滑凸函式(記住遠期 libor = 歐洲美元期貨 + 凸性)。您需要這些未來合約(20 份合約)的 ech 的凸度值,通常您可以使用 1Y、2Y、3Y、4Y、5Y 交換點擬合平滑凸度(例如對數多項式)。這樣你就有了一個更細化的曲線,你在前 5 年內的遠期不會受到插值,而是根據市場進行校準。