public SlopeInfo(List <ExtractedValue> extractedValues)
        {
            var calculus  = new MathCalculus();
            var trendline = new Trendline();

            if (extractedValues.Count != 0)
            {
                NominalValues           = extractedValues;
                NominalTrendline        = trendline.GetTrendline(extractedValues);
                Growth                  = calculus.CalculateGrowth(extractedValues);
                GrowthTrendline         = trendline.GetTrendline(Growth);
                NominalMedian           = calculus.CalculateMedian(extractedValues);
                GrowthMedian            = calculus.CalculateMedian(Growth);
                NominalDeviation        = calculus.CalculateDeviation(extractedValues);
                GrowthDeviation         = calculus.CalculateDeviation(Growth);
                LastThreeYearsGrowth    = calculus.CalculateLastThreeYearsGrowth(Growth);
                LastThreeYearsTrendLine = trendline.GetTrendline(LastThreeYearsGrowth);
                LastFiveYearsGrowth     = calculus.CalculateLastFiveYearsGrowth(extractedValues);
                LastTenYearsGrowth      = calculus.CalculateLastTenYearsGrowth(extractedValues);
            }
        }
Beispiel #2
0
        public CompanyGrowthPrediction GetFutureValues(Guid companyId)
        {
            var companyInfo = _dao.GetCompanyInfo(companyId);


            var valuesList           = new List <ExtractedValue>();
            var valuesFiveYearsList  = new List <ExtractedValue>();
            var valuesThreeYearsList = new List <ExtractedValue>();

            var incomeStatements   = companyInfo.IncomeStatements.OrderBy(x => x.Year);
            var cashFlowStatements = companyInfo.CashFlowStatements.OrderBy(x => x.Year);
            var balanceSheets      = companyInfo.BalanceSheets.OrderBy(x => x.Year);
            var KeyRatios          = companyInfo.KeyRatios.OrderBy(x => x.Year);

            //(Net Income -Dividends - Depreciation & Amortization) / (Shareholders' Equity + Long-Term Debt)

            foreach (var item in incomeStatements)
            {
                var values = new ExtractedValue();
                values.CompanyId = companyId;
                values.Year      = item.Year;

                var netIncome = item.NetIncome;
                if (netIncome == null)
                {
                    netIncome = 0;
                }

                var dividends = KeyRatios.Where(x => x.Year == item.Year).SingleOrDefault().DividendsPerShare;
                if (dividends == null)
                {
                    dividends = 0;
                }

                var depreciationAndAmortization = cashFlowStatements.Where(x => x.Year == item.Year).SingleOrDefault().DepreciationAmortization;
                if (depreciationAndAmortization == null)
                {
                    depreciationAndAmortization = 0;
                }

                var shareholdersEquity = balanceSheets.Where(x => x.Year == item.Year).SingleOrDefault().ShareholdersEquity;
                if (shareholdersEquity == null)
                {
                    shareholdersEquity = 0;
                }

                var longTermDebt = balanceSheets.Where(x => x.Year == item.Year).SingleOrDefault().LongTermDebt;
                if (longTermDebt == null)
                {
                    longTermDebt = 0;
                }

                var growthValue = (netIncome - (decimal)dividends - depreciationAndAmortization) / (shareholdersEquity + longTermDebt);
                values.Value = (double)growthValue;

                valuesList.Add(values);
                if (item.Year < incomeStatements.ToList()[(incomeStatements.ToList().Count - 5)].Year)
                {
                    valuesFiveYearsList.Add(values);
                }
                if (item.Year < incomeStatements.ToList()[(incomeStatements.ToList().Count - 3)].Year)
                {
                    valuesThreeYearsList.Add(values);
                }
            }

            var trendline       = new Trendline();
            var other           = new OtherTrendlines();
            var valuesTrendline = trendline.GetTrendline(valuesList);
            var slope           = valuesTrendline.Slope;
            var intercept       = valuesTrendline.Intercept;
            var estimatedValue  = (DateTime.Now.Year + 1) * slope + intercept;

            var valuesTrendline5Years = trendline.GetTrendline(valuesFiveYearsList);
            var slope5Years           = valuesTrendline.Slope;
            var intercept5Years       = valuesTrendline.Intercept;
            var estimatedValue5Years  = (DateTime.Now.Year + 1) * slope + intercept;

            var valuesTrendline3Years = trendline.GetTrendline(valuesThreeYearsList);
            var slope3Years           = valuesTrendline.Slope;
            var intercept3Years       = valuesTrendline.Intercept;
            var estimatedValue3Years  = (DateTime.Now.Year + 1) * slope + intercept;


            var estimatedValues = new CompanyGrowthPrediction();

            estimatedValues.CompanyId = companyId;
            estimatedValues.Year      = DateTime.Now.Year + 1;

            if (other.GetMinGrowthValue(valuesList, DateTime.Now.Year + 1) < other.GetMaxGrowthValue(valuesList, DateTime.Now.Year + 1))
            {
                estimatedValues.MinValue      = other.GetMinGrowthValue(valuesList, DateTime.Now.Year + 1);
                estimatedValues.EspectedValue = estimatedValue;
                estimatedValues.MaxValue      = other.GetMaxGrowthValue(valuesList, DateTime.Now.Year + 1);
            }
            else if (other.GetMinGrowthValue(valuesList, DateTime.Now.Year + 1) == other.GetMaxGrowthValue(valuesList, DateTime.Now.Year + 1))
            {
                estimatedValues.MinValue      = estimatedValue - estimatedValue * 0.1;
                estimatedValues.EspectedValue = estimatedValue;
                estimatedValues.MaxValue      = estimatedValue + estimatedValue * 0.1;
            }
            else
            {
                estimatedValues.MinValue      = other.GetMaxGrowthValue(valuesList, DateTime.Now.Year + 1);
                estimatedValues.EspectedValue = estimatedValue;
                estimatedValues.MaxValue      = other.GetMinGrowthValue(valuesList, DateTime.Now.Year + 1);
            }
            if (other.GetMinGrowthValue(valuesFiveYearsList, DateTime.Now.Year + 1) < other.GetMaxGrowthValue(valuesFiveYearsList, DateTime.Now.Year + 1))
            {
                estimatedValues.MinValueFiveYears      = other.GetMinGrowthValue(valuesFiveYearsList, DateTime.Now.Year + 1);
                estimatedValues.EspectedValueFiveYears = estimatedValue5Years;
                estimatedValues.MaxValueFiveYears      = other.GetMaxGrowthValue(valuesFiveYearsList, DateTime.Now.Year + 1);
            }
            else if (other.GetMinGrowthValue(valuesFiveYearsList, DateTime.Now.Year + 1) == other.GetMaxGrowthValue(valuesFiveYearsList, DateTime.Now.Year + 1))
            {
                estimatedValues.MinValueFiveYears      = estimatedValue - estimatedValue * 0.1;
                estimatedValues.EspectedValueFiveYears = estimatedValue5Years;
                estimatedValues.MaxValueFiveYears      = estimatedValue + estimatedValue * 0.1;
            }
            else
            {
                estimatedValues.MinValueFiveYears      = other.GetMaxGrowthValue(valuesFiveYearsList, DateTime.Now.Year + 1);
                estimatedValues.EspectedValueFiveYears = estimatedValue5Years;
                estimatedValues.MaxValueFiveYears      = other.GetMinGrowthValue(valuesFiveYearsList, DateTime.Now.Year + 1);
            }
            if (other.GetMinGrowthValue(valuesThreeYearsList, DateTime.Now.Year + 1) < other.GetMaxGrowthValue(valuesThreeYearsList, DateTime.Now.Year + 1))
            {
                estimatedValues.MinValueThreeYears      = other.GetMinGrowthValue(valuesThreeYearsList, DateTime.Now.Year + 1);
                estimatedValues.EspectedValueThreeYears = estimatedValue3Years;
                estimatedValues.MaxValueThreeYears      = other.GetMaxGrowthValue(valuesThreeYearsList, DateTime.Now.Year + 1);
            }
            else if (other.GetMinGrowthValue(valuesThreeYearsList, DateTime.Now.Year + 1) == other.GetMaxGrowthValue(valuesThreeYearsList, DateTime.Now.Year + 1))
            {
                estimatedValues.MinValueThreeYears      = estimatedValue - estimatedValue * 0.1;
                estimatedValues.EspectedValueThreeYears = estimatedValue3Years;
                estimatedValues.MaxValueThreeYears      = estimatedValue + estimatedValue * 0.1;
            }
            else
            {
                estimatedValues.MinValueThreeYears      = other.GetMaxGrowthValue(valuesThreeYearsList, DateTime.Now.Year + 1);
                estimatedValues.EspectedValueThreeYears = estimatedValue3Years;
                estimatedValues.MaxValueThreeYears      = other.GetMinGrowthValue(valuesThreeYearsList, DateTime.Now.Year + 1);
            }


            return(estimatedValues);
        }