コード例 #1
0
        public GMWBRider(Person person, Annuities annuity)
        {
            int growthYears = Math.Max(accumulation, person.retirementDate - DateTime.Now.Year);

            if (annuity.annuityTime == AnnuityTime.Immediate)
            {
                growthYears = 0;
            }

            benifitBase = FutureValue.GetFutureValue(annuity.initialAmount, rollUp, growthYears);

            annualIncome = (benifitBase * minimumPercentage) * (1 - fee);
            annuity.distributionsBeforeTax = annualIncome;
            annuity.gmwb = true;

            annuity.yearsOfPayments = (int)Math.Round(benifitBase / annualIncome);

            if (annuity.annuityTax == AnnuityTax.Qualified)
            {
                annuity.exclusionRatio = annuity.initialAmount / benifitBase;
            }
            else
            {
                annuity.exclusionRatio = 0;
            }
        }
コード例 #2
0
        public GLWBRider(Person person, Annuities annuity)
        {
            annuity.glwb = true;

            if (annuity.annuityTime == AnnuityTime.Immediate)
            {
                growthYears = 0;
                benifitBase = annuity.initialAmount;
            }
            else
            {
                growthYears = Math.Max(accumulation, person.retirementDate - DateTime.Now.Year);
                benifitBase = FutureValue.GetFutureValue(annuity.initialAmount, rollUp, growthYears);
            }

            //Limits should be imposed on the user to not allow glwb if they are out of the range annuities allow
            try
            {
                lifetimeWithdrawlRate = (LifeExpectancy.glwbTable[person.age + growthYears]);
            }
            catch (IndexOutOfRangeException exception)
            {
                Console.WriteLine(exception);
                lifetimeWithdrawlRate = 0;
            }

            annualIncome = (lifetimeWithdrawlRate * benifitBase) * (1 - fee);
            annuity.distributionsBeforeTax = annualIncome;

            if (annuity.annuityTax == AnnuityTax.Qualified)
            {
                annuity.exclusionRatio = annuity.initialAmount / benifitBase;
            }
            else
            {
                annuity.exclusionRatio = 0;
            }
        }
コード例 #3
0
        //calculates how much money a variable annuity will payout for a given year
        private List <double> VariableCalc(double carloRate)
        {
            List <double> currentYear   = new List <double>();
            double        currentAmount = initialAmount;

            lumpSumAtRetirement = FutureValue.GetFutureValue(initialAmount, carloRate, yearsToRetirement);
            currentYear.Add(initialAmount);
            if (annuityTime == AnnuityTime.Deferred)
            {
                for (int j = 0; j < yearsToRetirement; j++)
                {
                    currentAmount += lumpSumAtRetirement / yearsToRetirement;
                    currentYear.Add(currentAmount);
                }
            }
            distributionsBeforeTax = PaymentCalculator.GetPayments(currentAmount, carloRate, yearsOfPayments);
            if (glwb)
            {
                yearsOfPayments += 100;
            }
            for (int j = 0; j < yearsOfPayments; j++)
            {
                currentAmount += currentAmount * carloRate;
                if (gmwb || glwb)
                {
                    currentAmount -= distributionsBeforeTax;
                    currentAmount  = Math.Max((currentAmount - distributionsBeforeTax), (rider.annualIncome));
                }
                else
                {
                    currentAmount -= distributionsBeforeTax;
                    currentAmount  = Math.Max(0, currentAmount);
                }
                currentYear.Add(currentAmount);
            }
            return(currentYear);
        }
コード例 #4
0
 public void Deferred()
 {
     yearsOfPayments     = Math.Min((int)annuityLife, (int)retireLife);
     lumpSumAtRetirement = FutureValue.GetFutureValue(initialAmount, rate, accumulationYears);
 }