Example #1
0
        private decimal CalculateGrossAmount(InvestmentParameter parameter)
        {
            var dailyInterestRate  = CalculateDailyRate(parameter);
            var periodInterestRate = Math.Pow(1 + dailyInterestRate, parameter.MaturityBusinessDays);

            return(parameter.InvestedAmount * (decimal)periodInterestRate);
        }
Example #2
0
        public InvestmentResult Simulate(InvestmentParameter parameter)
        {
            var taxRate          = GetTaxRate(parameter);
            var grossAmount      = CalculateGrossAmount(parameter);
            var investmentResult = new InvestmentResult(parameter, grossAmount, taxRate)
            {
                DailyGrossRateProfit = (decimal)CalculateDailyRate(parameter)
            };

            return(investmentResult);
        }
Example #3
0
        private decimal GetTaxRate(InvestmentParameter parameter)
        {
            const decimal AMOUNT_TAX_FREE = 0;

            if (parameter.IsTaxFree)
            {
                return(AMOUNT_TAX_FREE);
            }

            return(new IncomeTaxRules().GetIncomeTaxRate(parameter.MaturityTotalDays));
        }
 public InvestmentResult(InvestmentParameter investmentParameter, decimal grossAmount, decimal taxesRate)
 {
     InvestmentParameter = investmentParameter;
     GrossAmount         = Math.Round(grossAmount, DomainConstants.DEFAULT_ROUND);
     TaxesRate           = taxesRate;
 }
Example #5
0
        private double CalculatePeriod(InvestmentParameter parameter, double period)
        {
            var rate = Math.Pow(1 + parameter.YearlyInterestRate / 100, 1.0f / period) - 1;

            return(rate * parameter.Rate / 100);
        }
Example #6
0
 private double CalculateAnnualyRate(InvestmentParameter parameter)
 {
     return(CalculatePeriod(parameter, 1));
 }
Example #7
0
        private double CalculateMonthlyRate(InvestmentParameter parameter)
        {
            const int MONTHS_IN_YEAR = 12;

            return(CalculatePeriod(parameter, MONTHS_IN_YEAR));
        }
Example #8
0
 private double CalculateDailyRate(InvestmentParameter parameter)
 {
     return(CalculatePeriod(parameter, DomainConstants.BUSINESS_DAYS_PER_YEAR));
 }