コード例 #1
0
def generate_cva_merton(Exposures, Z_M, rhos_merton, Q_default, name_saved_file=''):
    PD = Q_default(time_exposure)
    DiscountFactorXdefault = PD * discount_factor(time_exposure)

    @jit
    def calc_cva_merton(rho):
        result = zeros(Z_M.shape[0])
        for k in range(0, len(Exposures)):
            for t in range_exposure:
                result[k] = result[k] + DiscountFactorXdefault[t] * \
                                        sum(Exposures[k][t] * Merton(Z_M[k][t], rho, PD[t], tolerance=0.001))
        return result

    # it is faster with jit (but just a little bit)
    # def calc_cva_merton0(rho, Z_M=Z_M):
    #    weightsMerton = [[Merton(Z_M[k][t], rho, PD[t], tolerance=0.001)
    #       for t in range_exposure] for k in range_portfolio]
    #    resultsDWR = array([[sum(Z_M[k][t] * weightsMerton[k][t]) for t in range_exposure] for k in range_portfolio])
    #    return [sum(resultsDWR[k, :] * DiscountFactorXdefault) for k in range_portfolio]

    @jit
    def curve_cva(rhos):
        L = empty((len(rhos), Z_M.shape[0]))
        for r in range(0, len(rhos)):
            L[r, :] = calc_cva_merton(rhos[r])
        return L

    cva = curve_cva(rhos_merton)
    if name_saved_file != '':
        save_array(name_saved_file, cva)
    return array(cva)
コード例 #2
0
def generate_cva_indep(Exposures, Q_default, name_saved_file='', n_jobs=4):
    PD = Q_default(time_exposure)
    DiscountFactorXdefault = PD * discount_factor(time_exposure)

    ###################
    ### Compute cva
    ###################
    resultsDWR = mean(Exposures, axis=2)
    cva = Parallel(n_jobs=n_jobs, backend="threading")(
        delayed(sum)(resultsDWR[k, :] * DiscountFactorXdefault) for k in range(0, len(Exposures)))
    # cva = [sum(resultsDWR[k, :] * DiscountFactorXdefault) for k in range(0, len(Exposures))]
    if name_saved_file != '':
        save_array(name_saved_file, cva)
    return array(cva)
コード例 #3
0
def generate_cva_twofactors_hull(Exposures, Z_M1, Z_M2, bs1, bs2, Q_default, name_saved_file='', max_iter=100000,
                                 tol=1e-3, n_jobs=4):
    # cva = [Parallel(n_jobs=n_jobs, backend="threading")(delayed(generate_cva_generalized_hull)
    #                                                     (Exposures, b1 * Z_M1 + b2 * Z_M2, Q_default, max_iter=max_iter,
    #                                                      tol=tol, threading=False)
    #                                                     for b2 in bs2)
    #        for b1 in bs1]

    cva = Parallel(n_jobs=n_jobs, backend="threading")(delayed(_partial_cva_twofactors_hull)
                                                       (Exposures, Z_M1, Z_M2, b1, bs2, Q_default, name_saved_file='',
                                                        max_iter=100000, tol=1e-3)
                                                       for b1 in bs1)

    # cva = [[generate_cva_generalized_hull(Exposures, b1 * Z_M1 + b2 * Z_M2,Q_default, max_iter=max_iter, tol=tol)
    #         for b2 in bs2] for b1 in bs1]
    if name_saved_file != '':
        save_array(name_saved_file, cva)
    return array(cva)
コード例 #4
0
def generate_cvas(model):

    ############################
    ### Independent
    ############################

    if model == 1:
        generate_cva_indep(Exposures=exposures['exposures'], Q_default=Q_default, name_saved_file='cva_indep')
        generate_cva_twofactors_hull(Exposures=exposures['exposures'],
                                     Z_M1=market_factor['Z_S'], bs1=bS,
                                     Z_M2=market_factor['Z_V'], bs2=bV,
                                     Q_default=Q_default, name_saved_file='cva_hull', max_iter=100000, tol=1e-3)
    if model == 2:
        cva_indep_shift_S_pos = generate_cva_indep(Exposures=exposures['exposures_shift_S_pos'], Q_default=Q_default)
        cva_indep_shift_S_neg = generate_cva_indep(Exposures=exposures['exposures_shift_S_neg'], Q_default=Q_default)
        delta_S_cva_indep = (cva_indep_shift_S_pos - cva_indep_shift_S_neg) / (2 * shift_S)
        save_array('delta_S_cva_indep', delta_S_cva_indep)

    if model == 3:
        cva_indep_shift_intensity_pos = generate_cva_indep(Exposures=exposures['exposures'],
                                                           Q_default=Q_default_shift_pos)
        cva_indep_shift_intensity_neg = generate_cva_indep(Exposures=exposures['exposures'],
                                                           Q_default=Q_default_shift_neg)
        delta_intensity_cva_indep = (cva_indep_shift_intensity_pos - cva_indep_shift_intensity_neg) / (
            2 * shift_intensity)
        save_array('delta_intensity_cva_indep', delta_intensity_cva_indep)
    # delta_S
    if model == 4:
        cva_hull_shift_S_pos = generate_cva_twofactors_hull(Exposures=exposures['exposures_shift_S_pos'],
                                                            Z_M1=market_factor['Z_S_shift_S_pos'], bs1=bS,
                                                            Z_M2=market_factor['Z_V_shift_S_pos'], bs2=bV,
                                                            Q_default=Q_default, max_iter=100000, tol=1e-3)
        cva_hull_shift_S_neg = generate_cva_twofactors_hull(Exposures=exposures['exposures_shift_S_neg'],
                                                            Z_M1=market_factor['Z_S_shift_S_neg'], bs1=bS,
                                                            Z_M2=market_factor['Z_V_shift_S_neg'], bs2=bV,
                                                            Q_default=Q_default, max_iter=100000, tol=1e-3)
        delta_S_cva_hull = (cva_hull_shift_S_pos - cva_hull_shift_S_neg) / (2 * shift_S)
        save_array('delta_S_cva_hull', delta_S_cva_hull)

    # delta_intensity
    if model == 5:
        cva_hull_shift_intensity_pos = generate_cva_twofactors_hull(Exposures=exposures['exposures'],
                                                                    Z_M1=market_factor['Z_S'], bs1=bS,
                                                                    Z_M2=market_factor['Z_V'], bs2=bV,
                                                                    Q_default=Q_default_shift_pos, max_iter=100000,
                                                                    tol=1e-3)

        cva_hull_shift_intensity_neg = generate_cva_twofactors_hull(Exposures=exposures['exposures'],
                                                                    Z_M1=market_factor['Z_S'], bs1=bS,
                                                                    Z_M2=market_factor['Z_V'], bs2=bV,
                                                                    Q_default=Q_default_shift_neg, max_iter=100000,
                                                                    tol=1e-3)
        delta_intensity_cva_hull = (cva_hull_shift_intensity_pos - cva_hull_shift_intensity_neg) / (2 * shift_intensity)
        save_array('delta_intensity_cva_hull', delta_intensity_cva_hull)
コード例 #5
0
def generate_cva_hull(Exposures, Z_M, bs_hull, Q_default, name_saved_file='', max_iter=100000, tol=1e-3):
    cva = [generate_cva_generalized_hull(Exposures, b * Z_M, Q_default, max_iter=max_iter, tol=tol, threading=True)
           for b in bs_hull]
    if name_saved_file != '':
        save_array(name_saved_file, cva)
    return array(cva)
コード例 #6
0
ファイル: simulations.py プロジェクト: NsanDev/MasterProject
def launch_simulation(S_ini=S0, delta_ini=delta0, shift_str=''):
    ###################
    ### Initialize
    ###################

    model = load_model()
    book, time_exposure, timeline, contract_names = portfolio()
    index_exposure = [list(timeline).index(t) for t in time_exposure]
    range_exposure = range(0, len(time_exposure))

    range_book = range(0, len(contract_names))
    range_timeline = range(0, len(timeline))

    ###################
    ### Simulation
    ###################

    # market sensitivities
    simulated_paths = simulate_path(timeline,
                                    S_ini=S_ini,
                                    delta_ini=delta_ini,
                                    reset_seed=True)
    S = simulated_paths[0]

    convenience_yield = simulated_paths[1]

    ###################
    ### Portfolio
    ###################

    contracts_alltimes = array([[
        instrument(timeline[t], S[t, :], convenience_yield[t, :])
        for t in range_timeline
    ] for instrument in book])
    contract_ini = array(
        [instrument(0, S_ini, delta_ini) for instrument in book])
    contracts = contracts_alltimes[:, index_exposure, :]
    ###################
    ### Exposure
    ###################

    exposure_alltimes = exposure_function(contracts_alltimes)
    exposures = exposure_alltimes[:, index_exposure, :]

    ###################
    ### Market Factor for hull()
    ###################

    Z_S = S / S_ini
    Z_V = array(
        [contracts_alltimes[k] / abs(contract_ini[k]) for k in range_book])
    Z_E = array(
        [exposure_alltimes[k] / abs(contract_ini[k]) for k in range_book])

    save_array('spot_prices' + shift_str, S)
    save_array('convenience_yields' + shift_str, convenience_yield)
    save_array('contracts' + shift_str, contracts)
    save_array('exposures' + shift_str, exposures)
    # save_array('contracts_alltimes'+shift_str, contracts_alltimes)
    # save_array('exposures_alltimes'+shift_str, exposure_alltimes)
    save_array('Z_S' + shift_str, Z_S)
    save_array('Z_V' + shift_str, Z_V)
    save_array('Z_E' + shift_str, Z_E)

    save_array('timeline', timeline)
    save_array('time_exposure', time_exposure)
    save_array('contract_names', contract_names)