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