public RetirementPlan GetRetirementPlan() { var inputs = new RetirementPlanMainInputs { AnnualReturnMinRisk = 2.5, AnnualReturnEquitiesRisk = 7, InflationReturnMinRisk = 2, InflationEquities = 2, ReturnAfterInflationCAGRReturnMinRisk = 0.5, // calculated ReturnAfterInflationAnnualAverageEquities = 5, // calculated ReturnAfterInflationAnnualAverageMinRisk = 0.5, // calculated ReturnAfterInflationCAGREquities = 6.07, // calculated StandardDeviationMinRisk = 0, StandardDeviationEquities = 15, GrowthInAnnualContribution = 0, // not relevant for me CurrentAmount = 216385.01M, CurrentTotalContributions = 170211.24M, ThisYearsContributions = 30000M, MinRiskAllocation = 0, CurrentAge = 30, DeathAge = 90 }; var retirementPlan = new RetirementPlan(inputs); return(retirementPlan); }
public RetirementPlan(RetirementPlanMainInputs inputs) { var yearCount = 0; var currentAmount = inputs.CurrentAmount; for (var year = inputs.CurrentAge; year <= inputs.DeathAge; year++) { var thisYear = new Year(year, yearCount, currentAmount, inputs); Years.Add(thisYear); // setup next year yearCount++; currentAmount = thisYear.EndOfYearAmount; } }
public Year(int age, int yearCount, decimal priorYearAmount, RetirementPlanMainInputs inputs) { Age = age; YearCount = yearCount; PriorYearAmount = priorYearAmount; AnnualContributions = inputs.ThisYearsContributions; // Calculated StartOfYearAmount = PriorYearAmount + AnnualContributions; MinRiskAllocationPercent = inputs.MinRiskAllocation; MinRiskAllocationAmount = StartOfYearAmount * (inputs.MinRiskAllocation / 100); EquityRiskAllocationPercent = 100M - inputs.MinRiskAllocation; EquityRiskAllocationAmount = StartOfYearAmount * (EquityRiskAllocationPercent / 100); TotalContribution = inputs.CurrentTotalContributions + AnnualContributions; MinRiskReturn = inputs.ReturnAfterInflationAnnualAverageMinRisk; EquityRiskReturn = GetEquityReturnPercentage(inputs.ReturnAfterInflationAnnualAverageEquities, inputs.StandardDeviationEquities); InvestmentReturn = (MinRiskAllocationAmount * (decimal)MinRiskReturn) + (EquityRiskAllocationAmount * ((decimal)EquityRiskReturn / 100)); EndOfYearAmount = StartOfYearAmount + InvestmentReturn; }