【发布时间】:2021-09-07 09:02:32
【问题描述】:
有人可以帮助使用 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
我得到的答案不正确。
【问题讨论】:
-
什么不起作用?您是否得到了 NPV,但它是错误的?
-
我不确定我传递的参数...是否正确。
-
答案不应该低于 250 美元吗?你以 6% 的价格购买了 FRA,它很可能会固定在 5%。因此,在结算时,您以 10 万美元的年化收益为 1%,所以 10 万 x 1% x 0.25 = 250 美元?然后将有 250 个小折扣来现货 (1+0.05)^0.25 = 1.01227。所以 NPV 约为 247 美元。
-
这就是为什么我认为我的代码有错误...欢迎任何帮助。
-
你得到多少 NPV?
标签: python finance quantitative-finance quantlib financialinstrument