Example #1
0
def main():

    # Test case: Test the ABS model with a single process and 1500 loans on pro rata mode
    # Assets are from 'Loans.csv'
    # Liabilities:
    #   tranches.addTranche('StandardTranche', '0.8', '0.05', '1')
    #   tranches.addTranche('StandardTranche', '0.2', '0.08', '2')
    # Run the Waterfall 1 time to get a CSV output of the transactions
    #   on 'liabilities_prorata_1500loans.csv'
    ###############################################
    # Set logging level
    logging.getLogger().setLevel(logging.DEBUG)

    ###############################################
    loans1500 = LoanPool(
        loansImportCSV('MA4176_31418DUA8_COLLAT_ISSUANCE.csv'))
    tranches = StructuredSecurities(loans1500.totalPrincipal())
    tranches.addTranche('StandardTranche', '0.5', '0.02500', '1')
    tranches.addTranche('StandardTranche', '0.5', '0.03125', '2')
    print(f'Pro Rata mode:')
    tranches.setMode('Pro Rata')

    ledger, tranchesMetrics = simulateWaterfall(loans1500, tranches, 1)
    spvExportCSV(ledger, 'liabilities_prorata_FannieMaeData.csv')
    for tranche in tranches.tranches:
        print(f'{tranche}\n'
              f' IRR = {tranche.r}\n'
              f' DIRR = {tranche.dirr}\n'
              f' DIRR(letter) = {tranche.dirrLetter}\n'
              f' AL = {tranche.al}')
Example #2
0
def main():

    # Test case: Test the ABS model with a single process and 2 loans on sequential mode
    # Assets are:
    #   AutoLoan(notional=100000, rate=0.08, term=10, car=Car(100000))
    #   AutoLoan(notional=75000, rate=0.06, term=8, car=Car(75000))
    # Liabilities:
    #   tranches.addTranche('StandardTranche', '0.8', '0.05', '1')
    #   tranches.addTranche('StandardTranche', '0.2', '0.08', '2')
    # Run the Waterfall 1 time to get a CSV output of the transactions
    #   on 'liabilities_sequential_2loans.csv'
    ###############################################
    # Set logging level
    logging.getLogger().setLevel(logging.DEBUG)

    ###############################################
    loan1 = AutoLoan(notional=100000, rate=0.08, term=10, car=Car(100000))
    loan2 = AutoLoan(notional=75000, rate=0.06, term=8, car=Car(75000))
    loans = LoanPool([loan1, loan2])
    tranches = StructuredSecurities(loans.totalPrincipal())
    tranches.addTranche('StandardTranche', '0.8', '0.05', '1')
    tranches.addTranche('StandardTranche', '0.2', '0.08', '2')
    tranches.setMode('Sequential')

    ledger, tranchesMetrics = simulateWaterfall(loans, tranches, 1)
    spvExportCSV(ledger, 'liabilities_sequential_2loans.csv')
    for tranche in tranches.tranches:
        print(f'{tranche}\n'
              f' IRR = {tranche.r}\n'
              f' DIRR = {tranche.dirr}\n'
              f' DIRR(letter) = {tranche.dirrLetter}\n'
              f' AL = {tranche.al}')
def main():

    # Test case: Test the ABS model with a single process and 1500 loans on sequential mode
    # Assets are from 'Loans.csv'
    # Liabilities:
    #   tranches.addTranche('StandardTranche', '0.8', '0.05', '1')
    #   tranches.addTranche('StandardTranche', '0.2', '0.08', '2')
    # Run the Waterfall 1 time to get a CSV output of the transactions
    #   on 'liabilities_sequential_1500loans.csv'
    ###############################################
    # Set logging level
    logging.getLogger().setLevel(logging.DEBUG)

    ###############################################
    loans1500 = LoanPool(loansImportCSV('Loans.csv'))
    tranches = StructuredSecurities(loans1500.totalPrincipal())
    tranches.addTranche('StandardTranche', '0.8', '0.05', '1')
    tranches.addTranche('StandardTranche', '0.2', '0.08', '2')
    tranches.setMode('Sequential')

    ledger, tranchesMetrics = simulateWaterfall(loans1500, tranches, 1)
    spvExportCSV(ledger, 'liabilities_sequential_1500loans.csv')
    for tranche in tranches.tranches:
        print(f'{tranche}\n'
              f' IRR = {tranche.r}\n'
              f' DIRR = {tranche.dirr}\n'
              f' DIRR(letter) = {tranche.dirrLetter}\n'
              f' AL = {tranche.al}')
def main():

    # Test case: Test the ABS model with Monte Carlo on 1500 loans, on multiprocessing, sequential mode
    # Assets are from Loans.csv
    # Liabilities: originally start with these below tranches
    #   tranches.addTranche('StandardTranche', '0.8', '0.05', '1')
    #   tranches.addTranche('StandardTranche', '0.2', '0.08', '2')
    # Optimize tranches' rates based on a yield curve to get diff = 50 bps or less.
    # Print optimized rate on screen and run the Waterfall 1 time to get a CSV output of the transactions
    #   on 'liabilities_sequential_montecarlo_multiprocessing_1500loans.csv'
    ###############################################
    # Set logging level
    logging.getLogger().setLevel(logging.DEBUG)

    random.seed(1)
    ###############################################
    loansFannie = LoanPool(
        loansImportCSV('MA4176_31418DUA8_COLLAT_ISSUANCE.csv'))
    tranches = StructuredSecurities(loansFannie.totalPrincipal())
    tranches.addTranche('StandardTranche', '0.5', '0.02500', '1')
    tranches.addTranche('StandardTranche', '0.5', '0.03125', '2')
    tranches.setMode('Sequential')

    newTrancheRate = runMonte(loansFannie, tranches, 0.005, 2000, 20)
    print(f'My new tranche rate is = {newTrancheRate}')

    # Run the Waterfall once to generate CSV output of transactions.
    tranches = StructuredSecurities(loansFannie.totalPrincipal())
    tranches.addTranche('StandardTranche', '0.5', newTrancheRate[0], '1')
    tranches.addTranche('StandardTranche', '0.5', newTrancheRate[1], '2')
    tranches.setMode('Sequential')
    ledger, tranchesMetrics = simulateWaterfall(loansFannie, tranches, 1)
    spvExportCSV(
        ledger,
        'liabilities_sequential_montecarlo_multiprocessing_FannieMae.csv')
    for tranche in tranches.tranches:
        print(f'{tranche}\n'
              f' IRR = {tranche.r}\n'
              f' DIRR = {tranche.dirr}\n'
              f' DIRR(letter) = {tranche.dirrLetter}\n'
              f' AL = {tranche.al}')
Example #5
0
def main():

    # Test case: Test the ABS model with Monte Carlo on 1500 loans on single process, pro rata mode
    # Assets are from Loans.csv
    # Liabilities: originally start with these below tranches
    #   tranches.addTranche('StandardTranche', '0.8', '0.05', '1')
    #   tranches.addTranche('StandardTranche', '0.2', '0.08', '2')
    # nsim = 10
    # numProcesses = 1
    # Optimize tranches' rates based on a yield curve to get diff = 1000 bps or less.
    # Print optimized rate on screen and run the Waterfall 1 time to get a CSV output of the transactions
    #   on 'liabilities_prorata_montecarlo_singleprocess_1500loans.csv'
    ###############################################
    # Set logging level
    logging.getLogger().setLevel(logging.DEBUG)

    ###############################################
    loans1500 = LoanPool(loansImportCSV('Loans.csv'))
    tranches = StructuredSecurities(loans1500.totalPrincipal())
    tranches.addTranche('StandardTranche', '0.8', '0.05', '1')
    tranches.addTranche('StandardTranche', '0.2', '0.08', '2')
    tranches.setMode('Pro Rata')

    newTrancheRate = runMonte(loans1500, tranches, 0.1, 10, 1)
    print(f'My new tranche rate is = {newTrancheRate}')

    # Run the Waterfall once to generate CSV output of transactions.
    tranches = StructuredSecurities(loans1500.totalPrincipal())
    tranches.addTranche('StandardTranche', '0.8', newTrancheRate[0], '1')
    tranches.addTranche('StandardTranche', '0.2', newTrancheRate[1], '2')
    tranches.setMode('Pro Rata')
    ledger, tranchesMetrics = simulateWaterfall(loans1500, tranches, 1)
    spvExportCSV(ledger, 'liabilities_prorata_montecarlo_singleprocess_1500loans.csv')
    for tranche in tranches.tranches:
        print(f'{tranche}\n'
              f' IRR = {tranche.r}\n'
              f' DIRR = {tranche.dirr}\n'
              f' DIRR(letter) = {tranche.dirrLetter}\n'
              f' AL = {tranche.al}')