Пример #1
0
        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;
        }
Пример #3
0
        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);
        }
Пример #4
0
        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));
            }
        }
Пример #7
0
 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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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;
        }
Пример #12
0
        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;
        }
Пример #19
0
        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"];
                }
            }
        }
Пример #20
0
        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);
        }
Пример #21
0
        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));
            }   
        }