Exemplo n.º 1
0
    def aggregate_results(self, user):
        t = Transaction()
        print('Start aggregating results')
        year_of_death = 2080
        current_pf_value = t.get_pf_value(timezone.now().date(), user)
        median_income, median_expense = self.calc_average(user)
        total_wealth = current_pf_value + self.get_current_wealth(user)

        timespan = 3*365
        from_date = (timezone.now() - datetime.timedelta(days=timespan)).date()
        to_date = timezone.now().date()
        # import pdb;pdb.set_trace()
        # print(from_date, to_date, timespan)
        # print(t.get_roi('All', from_date, to_date, user))
        current_interest_rate = math.pow(t.get_roi(from_date, to_date, user) + 1,
                                          Decimal(365/timespan))-1
        # Regression to mean
        # confidence for current_interest_rate as a predictor for future success
        confidence = 0.2
        # Average interest rate as more accurate predictor. Here Dow Jones performance between 1975 and 2013
        average_interest_rate = 0.088
        expected_interest_rate = (current_interest_rate - average_interest_rate) * confidence + average_interest_rate
        # Recalibrate expected interest rate for retirement time with new assumptions
        confidence = 0.1
        # Average interest rate as more accurate predictor. Here Dow Jones performance between 1975 and 2013
        average_interest_rate_retirement = 0.03
        expected_interest_rate_retirement = (current_interest_rate - average_interest_rate_retirement) * confidence + average_interest_rate_retirement
        delta_2015 = self.month_delta('2015-12-31')
        # print(delta_2015)
        wealth_in_2015, development = self.calc_wealth_next_month(self.get_current_wealth(user),
                                                                  current_pf_value,
                                                                  delta_2015,
                                                                  median_income,
                                                                  median_expense,
                                                                  expected_interest_rate, [])

        result_development = {}
        result_development['incomeexpense'] = median_income-median_expense
        result_development['interest'] = expected_interest_rate*100
        result_development['interest_retirement'] = expected_interest_rate_retirement*100
        for year_of_retirement in [2020, 2025, 2030]:
            # print(year_of_retirement)
            delta = self.month_delta(str(year_of_retirement)+'-12-31')
            wealth, development = self.calc_wealth_next_month(self.get_current_wealth(user),
                                                 current_pf_value,
                                                 delta,
                                                 median_income,
                                                 median_expense,
                                                 expected_interest_rate, [])

            # print('Wealth ok')
            # print(wealth, year_of_retirement)

            monthly_pension, development = self.mp(wealth,
                                      year_of_retirement,
                                      year_of_death,
                                      expected_interest_rate_retirement, development)
            # print('Pension ok', monthly_pension)
            short_development = []
            for num, item in enumerate(development):
                if num % (12*5) == 0:
                    short_development.append(item)

            result_development[year_of_retirement] = short_development
            result_development['wealth' + str(year_of_retirement)] = wealth
            result_development['pension' + str(year_of_retirement)] = monthly_pension
            #result.append({'text': 'Estimated wealth '+str(year_of_retirement), 'value': wealth})

            #result.append({'text': 'Retirement starting in '+str(year_of_retirement)+
            #                       ', monthly payments, when using the money until '+str(year_of_death)+
            #                       ', monthly payments:',
            #               'value': monthly_pension})
        return result_development