程式
使用 QuantLib Python 為遠期利率協議定價
有人可以幫助使用 QuantLib Python 對以下遠期利率協議進行定價嗎?
3x6 遠期利率協議,名義金額為 100,000 美元,FRA 利率為 6%,FRA 結算日期為 3 個月(90 天)後,結算基於 90 天 USDLIBOR。
我的估值日期是 2020 年 6 月 30 日。
這是我的嘗試:
import QuantLib as ql startDate = ql.Date(30, 6, 2020) ql.Settings.instance().evaluationDate = startDate spotDates = [ql.Date(30, 6, 2020), ql.Date(31, 12, 2020), ql.Date(30, 6, 2021)] spotRates = [0.05, 0.05, 0.05] dayConvention = ql.Thirty360() calendar = ql.UnitedStates() maturityDate = calendar.advance(startDate, ql.Period('3M')) compounding = ql.Simple compoundingFrequency = ql.Annual spotCurve = ql.ZeroCurve(spotDates, spotRates, dayConvention, calendar, ql.Linear(), compounding, compoundingFrequency) spotCurve.enableExtrapolation() spotCurveHandle = ql.YieldTermStructureHandle(spotCurve) index = ql.USDLibor(ql.Period('3M'), spotCurveHandle) index.addFixing(ql.Date(26, 6, 2020), 0.05) notional = 100000 rate = 0.06 fra = ql.ForwardRateAgreement(startDate, maturityDate, ql.Position.Long, rate, notional, index, spotCurveHandle) print('NPV:', fra.NPV())
這是我得到的答案:
淨現值:0.0
我得到的答案是不正確的。
對於 3x6 FRA,您可能想要編寫如下內容:
today = ql.Date(30, 6, 2020) ql.Settings.instance().evaluationDate = today startDate = calendar.advance(today, ql.Period('3M')) maturityDate = calendar.advance(startDate, ql.Period('3M'))
也就是說,您傳遞給 FRA 建構子的開始和到期日期應該是 LIBOR 的基礎期間。
你寫的是從今天到三個月後的 FRA,圖書館認為它已經過期。