private DiscountedCashFlow GetNetIncomeDiscountedCashFlow(CompanyValuationStatistics cvs, IncomeStatementCollection incProjections,
                                                                  decimal wacc, decimal terminalGrowth)
        {
            FreeCashFlowCollection fcfs     = _fcfMngr.CalculateFreeCashFlow(cvs.Symbol, cvs.Year, cvs.NoOfYears, incProjections);
            DiscountedCashFlow     dcf      = null;
            BalanceSheet           bs       = BalanceSheetBL.Instance.GetBalanceSheet(cvs.Symbol, cvs.Year);
            CompanyAnnualData      compData = CompanyAnnualDataBL.Instance.GetCompanyAnnual(cvs.Symbol, cvs.Year);

            if (fcfs != null)
            {
                dcf = new DiscountedCashFlow(cvs.Symbol, cvs.Year, fcfs, wacc, terminalGrowth);
                dcf.EnterpriseValue = 0;
                for (int i = 1; i < cvs.NoOfYears + 1; i++)
                {
                    decimal discountTo = (decimal)(Math.Pow((double)dcf.DiscountFactor, i));
                    dcf.EnterpriseValue += (dcf.FreeCashFlows[i - 1].NetIncomeCashFlow * discountTo);
                }

                dcf.EnterpriseValue += (dcf.TerminalValue * (decimal)(Math.Pow((double)dcf.DiscountFactor, dcf.FreeCashFlows.Count)));

                dcf.EquityValue = dcf.EnterpriseValue + bs.Cash - bs.Debt;

                dcf.StockValue = dcf.EquityValue / compData.SharesOutstanding;
            }

            return(dcf);
        }
        private CompanyFinancialStatistics GetFinancialStatistics(CompanyValuationStatistics cvs)
        {
            CompanyFinancialStatistics cfs = new CompanyFinancialStatistics(cvs.Symbol, new DateTime());

            FSFMngr().PopulateCompanyFinancialStatisticsFromStatements(cfs, cvs.AvgGrowthProjections.Find(cvs.Year),
                                                                       BalanceSheetBL.Instance.GetBalanceSheet(cvs.Symbol, cvs.Year),
                                                                       CompanyAnnualDataBL.Instance.GetCompanyAnnual(cvs.Symbol, cvs.Year));
            //FSFMngr().PopulateCompanyFinancialStatisticsFromYahooApi(cfs);

            return(cfs);
        }
        private CompanyValuationStatistics GetCompanyValuationStatistics(Company comp)
        {
            IncomeStatementProjectionBL incProjectionBL = new IncomeStatementProjectionBL();

            CompanyValuationStatistics cvs = new CompanyValuationStatistics();

            cvs.Symbol                 = comp.Symbol;
            cvs.Year                   = IncomeStatementBL.Instance.GetLastYear(comp.Symbol);
            cvs.NoOfYears              = 5;
            cvs.CompanyName            = comp.CompanyName;
            cvs.NoGrowthProjections    = incProjectionBL.ProjectIncomeStatementsNoRevenueGrowth(comp.Symbol, cvs.Year, cvs.NoOfYears);
            cvs.AvgGrowthProjections   = incProjectionBL.ProjectIncomeStatementsAvgRevenueGrowth(comp.Symbol, cvs.Year, cvs.NoOfYears);
            cvs.DecayGrowthProjections = incProjectionBL.ProjectIncomeStatementsDecayRevenueGrowth(comp.Symbol, cvs.Year, cvs.NoOfYears, (decimal) - 0.05);
            DCFMngr().GetDiscountedCashFlows(cvs);

            return(cvs);
        }
        public void GetDiscountedCashFlows(CompanyValuationStatistics cvs)
        {
            for (int i = -2; i < 3; i++)
            {
                decimal terminalGrowth = (decimal)(i * 2) / 100;
                for (int j = 6; j < 20; j++)
                {
                    decimal wacc = (decimal)j / 100;
                    cvs.NopDcfsNoGrowth.Add(GetNopDiscountedCashFlow(cvs, cvs.NoGrowthProjections, wacc, terminalGrowth));
                    cvs.NopDcfsAvgGrowth.Add(GetNopDiscountedCashFlow(cvs, cvs.AvgGrowthProjections, wacc, terminalGrowth));
                    cvs.NopDcfsDecayGrowth.Add(GetNopDiscountedCashFlow(cvs, cvs.DecayGrowthProjections, wacc, terminalGrowth));

                    cvs.NetIncomeDcfsNoGrowth.Add(GetNetIncomeDiscountedCashFlow(cvs, cvs.NoGrowthProjections, wacc, terminalGrowth));
                    cvs.NetIncomeDcfsAvgGrowth.Add(GetNetIncomeDiscountedCashFlow(cvs, cvs.AvgGrowthProjections, wacc, terminalGrowth));
                    cvs.NetIncomeDcfsDecayGrowth.Add(GetNetIncomeDiscountedCashFlow(cvs, cvs.DecayGrowthProjections, wacc, terminalGrowth));
                }
            }
        }