def buildFullIssuerCurve2(mktSpreadBump, irBump): # https://www.markit.com/markit.jsp?jsppage=pv.jsp # YIELD CURVE 20 August 2020 SNAP AT 1600 m = 1.0 valuation_date = Date(24, 8, 2020) settlement_date = Date(24, 8, 2020) dcType = DayCountTypes.ACT_360 depos = [] maturity_date = settlement_date.add_months(1) depo1 = IborDeposit(settlement_date, maturity_date, m * 0.001709, dcType) maturity_date = settlement_date.add_months(2) depo2 = IborDeposit(settlement_date, maturity_date, m * 0.002123, dcType) maturity_date = settlement_date.add_months(3) depo3 = IborDeposit(settlement_date, maturity_date, m * 0.002469, dcType) maturity_date = settlement_date.add_months(6) depo4 = IborDeposit(settlement_date, maturity_date, m * 0.003045, dcType) maturity_date = settlement_date.add_months(12) depo5 = IborDeposit(settlement_date, maturity_date, m * 0.004449, dcType) depos.append(depo1) depos.append(depo2) depos.append(depo3) depos.append(depo4) depos.append(depo5) swaps = [] dcType = DayCountTypes.THIRTY_E_360_ISDA fixedFreq = FrequencyTypes.SEMI_ANNUAL maturity_date = settlement_date.add_months(24) swap1 = IborSwap(settlement_date, maturity_date, SwapTypes.PAY, m * 0.002155 + irBump, fixedFreq, dcType) swaps.append(swap1) maturity_date = settlement_date.add_months(36) swap2 = IborSwap(settlement_date, maturity_date, SwapTypes.PAY, m * 0.002305 + irBump, fixedFreq, dcType) swaps.append(swap2) maturity_date = settlement_date.add_months(48) swap3 = IborSwap(settlement_date, maturity_date, SwapTypes.PAY, m * 0.002665 + irBump, fixedFreq, dcType) swaps.append(swap3) maturity_date = settlement_date.add_months(60) swap4 = IborSwap(settlement_date, maturity_date, SwapTypes.PAY, m * 0.003290 + irBump, fixedFreq, dcType) swaps.append(swap4) libor_curve = IborSingleCurve(valuation_date, depos, [], swaps) cdsCoupon = 0.01 + mktSpreadBump cdsMarketContracts = [] effective_date = Date(21, 8, 2020) cds = CDS(effective_date, "6M", cdsCoupon) cdsMarketContracts.append(cds) cds = CDS(effective_date, "1Y", cdsCoupon) cdsMarketContracts.append(cds) cds = CDS(effective_date, "2Y", cdsCoupon) cdsMarketContracts.append(cds) cds = CDS(effective_date, "3Y", cdsCoupon) cdsMarketContracts.append(cds) cds = CDS(effective_date, "4Y", cdsCoupon) cdsMarketContracts.append(cds) cds = CDS(effective_date, "5Y", cdsCoupon) cdsMarketContracts.append(cds) cds = CDS(effective_date, "7Y", cdsCoupon) cdsMarketContracts.append(cds) cds = CDS(effective_date, "10Y", cdsCoupon) cdsMarketContracts.append(cds) recovery_rate = 0.40 issuer_curve = CDSCurve(settlement_date, cdsMarketContracts, libor_curve, recovery_rate) testCases.header("DATE", "DISCOUNT_FACTOR", "SURV_PROB") years = np.linspace(0.0, 10.0, 20) dates = settlement_date.add_years(years) for dt in dates: df = libor_curve.df(dt) q = issuer_curve.survival_prob(dt) testCases.print("%16s" % dt, "%12.8f" % df, "%12.8f" % q) return libor_curve, issuer_curve
def test_FinCDSCurve(): curve_date = Date(20, 12, 2018) swaps = [] depos = [] fras = [] fixedDCC = DayCountTypes.ACT_365F fixedFreq = FrequencyTypes.SEMI_ANNUAL fixed_coupon = 0.05 for i in range(1, 11): maturity_date = curve_date.add_months(12 * i) swap = IborSwap(curve_date, maturity_date, SwapTypes.PAY, fixed_coupon, fixedFreq, fixedDCC) swaps.append(swap) libor_curve = IborSingleCurve(curve_date, depos, fras, swaps) cds_contracts = [] for i in range(1, 11): maturity_date = curve_date.add_months(12 * i) cds = CDS(curve_date, maturity_date, 0.005 + 0.001 * (i - 1)) cds_contracts.append(cds) issuer_curve = CDSCurve(curve_date, cds_contracts, libor_curve, recovery_rate=0.40, use_cache=False) testCases.header("T", "Q") n = len(issuer_curve._times) for i in range(0, n): testCases.print(issuer_curve._times[i], issuer_curve._values[i]) testCases.header("CONTRACT", "VALUE") for i in range(1, 11): maturity_date = curve_date.add_months(12 * i) cds = CDS(curve_date, maturity_date, 0.005 + 0.001 * (i - 1)) v = cds.value(curve_date, issuer_curve) testCases.print(i, v) if 1 == 0: x = [0.0, 1.2, 1.6, 1.7, 10.0] qs = issuer_curve.survival_prob(x) print("===>", qs) x = [0.3, 1.2, 1.6, 1.7, 10.0] xx = np.array(x) qs = issuer_curve.survival_prob(xx) print("===>", qs) x = [0.3, 1.2, 1.6, 1.7, 10.0] dfs = issuer_curve.df(x) print("===>", dfs) x = [0.3, 1.2, 1.6, 1.7, 10.0] xx = np.array(x) dfs = issuer_curve.df(xx) print("===>", dfs)