def testFinGBMProcess(): numAssets = 3 numPaths = 5 numTimeSteps = 1 t = 1.0 mus = 0.03 * np.ones(numAssets) stockPrices = 100.0 * np.ones(numAssets) volatilities = 0.2 * np.ones(numAssets) rho = 0.8 corrMatrix = corrMatrixGenerator(rho, numAssets) seed = 1912 _ = getPathsAssets(numAssets, numPaths, numTimeSteps, t, mus, stockPrices, volatilities, corrMatrix, seed)
def test_FinCDSBasket(): tradeDate = FinDate(2007, 3, 1) stepInDate = tradeDate.addDays(1) valuationDate = tradeDate.addDays(1) liborCurve = buildLiborCurve(tradeDate) basketMaturity = FinDate(2011, 12, 20) cdsIndex = FinCDSIndexPortfolio() ########################################################################## testCases.banner( "===================================================================") testCases.banner( "====================== INHOMOGENEOUS CURVE ==========================" ) testCases.banner( "===================================================================") numCredits = 5 spd3Y = 0.0012 spd5Y = 0.0025 spd7Y = 0.0034 spd10Y = 0.0046 testCases.header("LABELS", "VALUE") if 1 == 0: issuerCurves = loadHomogeneousSpreadCurves(valuationDate, liborCurve, spd3Y, spd5Y, spd7Y, spd10Y, numCredits) else: issuerCurves = loadHeterogeneousSpreadCurves(valuationDate, liborCurve) issuerCurves = issuerCurves[0:numCredits] intrinsicSpd = cdsIndex.intrinsicSpread( valuationDate, stepInDate, basketMaturity, issuerCurves) * 10000.0 testCases.print("INTRINSIC SPD BASKET MATURITY", intrinsicSpd) totalSpd = cdsIndex.totalSpread(valuationDate, stepInDate, basketMaturity, issuerCurves) * 10000.0 testCases.print("SUMMED UP SPD BASKET MATURITY", totalSpd) minSpd = cdsIndex.minSpread(valuationDate, stepInDate, basketMaturity, issuerCurves) * 10000.0 testCases.print("MINIMUM SPD BASKET MATURITY", minSpd) maxSpd = cdsIndex.maxSpread(valuationDate, stepInDate, basketMaturity, issuerCurves) * 10000.0 testCases.print("MAXIMUM SPD BASKET MATURITY", maxSpd) seed = 1967 basket = FinCDSBasket(valuationDate, basketMaturity) testCases.banner( "===================================================================") testCases.banner( "======================= GAUSSIAN COPULA ===========================") testCases.banner( "===================================================================") testCases.header("TIME", "Trials", "RHO", "NTD", "SPRD", "SPRD_HOMO") for ntd in range(1, numCredits + 1): for beta in [0.0, 0.5]: rho = beta * beta betaVector = np.ones(numCredits) * beta corrMatrix = corrMatrixGenerator(rho, numCredits) for numTrials in [1000]: # [1000,5000,10000,20000,50000,100000]: start = time.time() v1 = basket.valueGaussian_MC(valuationDate, ntd, issuerCurves, corrMatrix, liborCurve, numTrials, seed) v2 = basket.value1FGaussian_Homo(valuationDate, ntd, issuerCurves, betaVector, liborCurve) end = time.time() period = (end - start) testCases.print(period, numTrials, rho, ntd, v1[2] * 10000, v2[3] * 10000) testCases.banner( "===================================================================") testCases.banner( "==================== STUDENT'S-T CONVERGENCE ======================") testCases.banner( "===================================================================") testCases.header("TIME", "TRIALS", "RHO", "DOF", "NTD", "SPRD") for beta in [0.0, 0.5]: rho = beta**2 corrMatrix = corrMatrixGenerator(rho, numCredits) for ntd in range(1, numCredits + 1): for doF in [3, 10]: start = time.time() v = basket.valueStudentT_MC(valuationDate, ntd, issuerCurves, corrMatrix, doF, liborCurve, numTrials, seed) end = time.time() period = (end - start) testCases.print(period, numTrials, rho, doF, ntd, v[2] * 10000) start = time.time() v = basket.valueGaussian_MC(valuationDate, ntd, issuerCurves, corrMatrix, liborCurve, numTrials, seed) end = time.time() period = (end - start) testCases.print(period, numTrials, rho, "GC", ntd, v[2] * 10000) testCases.banner( "===================================================================") testCases.banner( "=================== STUDENT'S T WITH DOF = 5 ======================") testCases.banner( "===================================================================") doF = 5 testCases.header("TIME", "NUMTRIALS", "RHO", "NTD", "SPD") for beta in [0.0, 0.5]: rho = beta**2 corrMatrix = corrMatrixGenerator(rho, numCredits) for ntd in range(1, numCredits + 1): for numTrials in [1000]: start = time.time() v = basket.valueStudentT_MC(valuationDate, ntd, issuerCurves, corrMatrix, doF, liborCurve, numTrials, seed) end = time.time() period = (end - start) testCases.print(period, numTrials, rho, ntd, v[2] * 10000)