private decimal CalculateGrossAmount(InvestmentParameter parameter) { var dailyInterestRate = CalculateDailyRate(parameter); var periodInterestRate = Math.Pow(1 + dailyInterestRate, parameter.MaturityBusinessDays); return(parameter.InvestedAmount * (decimal)periodInterestRate); }
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); }
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; }
private double CalculatePeriod(InvestmentParameter parameter, double period) { var rate = Math.Pow(1 + parameter.YearlyInterestRate / 100, 1.0f / period) - 1; return(rate * parameter.Rate / 100); }
private double CalculateAnnualyRate(InvestmentParameter parameter) { return(CalculatePeriod(parameter, 1)); }
private double CalculateMonthlyRate(InvestmentParameter parameter) { const int MONTHS_IN_YEAR = 12; return(CalculatePeriod(parameter, MONTHS_IN_YEAR)); }
private double CalculateDailyRate(InvestmentParameter parameter) { return(CalculatePeriod(parameter, DomainConstants.BUSINESS_DAYS_PER_YEAR)); }