public IncomeStatementCollection ProjectIncomeStatementsAvgRevenueGrowth(string symbol, int fromYear, int yrsToProject) { IncomeStatementCollection incProjections = IncomeStatementBL.Instance.GetIncomeStatements(symbol, fromYear - 2, fromYear); CheckEnoughIncomeStatements(incProjections); decimal avgGrowthRate = GetRevenueAverageGrowthRate(incProjections); for (int i = fromYear + 1; i < fromYear + yrsToProject + 1; i++) { IncomeStatement lastYrInc = incProjections.Find(i - 1); if (lastYrInc != null) { incProjections.Add(new IncomeStatement( incProjections[0].Symbol, i, lastYrInc.Revenue * (1 + avgGrowthRate), lastYrInc.Revenue * (1 + avgGrowthRate) * GetAvgPercentOfSales("Cogs", incProjections), lastYrInc.Revenue * (1 + avgGrowthRate) * GetAvgPercentOfSales("OperatingExpenses", incProjections), lastYrInc.Revenue * (1 + avgGrowthRate) * GetAvgPercentOfSales("Depreciation", incProjections), lastYrInc.Revenue * (1 + avgGrowthRate) * GetAvgPercentOfSales("NetIncome", incProjections), lastYrInc.Revenue * (1 + avgGrowthRate) * GetAvgPercentOfSales("CapitalExpenditures", incProjections) )); } } return(incProjections); }
public BalanceSheetCollection ProjectBalanceSheets(string symbol, int fromYear, int yrsToProject, IncomeStatementCollection incs) { BalanceSheetCollection balProjections = BalanceSheetBL.Instance.GetBalanceSheets(symbol, fromYear - 2, fromYear); if (balProjections == null || balProjections.Count < 1) { throw new Exception("Not enough Balance Sheet Data"); } for (int i = fromYear + 1; i < fromYear + yrsToProject + 1; i++) { IncomeStatement thisInc = incs.Find(i); if (thisInc != null) { balProjections.Add(new BalanceSheet( incs[0].Symbol, i, thisInc.Revenue * GetAvgPercentOfSales("CurrentAssets", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("CurrentLiabilities", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("Ppe", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("Cash", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("Debt", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("ShareholdersEquity", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("TotalAssets", balProjections, incs) )); } } return balProjections; }
public IncomeStatementCollection ProjectIncomeStatementsDecayRevenueGrowth(string symbol, int fromYear, int yrsToProject, decimal endGrowth) { IncomeStatementCollection incProjections = IncomeStatementBL.Instance.GetIncomeStatements(symbol, fromYear - 2, fromYear); CheckEnoughIncomeStatements(incProjections); decimal[] yoyGrowth = GetDecayGrowthRates(yrsToProject, endGrowth, incProjections); int j = 0; for (int i = fromYear + 1; i < fromYear + yrsToProject + 1; i++) { IncomeStatement lastYrInc = incProjections.Find(i - 1); if (lastYrInc != null) { incProjections.Add(new IncomeStatement( incProjections[0].Symbol, i, lastYrInc.Revenue * (1 + yoyGrowth[j]), lastYrInc.Revenue * (1 + yoyGrowth[j]) * GetAvgPercentOfSales("Cogs", incProjections), lastYrInc.Revenue * (1 + yoyGrowth[j]) * GetAvgPercentOfSales("OperatingExpenses", incProjections), lastYrInc.Revenue * (1 + yoyGrowth[j]) * GetAvgPercentOfSales("Depreciation", incProjections), lastYrInc.Revenue * (1 + yoyGrowth[j]) * GetAvgPercentOfSales("NetIncome", incProjections), lastYrInc.Revenue * (1 + yoyGrowth[j]) * GetAvgPercentOfSales("CapitalExpenditures", incProjections) )); } j++; } return(incProjections); }
public IncomeStatementCollection GetIncomeStatements(string tickerSymbol, int fromYear, int toYear) { IncomeStatementCollection incs = null; IncomeStatement inc = null; MySqlParameter[] parms = new MySqlParameter[] { new MySqlParameter("@SYMBOL", MySqlDbType.VarChar), new MySqlParameter("@FROMYEAR", MySqlDbType.Int16), new MySqlParameter("@TOYEAR", MySqlDbType.Int16) }; parms[0].Value = tickerSymbol; parms[1].Value = fromYear; parms[2].Value = toYear; using (MySqlDataReader rdr = MySqlHelper.ExecuteReader(MySqlHelper.SV_CONN_STRING, SQL_SELECT_INCS, parms)) { if (rdr.Read()) { //If there is one result incs = new IncomeStatementCollection(); //Scroll through the results do { inc = ConvertReaderToIncomeStatementObject(rdr); if (inc.Revenue != 0) { incs.Add(inc); } }while (rdr.Read()); } } return(incs); }
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 void EnterFinancialData(IncomeStatementCollection incs, BalanceSheetCollection bals, CompanyAnnualData cad, int year, int yearsToLoad) { CompanyAnnualDataBL.Instance.UpdateCompanyAnnual(cad); for (int y = year; y > year - yearsToLoad; y--) { IncomeStatementBL.Instance.UpdateIncomeStatement(incs.Find(y)); BalanceSheetBL.Instance.UpdateBalanceSheet(bals.Find(y)); } }
private void CheckEnoughIncomeStatements(IncomeStatementCollection incs) { if (incs.Count < 2) { throw new Exception("Not enough Income Statements"); } else if (incs[0].Revenue == 0 || incs[1].Revenue == 0) { throw new Exception("Income Statement fields, Revenue, null"); } }
public void AddCompanyToDatabase(string symbol, int year, int yearsToLoad) { CompanyBL.Instance.UpdateCompany(YahooHtmlParser.Instance.GetCompanyProfile(symbol)); IncomeStatementCollection incs = YahooHtmlParser.Instance.GetIncomeStatementData(symbol, year, yearsToLoad); BalanceSheetCollection bals = YahooHtmlParser.Instance.GetBalanceSheetData(symbol, year, yearsToLoad); CompanyAnnualData compAn = YahooHtmlParser.Instance.GetCompanyAnnualData(symbol, year); YahooHtmlParser.Instance.GetCashFlowStatementData(symbol, year, yearsToLoad, incs); EnterFinancialData(incs, bals, compAn, year, yearsToLoad); }
private decimal GetRevenueAverageGrowthRate(IncomeStatementCollection incProjections) { decimal[] yoyGrowth = new decimal[incProjections.Count - 1]; for (int i = 0; i < yoyGrowth.Length; i++) { yoyGrowth[i] = (incProjections[i + 1].Revenue - incProjections[i].Revenue) / incProjections[i].Revenue; } decimal sum = 0; foreach (decimal perc in yoyGrowth) { sum += perc; } return(sum / yoyGrowth.Length); }
private decimal[] GetDecayGrowthRates(int yearsToProject, decimal endGrowth, IncomeStatementCollection incProjections) { decimal beginGrowth = 0; decimal[] yoyFutureGrowth = new decimal[yearsToProject]; decimal increment = (beginGrowth - endGrowth) / (yearsToProject); yoyFutureGrowth[0] = beginGrowth; for (int i = 1; i < yearsToProject; i++) { yoyFutureGrowth[i] = yoyFutureGrowth[i - 1] - increment; } return(yoyFutureGrowth); }
internal decimal GetAvgPercentOfSales(string itemName, BalanceSheetCollection balProjections, IncomeStatementCollection incs) { decimal[] salesMargin = new decimal[balProjections.Count]; for (int i = 0; i < salesMargin.Length; i++) { PropertyInfo propInfo = typeof(BalanceSheet).GetProperty(itemName); decimal value = (decimal)propInfo.GetValue(balProjections[i], null); salesMargin[i] = value / incs[i].Revenue; } decimal sum = 0; foreach (decimal perc in salesMargin) { sum += perc; } return sum / salesMargin.Length; }
private decimal GetAvgPercentOfSales(string itemName, IncomeStatementCollection incProjections) { decimal[] salesMargin = new decimal[incProjections.Count]; for (int i = 0; i < salesMargin.Length; i++) { PropertyInfo propInfo = typeof(IncomeStatement).GetProperty(itemName); decimal value = (decimal)propInfo.GetValue(incProjections[i], null); salesMargin[i] = value / incProjections[i].Revenue; } decimal sum = 0; foreach (decimal perc in salesMargin) { sum += perc; } return(sum / salesMargin.Length); }
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 BalanceSheetCollection ProjectBalanceSheets(string symbol, int fromYear, int yrsToProject, IncomeStatementCollection incs) { BalanceSheetCollection balProjections = BalanceSheetBL.Instance.GetBalanceSheets(symbol, fromYear - 2, fromYear); if (balProjections == null || balProjections.Count < 1) { throw new Exception("Not enough Balance Sheet Data"); } for (int i = fromYear + 1; i < fromYear + yrsToProject + 1; i++) { IncomeStatement thisInc = incs.Find(i); if (thisInc != null) { balProjections.Add(new BalanceSheet( incs[0].Symbol, i, thisInc.Revenue * GetAvgPercentOfSales("CurrentAssets", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("CurrentLiabilities", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("Ppe", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("Cash", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("Debt", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("ShareholdersEquity", balProjections, incs), thisInc.Revenue * GetAvgPercentOfSales("TotalAssets", balProjections, incs) )); } } return(balProjections); }
public IncomeStatementCollection GetIncomeStatements(string tickerSymbol, int fromYear, int toYear) { IncomeStatementCollection incs = null; IncomeStatement inc = null; MySqlParameter[] parms = new MySqlParameter[] { new MySqlParameter("@SYMBOL", MySqlDbType.VarChar), new MySqlParameter("@FROMYEAR", MySqlDbType.Int16), new MySqlParameter("@TOYEAR", MySqlDbType.Int16) }; parms[0].Value = tickerSymbol; parms[1].Value = fromYear; parms[2].Value = toYear; using (MySqlDataReader rdr = MySqlHelper.ExecuteReader(MySqlHelper.SV_CONN_STRING, SQL_SELECT_INCS, parms)) { if (rdr.Read()) { //If there is one result incs = new IncomeStatementCollection(); //Scroll through the results do { inc = ConvertReaderToIncomeStatementObject(rdr); if (inc.Revenue != 0) { incs.Add(inc); } } while (rdr.Read()); } } return incs; }
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 IncomeStatementCollection GetIncomeStatementData(string symbol, int year, int yearsToLoad) { string url = "http://finance.yahoo.com/q/is?s=" + symbol + "+Income+Statement&annual"; HtmlDocument doc = new HtmlWeb().Load(url); Dictionary<int, Dictionary<string, decimal>> values = new Dictionary<int, Dictionary<string, decimal>>(); Dictionary<string, decimal> inc2012 = new Dictionary<string, decimal>(); Dictionary<string, decimal> inc2011 = new Dictionary<string,decimal>(); Dictionary<string, decimal> inc2010 = new Dictionary<string,decimal>(); foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//td[@colspan='2']")) { if (div.InnerHtml.Contains("Total Revenue")) { inc2012.Add("Total Revenue", GetValueFromInnerHtml(div.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); inc2011.Add("Total Revenue", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); inc2010.Add("Total Revenue", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); } else if (div.InnerHtml.Contains("Cost of Revenue")) { inc2012.Add("Cost of Revenue", GetValueFromInnerHtml(div.NextSibling.ChildNodes[0].InnerHtml)); inc2011.Add("Cost of Revenue", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2010.Add("Cost of Revenue", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } else if (div.InnerHtml.Contains("Net Income") && !div.InnerHtml.Contains("Ops") && !div.InnerHtml.Contains("To")) { inc2012.Add("Net Income", GetValueFromInnerHtml(div.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); inc2011.Add("Net Income", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); inc2010.Add("Net Income", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); } } foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//td[@width ='30' and @class='yfnc_tabledata1']")) { if (div.NextSibling.NextSibling.InnerHtml.Contains("Research Development")) { inc2012.Add("Research Development", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2011.Add("Research Development", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2010.Add("Research Development", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } else if (div.NextSibling.NextSibling.InnerHtml.Contains("Selling General and Administrative")) { inc2012.Add("Selling General and Administrative", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2011.Add("Selling General and Administrative", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2010.Add("Selling General and Administrative", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } else if (div.NextSibling.NextSibling.InnerHtml.Contains("Non Recurring")) { inc2012.Add("Non Recurring", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2011.Add("Non Recurring", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2010.Add("Non Recurring", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } else if (div.NextSibling.NextSibling.InnerHtml.Contains("Others")) { inc2012.Add("Others", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2011.Add("Others", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2010.Add("Others", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Total Other Income/Expenses Net")) //{ // inc2012.Add("Total Other Income/Expenses Net", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Total Other Income/Expenses Net", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Total Other Income/Expenses Net", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Earnings Before Interest And Taxes")) //{ // inc2012.Add("Earnings Before Interest And Taxes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Earnings Before Interest And Taxes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Earnings Before Interest And Taxes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Interest Expense")) //{ // inc2012.Add("Interest Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Interest Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Interest Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Income Tax Expense")) //{ // inc2012.Add("Income Tax Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Income Tax Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Income Tax Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Minority Interest")) //{ // inc2012.Add("Minority Interest", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Minority Interest", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Minority Interest", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Discontinued Operations")) //{ // inc2012.Add("Discontinued Operations", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Discontinued Operations", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Discontinued Operations", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Extraordinary Items")) //{ // inc2012.Add("Extraordinary Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Extraordinary Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Extraordinary Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Effect Of Accounting Changes")) //{ // inc2012.Add("Effect Of Accounting Changes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Effect Of Accounting Changes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Effect Of Accounting Changes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Other Items")) //{ // inc2012.Add("Other Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Other Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Other Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} } values.Add(2010, inc2010); values.Add(2011, inc2011); values.Add(2012, inc2012); IncomeStatementCollection incs = new IncomeStatementCollection(); for (int y = year; y > year - yearsToLoad; y--) { if (values.ContainsKey(y)) { incs.Add(new IncomeStatement(symbol, y, values[y]["Total Revenue"], values[y]["Cost of Revenue"], values[y]["Research Development"] + values[y]["Selling General and Administrative"] + values[y]["Non Recurring"] + values[y]["Others"], 0, values[y]["Net Income"], 0) ); } } return incs; }
private decimal GetRevenueAverageGrowthRate(IncomeStatementCollection incProjections) { decimal[] yoyGrowth = new decimal[incProjections.Count - 1]; for (int i = 0; i < yoyGrowth.Length; i++) { yoyGrowth[i] = (incProjections[i + 1].Revenue - incProjections[i].Revenue) / incProjections[i].Revenue; } decimal sum = 0; foreach (decimal perc in yoyGrowth) { sum += perc; } return sum / yoyGrowth.Length; }
public void GetCashFlowStatementData(string symbol, int year, int yearsToLoad, IncomeStatementCollection incs) { Dictionary <int, Dictionary <string, decimal> > values = new Dictionary <int, Dictionary <string, decimal> >(); Dictionary <string, decimal> bs2012 = new Dictionary <string, decimal>(); Dictionary <string, decimal> bs2011 = new Dictionary <string, decimal>(); Dictionary <string, decimal> bs2010 = new Dictionary <string, decimal>(); string url = "http://finance.yahoo.com/q/cf?s=" + symbol + "+Cash+Flow&annual"; HtmlDocument doc = new HtmlWeb().Load(url); foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//td[@colspan='2']")) { if (div.InnerHtml.Contains("Depreciation")) { bs2012.Add("Depreciation", GetValueFromInnerHtml(div.NextSibling.ChildNodes[0].InnerHtml)); bs2011.Add("Depreciation", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); bs2010.Add("Depreciation", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } else if (div.InnerHtml.Contains("Capital Expenditures")) { bs2012.Add("Capital Expenditures", GetValueFromInnerHtml(div.NextSibling.ChildNodes[0].InnerHtml) * -1); bs2011.Add("Capital Expenditures", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes[0].InnerHtml) * -1); bs2010.Add("Capital Expenditures", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml) * -1); } //else if (div.InnerHtml.Equals("Investments")) //{ // bs2012.Add("Investments", GetValueFromInnerHtml(div.NextSibling.ChildNodes[0].InnerHtml)); // bs2011.Add("Investments", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // bs2010.Add("Investments", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} } values.Add(2010, bs2010); values.Add(2011, bs2011); values.Add(2012, bs2012); for (int y = year; y > year - yearsToLoad; y--) { if (values.ContainsKey(y)) { incs.Find(y).Depreciation = values[y]["Depreciation"]; incs.Find(y).CapitalExpenditures = values[y]["Capital Expenditures"]; } } }
public IncomeStatementCollection GetIncomeStatementData(string symbol, int year, int yearsToLoad) { string url = "http://finance.yahoo.com/q/is?s=" + symbol + "+Income+Statement&annual"; HtmlDocument doc = new HtmlWeb().Load(url); Dictionary <int, Dictionary <string, decimal> > values = new Dictionary <int, Dictionary <string, decimal> >(); Dictionary <string, decimal> inc2012 = new Dictionary <string, decimal>(); Dictionary <string, decimal> inc2011 = new Dictionary <string, decimal>(); Dictionary <string, decimal> inc2010 = new Dictionary <string, decimal>(); foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//td[@colspan='2']")) { if (div.InnerHtml.Contains("Total Revenue")) { inc2012.Add("Total Revenue", GetValueFromInnerHtml(div.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); inc2011.Add("Total Revenue", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); inc2010.Add("Total Revenue", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); } else if (div.InnerHtml.Contains("Cost of Revenue")) { inc2012.Add("Cost of Revenue", GetValueFromInnerHtml(div.NextSibling.ChildNodes[0].InnerHtml)); inc2011.Add("Cost of Revenue", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2010.Add("Cost of Revenue", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } else if (div.InnerHtml.Contains("Net Income") && !div.InnerHtml.Contains("Ops") && !div.InnerHtml.Contains("To")) { inc2012.Add("Net Income", GetValueFromInnerHtml(div.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); inc2011.Add("Net Income", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); inc2010.Add("Net Income", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes["strong"].ChildNodes[0].InnerHtml)); } } foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//td[@width ='30' and @class='yfnc_tabledata1']")) { if (div.NextSibling.NextSibling.InnerHtml.Contains("Research Development")) { inc2012.Add("Research Development", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2011.Add("Research Development", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2010.Add("Research Development", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } else if (div.NextSibling.NextSibling.InnerHtml.Contains("Selling General and Administrative")) { inc2012.Add("Selling General and Administrative", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2011.Add("Selling General and Administrative", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2010.Add("Selling General and Administrative", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } else if (div.NextSibling.NextSibling.InnerHtml.Contains("Non Recurring")) { inc2012.Add("Non Recurring", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2011.Add("Non Recurring", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2010.Add("Non Recurring", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } else if (div.NextSibling.NextSibling.InnerHtml.Contains("Others")) { inc2012.Add("Others", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2011.Add("Others", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); inc2010.Add("Others", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Total Other Income/Expenses Net")) //{ // inc2012.Add("Total Other Income/Expenses Net", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Total Other Income/Expenses Net", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Total Other Income/Expenses Net", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Earnings Before Interest And Taxes")) //{ // inc2012.Add("Earnings Before Interest And Taxes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Earnings Before Interest And Taxes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Earnings Before Interest And Taxes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Interest Expense")) //{ // inc2012.Add("Interest Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Interest Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Interest Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Income Tax Expense")) //{ // inc2012.Add("Income Tax Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Income Tax Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Income Tax Expense", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Minority Interest")) //{ // inc2012.Add("Minority Interest", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Minority Interest", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Minority Interest", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Discontinued Operations")) //{ // inc2012.Add("Discontinued Operations", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Discontinued Operations", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Discontinued Operations", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Extraordinary Items")) //{ // inc2012.Add("Extraordinary Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Extraordinary Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Extraordinary Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Effect Of Accounting Changes")) //{ // inc2012.Add("Effect Of Accounting Changes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Effect Of Accounting Changes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Effect Of Accounting Changes", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} //else if (div.NextSibling.NextSibling.InnerHtml.Contains("Other Items")) //{ // inc2012.Add("Other Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2011.Add("Other Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // inc2010.Add("Other Items", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} } values.Add(2010, inc2010); values.Add(2011, inc2011); values.Add(2012, inc2012); IncomeStatementCollection incs = new IncomeStatementCollection(); for (int y = year; y > year - yearsToLoad; y--) { if (values.ContainsKey(y)) { incs.Add(new IncomeStatement(symbol, y, values[y]["Total Revenue"], values[y]["Cost of Revenue"], values[y]["Research Development"] + values[y]["Selling General and Administrative"] + values[y]["Non Recurring"] + values[y]["Others"], 0, values[y]["Net Income"], 0) ); } } return(incs); }
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); }
private void CheckEnoughIncomeStatements(IncomeStatementCollection incs) { if (incs.Count < 2) { throw new Exception("Not enough Income Statements"); } else if (incs[0].Revenue == 0 || incs[1].Revenue == 0) { throw new Exception("Income Statement fields, Revenue, null"); } }
public void GetCashFlowStatementData(string symbol, int year, int yearsToLoad, IncomeStatementCollection incs) { Dictionary<int, Dictionary<string, decimal>> values = new Dictionary<int, Dictionary<string, decimal>>(); Dictionary<string, decimal> bs2012 = new Dictionary<string, decimal>(); Dictionary<string, decimal> bs2011 = new Dictionary<string, decimal>(); Dictionary<string, decimal> bs2010 = new Dictionary<string, decimal>(); string url = "http://finance.yahoo.com/q/cf?s=" + symbol + "+Cash+Flow&annual"; HtmlDocument doc = new HtmlWeb().Load(url); foreach (HtmlNode div in doc.DocumentNode.SelectNodes("//td[@colspan='2']")) { if (div.InnerHtml.Contains("Depreciation")) { bs2012.Add("Depreciation", GetValueFromInnerHtml(div.NextSibling.ChildNodes[0].InnerHtml)); bs2011.Add("Depreciation", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); bs2010.Add("Depreciation", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); } else if (div.InnerHtml.Contains("Capital Expenditures")) { bs2012.Add("Capital Expenditures", GetValueFromInnerHtml(div.NextSibling.ChildNodes[0].InnerHtml) * -1); bs2011.Add("Capital Expenditures", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes[0].InnerHtml) * -1); bs2010.Add("Capital Expenditures", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml) * -1); } //else if (div.InnerHtml.Equals("Investments")) //{ // bs2012.Add("Investments", GetValueFromInnerHtml(div.NextSibling.ChildNodes[0].InnerHtml)); // bs2011.Add("Investments", GetValueFromInnerHtml(div.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); // bs2010.Add("Investments", GetValueFromInnerHtml(div.NextSibling.NextSibling.NextSibling.ChildNodes[0].InnerHtml)); //} } values.Add(2010, bs2010); values.Add(2011, bs2011); values.Add(2012, bs2012); for (int y = year; y > year - yearsToLoad; y--) { if (values.ContainsKey(y)) { incs.Find(y).Depreciation = values[y]["Depreciation"]; incs.Find(y).CapitalExpenditures = values[y]["Capital Expenditures"]; } } }
private decimal[] GetDecayGrowthRates(int yearsToProject, decimal endGrowth, IncomeStatementCollection incProjections) { decimal beginGrowth = 0; decimal[] yoyFutureGrowth = new decimal[yearsToProject]; decimal increment = (beginGrowth - endGrowth) / (yearsToProject); yoyFutureGrowth[0] = beginGrowth; for (int i = 1; i < yearsToProject; i++) { yoyFutureGrowth[i] = yoyFutureGrowth[i - 1] - increment; } return yoyFutureGrowth; }
private void EnterFinancialData(IncomeStatementCollection incs, BalanceSheetCollection bals, CompanyAnnualData cad, int year, int yearsToLoad) { CompanyAnnualDataBL.Instance.UpdateCompanyAnnual(cad); for (int y = year; y > year - yearsToLoad; y--) { IncomeStatementBL.Instance.UpdateIncomeStatement(incs.Find(y)); BalanceSheetBL.Instance.UpdateBalanceSheet(bals.Find(y)); } }