Exemple #1
0
def my_calculation(arguments):
    """
    This function returns the assets after death for the given arguments.
    """
    args, rate_of_return, years_to_wait = arguments

    #
    # Calculate the most efficient Roth conversion amount.
    #
    most_assets = 0
    roth_conversion_amount = 0
    best_roth_conversion_amount = 0

    while True:
        simulation = Simulation(
            args.starting_balance_hsa,
            args.starting_balance_taxable,
            args.starting_balance_trad_401k,
            args.starting_balance_trad_ira,
            args.starting_balance_roth_401k,
            args.starting_balance_roth_ira,
            rate_of_return,
            years_to_wait,
            args.current_age,
            args.age_of_retirement,
            args.age_to_start_rmds,
            args.age_of_death,
            roth_conversion_amount,  # this is our variable
            args.income,
            args.yearly_income_raise,
            args.max_income,
            args.age_of_marriage,
            args.spending,
            args.contribution_limit_hsa,
            args.contribution_catch_up_amount_hsa,
            args.contribution_catch_up_age_hsa,
            args.contribution_limit_401k,
            args.contribution_limit_401k_total,
            args.contribution_catch_up_amount_401k,
            args.contribution_catch_up_age_401k,
            args.contribution_limit_ira,
            args.contribution_catch_up_amount_ira,
            args.contribution_catch_up_age_ira,
            args.do_mega_backdoor_roth,
            args.work_state,
            args.retirement_state,
            args.add_dependent,
            args.public_safety_employee,
            args.employer_match_401k,
            args.max_contribution_percentage_401k,
            args.employer_contribution_hsa)
        simulation.simulate()

        if round(simulation.get_total_assets_after_death(), 2) >= round(
                most_assets, 2):
            best_roth_conversion_amount = roth_conversion_amount
            most_assets = simulation.get_total_assets_after_death()

        traditional_money = (simulation.accounts.trad_401k.get_value() +
                             simulation.accounts.trad_ira.get_value())
        if round(traditional_money, 2) == 0:
            break
        roth_conversion_amount += args.roth_conversion_unit

    simulation = Simulation(
        args.starting_balance_hsa, args.starting_balance_taxable,
        args.starting_balance_trad_401k, args.starting_balance_trad_ira,
        args.starting_balance_roth_401k, args.starting_balance_roth_ira,
        rate_of_return, years_to_wait, args.current_age,
        args.age_of_retirement, args.age_to_start_rmds, args.age_of_death,
        best_roth_conversion_amount, args.income, args.yearly_income_raise,
        args.max_income, args.age_of_marriage, args.spending,
        args.contribution_limit_hsa, args.contribution_catch_up_amount_hsa,
        args.contribution_catch_up_age_hsa, args.contribution_limit_401k,
        args.contribution_limit_401k_total,
        args.contribution_catch_up_amount_401k,
        args.contribution_catch_up_age_401k, args.contribution_limit_ira,
        args.contribution_catch_up_amount_ira,
        args.contribution_catch_up_age_ira, args.do_mega_backdoor_roth,
        args.work_state, args.retirement_state, args.add_dependent,
        args.public_safety_employee, args.employer_match_401k,
        args.max_contribution_percentage_401k, args.employer_contribution_hsa)
    simulation.simulate()
    return simulation.get_total_assets_after_death()