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); }
public DiscountedCashFlow(string symbol, int year, FreeCashFlowCollection ffcf, decimal wacc, decimal growth) { this._SYMBOL = symbol; this._YEAR = year; this._freeCashFlows = ffcf; this._WACC = wacc; this._terminalGrowth = growth; }
public FreeCashFlowCollection CalculateFreeCashFlow(string symbol, int year, int yrsToProject, IncomeStatementCollection incomeStatementProjection) { FreeCashFlowCollection fcfs = null; MarketParameters mktParms = MarketParametersBL.Instance.GetMarketParameters(); BalanceSheetProjectionBL bsProjectionBL = new BalanceSheetProjectionBL(); BalanceSheetCollection bsProjections = bsProjectionBL.ProjectBalanceSheets(symbol, year, yrsToProject, incomeStatementProjection); if (incomeStatementProjection != null && bsProjections != null) { fcfs = new FreeCashFlowCollection(); for (int i = year + 1; i < year + yrsToProject + 1; i++) { IncomeStatement inc = incomeStatementProjection.Find(i); BalanceSheet bs = bsProjections.Find(i); BalanceSheet lastYrBs = bsProjections.Find(i - 1); if (inc != null && bs != null) { fcfs.Add(new FreeCashFlow( symbol, i, inc.NOP(mktParms.TaxRate), inc.NetIncome, (bs.Ppe - lastYrBs.Ppe + inc.Depreciation), bs.WorkingCapital, bs.WorkingCapital - lastYrBs.WorkingCapital, inc.Depreciation, bs.InvestedCapital )); } } } return(fcfs); }
public FreeCashFlowCollection CalculateFreeCashFlow(string symbol, int year, int yrsToProject ,IncomeStatementCollection incomeStatementProjection) { FreeCashFlowCollection fcfs = null; MarketParameters mktParms = MarketParametersBL.Instance.GetMarketParameters(); BalanceSheetProjectionBL bsProjectionBL = new BalanceSheetProjectionBL(); BalanceSheetCollection bsProjections = bsProjectionBL.ProjectBalanceSheets(symbol, year, yrsToProject, incomeStatementProjection); if (incomeStatementProjection != null && bsProjections != null) { fcfs = new FreeCashFlowCollection(); for (int i = year + 1; i < year + yrsToProject + 1; i++) { IncomeStatement inc = incomeStatementProjection.Find(i); BalanceSheet bs = bsProjections.Find(i); BalanceSheet lastYrBs = bsProjections.Find(i - 1); if (inc != null && bs != null) { fcfs.Add(new FreeCashFlow( symbol, i, inc.NOP(mktParms.TaxRate), inc.NetIncome, (bs.Ppe - lastYrBs.Ppe + inc.Depreciation), bs.WorkingCapital, bs.WorkingCapital -lastYrBs.WorkingCapital, inc.Depreciation, bs.InvestedCapital )); } } } return fcfs; }