示例#1
0
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)
示例#2
0
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)