互换
VanillaSwap
- ql.VanillaSwap(type, nominal, fixedSchedule, fixedRate, fixedDayCount, floatSchedule, index, spread, floatingDayCount)
类型:
ql.VanillaSwap.Payer
ql.VanillaSwap.Receiver
calendar = ql.TARGET()
start = ql.Date(17,6,2019)
maturity = calendar.advance(start, ql.Period('5y'))
fixedSchedule = ql.MakeSchedule(start, maturity, ql.Period('1Y'))
floatSchedule = ql.MakeSchedule(start, maturity, ql.Period('6M'))
swap = ql.VanillaSwap(
ql.VanillaSwap.Payer, 100,
fixedSchedule, 0.01, ql.Thirty360(),
floatSchedule, ql.Euribor6M(), 0, ql.Actual360()
)
互换
- ql.Swap(firstLeg, secondLeg)
fixedSchedule = ql.MakeSchedule(start, maturity, ql.Period('1Y'))
fixedLeg = ql.FixedRateLeg(fixedSchedule, ql.Actual360(), [100], [0.01])
floatSchedule = ql.MakeSchedule(start, maturity, ql.Period('6M'))
floatLeg = ql.IborLeg([100], floatSchedule, ql.Euribor6M(), ql.Actual360())
swap = ql.Swap(fixedLeg, floatLeg)
创建普通利率互换
- ql.MakeVanillaSwap(tenor, index, fixedRate, forwardStart)
可选参数:
固定利率计息天数
名义金额
receiveFixed,
互换类型
结算天数
生效日期
终止日期
日期生成规则
固定期限
固定收益日历
固定利率端惯例
固定利率计息天数
浮动利率期限
浮动利率日历
浮动利率惯例
浮动利率计息天数
浮动利率利差
贴现期限结构
定价引擎
固定利率端终止日期惯例
固定期限日期生成规则
固定期限月末
固定利率端首个日期
固定利率端的倒数第二个日期,
浮动利率终止日期惯例
浮动利率计息日规则
浮动利率端月末调整
浮动利率首个计息日
浮动利率倒数第二个日期
tenor = ql.Period('5y')
index = ql.Euribor6M()
fixedRate = 0.05
forwardStart = ql.Period("2D")
swap = ql.MakeVanillaSwap(tenor, index, fixedRate, forwardStart, Nominal=100)
swap = ql.MakeVanillaSwap(tenor, index, fixedRate, forwardStart, swapType=ql.VanillaSwap.Payer)
分期偿还互换
calendar = ql.TARGET()
start = ql.Date(17,6,2019)
maturity = calendar.advance(start, ql.Period('2y'))
fixedSchedule = ql.MakeSchedule(start, maturity, ql.Period('1Y'))
fixedLeg = ql.FixedRateLeg(fixedSchedule, ql.Actual360(), [100, 50], [0.01])
floatSchedule = ql.MakeSchedule(start, maturity, ql.Period('6M'))
floatLeg = ql.IborLeg([100, 100, 50, 50], floatSchedule, ql.Euribor6M(), ql.Actual360())
swap = ql.Swap(fixedLeg, floatLeg)
浮动利率互换
ql.FloatFloatSwap(ql.VanillaSwap.Payer,
[notional] * (len(float3m)-1),
[notional] * (len(float6m)-1),
float3m,
index3m,
ql.Actual360(),
float6m,
index6m,
ql.Actual360(), False, False,
[1] * (len(float3m)-1),
[spread] * (len(float3m)-1))
资产互换
- ql.AssetSwap(payFixed, bond, cleanPrice, index, spread)
- ql.AssetSwap(payFixed, bond, cleanPrice, index, spread, schedule, dayCount, bool)
payFixedRate = True
bond = ql.FixedRateBond(2, ql.TARGET(), 100.0, ql.Date(15,12,2019), ql.Date(15,12,2024),
ql.Period('1Y'), [0.05], ql.ActualActual()
)
bondCleanPrice = 100
index = ql.Euribor6M()
spread = 0.0
ql.AssetSwap(payFixedRate, bond, bondCleanPrice, index, spread, ql.Schedule(), ql.ActualActual(), True)
隔夜指数互换
- ql.OvernightIndexedSwap(swapType, nominal, schedule, fixedRate, fixedDC, overnightIndex)
或名义金额数组
- ql.OvernightIndexedSwap(swapType, nominals, schedule, fixedRate, fixedDC, overnightIndex)
可选参数:
利差=0.0
支付延迟=0
paymentAdjustment=ql.Following()
paymentCalendar=ql.Calendar()
telescopicValueDates=false
类型:
ql.OvernightIndexedSwap.Receiver
ql.OvernightIndexedSwap.Receiver
swapType = ql.OvernightIndexedSwap.Receiver
nominal = 100
schedule = ql.MakeSchedule(ql.Date(15,6,2020), ql.Date(15,6,2021), ql.Period('1Y'), calendar=ql.TARGET())
fixedRate = 0.01
fixedDC = ql.Actual360()
overnightIndex = ql.Eonia()
ois_swap = ql.OvernightIndexedSwap(swapType, nominal, schedule, fixedRate, fixedDC, overnightIndex)
MakeOIS
- ql.MakeOIS(swapTenor, overnightIndex, fixedRate)
可选参数:
fwdStart=Period(0, Days)
receiveFixed=True,
swapType=OvernightIndexedSwap.Payer
名义值=1.0
结算天数=2
effectiveDate=None
terminationDate=None
dateGenerationRule=DateGeneration.Backward
支付频率=每年
paymentAdjustmentConvention=Following
支付延迟=0
支付日历=None
endOfMonth=True
fixedLegDayCount=None
隔夜利率利差=0.0
discountingTermStructure=None
telescopicValueDates=False
定价引擎=无
swapTenor = ql.Period('1Y')
overnightIndex = ql.Eonia()
fixedRate = 0.01
ois_swap = ql.MakeOIS(swapTenor, overnightIndex, fixedRate)
非标准互换
- ql.NonstandardSwap(swapType, fixedNominal, floatingNominal, fixedSchedule, fixedRate, fixedDayCount, floatingSchedule, iborIndex, gearing, spread, floatDayCount)
可选参数:
intermediateCapitalExchange = False
finalCapitalExchange = False,
paymentConvention = None
swapType = ql.VanillaSwap.Payer
fixedNominal = [100, 100]
floatingNominal = [100] * 4
fixedSchedule = ql.MakeSchedule(ql.Date(15,6,2020), ql.Date(15,6,2022), ql.Period('1Y'))
fixedRate = [0.02] * 2
fixedDayCount = ql.Thirty360()
floatingSchedule = ql.MakeSchedule(ql.Date(15,6,2020), ql.Date(15,6,2022), ql.Period('6M'))
iborIndex = ql.Euribor6M()
gearing = [1.] * 4
spread = [0.] * 4
floatDayCount = iborIndex.dayCounter()
nonstandardSwap = ql.NonstandardSwap(
swapType, fixedNominal, floatingNominal,
fixedSchedule, fixedRate, fixedDayCount,
floatingSchedule, iborIndex, gearing, spread, floatDayCount)