程式

使用 QuantLib Python 為遠期利率協議定價

  • September 8, 2021

有人可以幫助使用 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,圖書館認為它已經過期。

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