使用QuantLib Python为远期利率协议定价

2024-09-29 23:18:50 发布

您现在位置:Python中文网/ 问答频道 /正文

有人可以使用QuantLib Python帮助定价以下远期利率协议吗

3x6远期利率协议,名义利率为100000美元,远期利率协议利率为6%,远期利率协议结算日期在3个月(90天)之后,结算基于90天美元伦敦银行同业拆借利率

我的估价日期是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())

这就是我得到的答案:

NPV: 0.0

我得到的答案是不正确的


Tags: 协议dateindexcalendarql利率quantlibstartdate
1条回答
网友
1楼 · 发布于 2024-09-29 23:18:50

首先(为了准确起见),美元远期利率账户的日数为Act/360,即ql.Actual360()。还请记住,FRA的固定日历基于英国日历(BBA Libor),这可能不同于结算日历(因此7月4日不是固定假日,而是结算假日)

操作代码的主要问题是FRA开始日期与评估日期相同。一旦您知道修复,FRA将有效结算,因此净现值为零,现金流为零

ForwardRateAgreement()的第一个参数是FRA的结算日期。第二个期限是到期日。因此,对于3x6现货,起始日期为300万起,到期日期为600万起

将该行修改为:

dayConvention = ql.Actual360()

fra = ql.ForwardRateAgreement(calendar.advance(startDate,ql.Period(3,ql.Months)), calendar.advance(startDate,ql.Period(6,ql.Months)), ql.Position.Long, rate, notional, index, spotCurveHandle)

将为您提供现场3x6 FRA的日期(20年9月30日->;20年12月30日)

输出: NPV: -262.08622386063985

注意。在FRA的QuantLib示例中,他们使用选定的FRA市场利率来构建一条{}曲线来评估FRA,而不是零曲线,我猜正是这两条曲线之间的细微差异导致了远期利率(以及NPV)的微小变化。FRA的隐含远期利率为4.937%。。。ie不是5%,这也会增加净现值。在实践中,如果您试图为FRA定价,则使用市场FRA报价构建曲线

相关问题 更多 >

    热门问题