def buildLiborCurve(valuationDate): depoDCCType = FinDayCountTypes.THIRTY_E_360_ISDA depos = [] spotDays = 2 settlementDate = valuationDate.addWorkDays(spotDays) depositRate = 0.050 maturityDate = settlementDate.addMonths(1) depo1 = FinLiborDeposit( settlementDate, maturityDate, depositRate, depoDCCType) maturityDate = settlementDate.addMonths(3) depo2 = FinLiborDeposit( settlementDate, maturityDate, depositRate, depoDCCType) maturityDate = settlementDate.addMonths(6) depo3 = FinLiborDeposit( settlementDate, maturityDate, depositRate, depoDCCType) maturityDate = settlementDate.addMonths(9) depo4 = FinLiborDeposit( settlementDate, maturityDate, depositRate, depoDCCType) maturityDate = settlementDate.addMonths(12) depo5 = FinLiborDeposit( settlementDate, maturityDate, depositRate, depoDCCType) depos.append(depo1) depos.append(depo2) depos.append(depo3) depos.append(depo4) depos.append(depo5) fras = [] fixedDCCType = FinDayCountTypes.ACT_365_ISDA fixedFreqType = FinFrequencyTypes.SEMI_ANNUAL swaps = [] swapRate = 0.05 maturityDate = settlementDate.addMonths(24) swap1 = FinLiborSwap( settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap1) maturityDate = settlementDate.addMonths(36) swap2 = FinLiborSwap( settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap2) maturityDate = settlementDate.addMonths(48) swap3 = FinLiborSwap( settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap3) maturityDate = settlementDate.addMonths(60) swap4 = FinLiborSwap( settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap4) maturityDate = settlementDate.addMonths(72) swap5 = FinLiborSwap( settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap5) maturityDate = settlementDate.addMonths(84) swap6 = FinLiborSwap( settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap6) maturityDate = settlementDate.addMonths(96) swap7 = FinLiborSwap( settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap7) maturityDate = settlementDate.addMonths(108) swap8 = FinLiborSwap( settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap8) maturityDate = settlementDate.addMonths(120) swap9 = FinLiborSwap( settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap9) liborCurve = FinLiborCurve("USD_LIBOR", settlementDate, depos, fras, swaps) if 1 == 0: import numpy as np numSteps = 40 dt = 10 / numSteps times = np.linspace(0.0, 10.0, numSteps + 1) df0 = 1.0 for t in times[1:]: df1 = liborCurve.df(t) fwd = (df0 / df1 - 1.0) / dt print(t, df1, fwd) df0 = df1 return liborCurve
def test_FinLiborDepositsAndSwaps(): valuationDate = FinDate(2019, 9, 18) depoDCCType = FinDayCountTypes.THIRTY_E_360_ISDA depos = [] spotDays = 2 settlementDate = valuationDate.addWorkDays(spotDays) depositRate = 0.050 maturityDate = settlementDate.addMonths(1) depo = FinLiborDeposit(settlementDate, maturityDate, depositRate, depoDCCType) depos.append(depo) maturityDate = settlementDate.addMonths(2) depo = FinLiborDeposit(settlementDate, maturityDate, depositRate, depoDCCType) depos.append(depo) maturityDate = settlementDate.addMonths(3) depo = FinLiborDeposit(settlementDate, maturityDate, depositRate, depoDCCType) depos.append(depo) maturityDate = settlementDate.addMonths(6) depo = FinLiborDeposit(settlementDate, maturityDate, depositRate, depoDCCType) depos.append(depo) maturityDate = settlementDate.addMonths(9) depo = FinLiborDeposit(settlementDate, maturityDate, depositRate, depoDCCType) depos.append(depo) maturityDate = settlementDate.addMonths(12) depo = FinLiborDeposit(settlementDate, maturityDate, depositRate, depoDCCType) depos.append(depo) fras = [] swaps = [] fixedDCCType = FinDayCountTypes.ACT_365_ISDA fixedFreqType = FinFrequencyTypes.SEMI_ANNUAL swapRate = 0.05 maturityDate = settlementDate.addMonths(24) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(36) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(48) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(60) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(72) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(84) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(96) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(108) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(120) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(132) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(144) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(180) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(240) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(300) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) maturityDate = settlementDate.addMonths(360) swap = FinLiborSwap(settlementDate, maturityDate, swapRate, fixedFreqType, fixedDCCType) swaps.append(swap) liborCurve = FinLiborCurve("USD_LIBOR", settlementDate, depos, fras, swaps) df = liborCurve.df(settlementDate) testCases.header("SETTLEMENT DATE", "DF") testCases.print(str(settlementDate), df) testCases.header("DATE", "DF") for deposit in depos: df = liborCurve.df(deposit._maturityDate) testCases.print(str(deposit._maturityDate), df) for swap in swaps: df = liborCurve.df(deposit._maturityDate) testCases.print(str(deposit._maturityDate), df)