示例#1
0
        public async Task <StockSummary> GetStockQuote(string ticker)
        {
            var securities = await Yahoo.Symbols(ticker).Fields(Field.LongName, Field.RegularMarketPrice, Field.RegularMarketChange, Field.RegularMarketChangePercent, Field.FiftyTwoWeekHigh, Field.FiftyTwoWeekLow, Field.RegularMarketDayLow, Field.RegularMarketDayHigh, Field.RegularMarketOpen, Field.RegularMarketPreviousClose, Field.RegularMarketVolume, Field.Bid, Field.BidSize, Field.Ask, Field.AskSize, Field.EarningsTimestamp, Field.EpsForward, Field.FinancialCurrency, Field.MarketCap).QueryAsync();

            var security = securities[ticker.ToUpper()];

            security.Fields.TryGetValue(ticker, out dynamic key);
            StockSummary models = new StockSummary()
            {
                Ticker        = ticker,
                Name          = security.LongName,
                Change        = security.RegularMarketChange,
                ChangePercent = security.RegularMarketChangePercent,
                weekHigh      = security.FiftyTwoWeekHigh,
                weekLow       = security.FiftyTwoWeekLow,
                dayHigh       = security.RegularMarketDayHigh,
                dayLow        = security.RegularMarketDayLow,
                Open          = Convert.ToDecimal(security.RegularMarketOpen),
                Close         = Convert.ToDecimal(security.RegularMarketPreviousClose),
                Bid           = security.Bid,
                Ask           = security.Ask,
                BidSize       = security.BidSize,
                AskSize       = security.AskSize,
                market        = security.MarketCap,
                Currency      = security.Currency,
                Volume        = security.RegularMarketVolume
            };

            return(models);
        }
示例#2
0
        /// <summary>
        /// Analyze stock base upper and lower trend line. We first find the highPrice/lowprice for the latest 7 days, then starting from the horizontal line,
        /// we rotate the trend line until it can be higher than the highPrice/lowPrice in 60 days
        /// </summary>
        /// <param name="summary"></param>
        public static void AnalyseStockTrendLine(ref StockSummary summary)
        {
            List <StockPoint> points = summary.CacheData[Constant.DAILYCHART] as List <StockPoint>;

            double[] boundaries = new double[4];
            double   startHigh  = Double.MinValue;
            double   startLow   = Double.MaxValue;
            int      indexHigh  = 0;
            int      indexLow   = 0;

            for (int i = 0; i < 7; i++)
            {
                if (startHigh < points[i].HighPrice)
                {
                    startHigh = points[i].HighPrice;
                    indexHigh = i;
                }
                if (startLow > points[i].LowPrice)
                {
                    startLow = points[i].LowPrice;
                    indexLow = i;
                }
            }
            boundaries[0] = GetDeltaForStock(startHigh, points, true, summary.Trends[2] > 0, indexHigh, startHigh / (points.Count * 500));
            boundaries[1] = indexHigh;
            boundaries[2] = GetDeltaForStock(startLow, points, false, summary.Trends[2] > 0, indexLow, startHigh / (points.Count * 500));
            boundaries[3] = indexLow;
            Console.WriteLine("the high trend delta: " + boundaries[0]);
            Console.WriteLine("the low trend delta: " + boundaries[2]);
            summary.SerializedProperties.Add("boundaries", boundaries);
        }
示例#3
0
 /// <summary>
 /// Currently, we may either insert the stock summary data or update the existing stock summary data
 /// </summary>
 /// <param name="summary"></param>
 /// <param name="operation"></param>
 public void UpdateStockAnalysis(StockSummary summary, int operation)
 {
     if (StockConn.ConnectionString == String.Empty)
     {
         StockConn = new SqlConnection(Conn);
     }
     if (operation == 0)
     {
         string query = "INSERT INTO [Stock].[dbo].[StockAnalysis]([symbol],[dayTrend14],[dayTrend30],[dayTrend60],[dayTrend180],[patternData],[timeStamp]) VALUES(@symbol,@dayTrend14,@dayTrend30,@dayTrend60,@dayTrend180,@patternData,@timeStamp)";
         StockConn.Open();
         SqlCommand cmd = new SqlCommand(query, StockConn);
         cmd.Parameters.Add("@symbol", System.Data.SqlDbType.Char);
         cmd.Parameters.Add("@dayTrend14", System.Data.SqlDbType.Float);
         cmd.Parameters.Add("@dayTrend30", System.Data.SqlDbType.Float);
         cmd.Parameters.Add("@dayTrend60", System.Data.SqlDbType.Float);
         cmd.Parameters.Add("@dayTrend180", System.Data.SqlDbType.Float);
         cmd.Parameters.Add("@patternData", System.Data.SqlDbType.NText);
         cmd.Parameters.Add("@timeStamp", System.Data.SqlDbType.DateTime);
         // set values to parameters from textboxes
         cmd.Parameters["@symbol"].Value      = summary.Symbol;
         cmd.Parameters["@dayTrend14"].Value  = summary.Trends[0];
         cmd.Parameters["@dayTrend30"].Value  = summary.Trends[1];
         cmd.Parameters["@dayTrend60"].Value  = summary.Trends[2];
         cmd.Parameters["@dayTrend180"].Value = summary.Trends[3];
         cmd.Parameters["@patternData"].Value = JsonConvert.SerializeObject(summary.SerializedProperties);
         cmd.Parameters["@timeStamp"].Value   = summary.LastUpdate;
         cmd.ExecuteNonQuery();
         StockConn.Close();
     }
     else if (operation == 1)
     {
         string query = "UPDATE [Stock].[dbo].[StockAnalysis] SET  [dayTrend14] = @dayTrend14, [dayTrend30] = @dayTrend30, [dayTrend60] = @dayTrend60,[dayTrend180] = @dayTrend180,[patternData] = @patternData, [timeStamp] = @timeStamp where [symbol] = @symbol";
         StockConn.Open();
         SqlCommand cmd = new SqlCommand(query, StockConn);
         cmd.Parameters.Add("@symbol", System.Data.SqlDbType.Char);
         cmd.Parameters.Add("@dayTrend14", System.Data.SqlDbType.Float);
         cmd.Parameters.Add("@dayTrend30", System.Data.SqlDbType.Float);
         cmd.Parameters.Add("@dayTrend60", System.Data.SqlDbType.Float);
         cmd.Parameters.Add("@dayTrend180", System.Data.SqlDbType.Float);
         cmd.Parameters.Add("@patternData", System.Data.SqlDbType.NText);
         cmd.Parameters.Add("@timeStamp", System.Data.SqlDbType.DateTime);
         // set values to parameters from textboxes
         cmd.Parameters["@symbol"].Value      = summary.Symbol;
         cmd.Parameters["@dayTrend14"].Value  = summary.Trends[0];
         cmd.Parameters["@dayTrend30"].Value  = summary.Trends[1];
         cmd.Parameters["@dayTrend60"].Value  = summary.Trends[2];
         cmd.Parameters["@dayTrend180"].Value = summary.Trends[3];
         cmd.Parameters["@patternData"].Value = JsonConvert.SerializeObject(summary.SerializedProperties);
         cmd.Parameters["@timeStamp"].Value   = summary.LastUpdate;
         cmd.ExecuteNonQuery();
         StockConn.Close();
     }
     else
     {
         Console.WriteLine("The operation doesn't exist!");
     }
 }
示例#4
0
        public StockSummary FetchStockTrendSummaryObject(string symbol)
        {
            StockSummary result = new StockSummary();

            result.Symbol = symbol;
            AddADXDataToStockObject(ref result, symbol);
            AddAROONDataToStockObject(ref result, symbol);
            AddStockMajorDataToStockSummary(ref result);
            result.LastUpdate = DateTime.Now;
            return(result);
        }
示例#5
0
        /// <summary>
        /// ADX defines the strength, aroon defines the strength and stock trend direction.
        /// </summary>
        /// <param name="summary"></param>
        public static void AnalyseStockTrend(ref StockSummary summary)
        {
            List <double> aroonValues = summary.CacheData[Constant.AROONKEY] as List <double>;
            List <double> adxValues   = summary.CacheData[Constant.ADXKEY] as List <double>;

            summary.Trends.Add(TrendValueForDays(aroonValues, adxValues, 14)); // 14-day trend
            summary.Trends.Add(TrendValueForDays(aroonValues, adxValues, 30));
            summary.Trends.Add(TrendValueForDays(aroonValues, adxValues, 60));
            summary.Trends.Add(TrendValueForDays(aroonValues, adxValues, 180));
            summary.LastUpdate = DateTime.Now;
        }
示例#6
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!IsPostBack)
     {
         int skuid = WebUtil.ParamInt("sku", 0);
         if (skuid <= 0)
         {
             this.divMsg.InnerText = "无效的SKU";
             return;
         }
         using (ISession session = new Session())
         {
             ItemSpec spec = ItemSpec.Retrieve(session, skuid);
             if (spec == null)
             {
                 this.divMsg.InnerText = "SKU " + skuid.ToString() + "不存在";
                 return;
             }
             //显示sku信息
             this.lblItemCode.Text = spec.ItemCode;
             this.lblSize.Text     = spec.SizeCode;
             ItemMaster master = ItemMaster.Retrieve(session, spec.ItemCode);
             this.lblItemName.Text = master == null ? "" : master.ItemName;
             ItemColor color = ItemColor.Retrieve(session, spec.ColorCode);
             this.lblColor.Text  = spec.ColorCode + " " + (color == null ? "" : color.ColorText);
             this.lblOVSQty.Text = spec.EnableOS ? RenderUtil.FormatNumber(spec.OSQty, "#0.##", "0") : "0";
             //现有库存
             StockSummary sto = StockSummary.Retrieve(session, skuid);
             this.lblStockQty.Text  = sto == null ? "0" : RenderUtil.FormatNumber(sto.StockQty, "#0.##");
             this.lblFrozenQty.Text = sto == null ? "0" : RenderUtil.FormatNumber(sto.FrozenQty, "#0.##");
             //在途采购记录
             IList <POLine> lines = POHead.PipelineInvQuery(session, skuid);
             this.repeater.DataSource = lines;
             this.repeater.DataBind();
             decimal pipelineStockQty = 0M;
             //计算汇总在途量
             foreach (POLine line in lines)
             {
                 pipelineStockQty += (line.PurchaseQty - line.ReceiveQty);
             }
             this.lblPipelineStock.Text = RenderUtil.FormatNumber(pipelineStockQty, "#0.##");
             if (lines.Count <= 0)
             {
                 this.divMsg.InnerText = "该SKU没有在途采购";
             }
             else
             {
                 this.divMsg.InnerText = "";
             }
         }
     }
 }
 public static StockSummary Load(this StockSummary item,
                                 AgregatorSummary peYear,
                                 AgregatorSummary netProfitYear,
                                 AgregatorSummary growthYear,
                                 AgregatorSummary pegYear,
                                 AgregatorSummary peDiffYear)
 {
     item.PeYear        = peYear;
     item.NetProfitYear = netProfitYear;
     item.GrowthYear    = growthYear;
     item.PegYear       = pegYear;
     item.PeDiffYear    = peDiffYear;
     return(item);
 }
示例#8
0
        public async Task <JsonResult> GetData(string searchString)
        {
            var user_id = User.Identity.GetUserId();

            ViewBag.searchString = searchString;

            ViewBag.Id = user_id;
            StockSummary models = new StockSummary();

            if (!String.IsNullOrEmpty(searchString))
            {
                models = await GetStockQuote(searchString);
            }

            return(Json(models));
        }
示例#9
0
        public async Task <StockSummary> GetStockQuote(string ticker)
        {
            var securities = await Yahoo.Symbols(ticker).Fields("Change", "ChangePercent").Fields(Field.RegularMarketChange, Field.RegularMarketChangePercent).QueryAsync();

            var security = securities[ticker.ToUpper()];

            security.Fields.TryGetValue(ticker, out dynamic key);
            StockSummary models = new StockSummary()
            {
                Ticker        = ticker,
                Change        = security.RegularMarketChange,
                ChangePercent = security.RegularMarketChangePercent
            };

            return(models);
        }
示例#10
0
        /// <summary>
        /// Based on the price & volumn, we draw a regression line. Maybe used in the future
        /// step 1: Get the linear regression based on the latest 14-day-point
        /// step 2: linear shift to find the upper and lower bound
        /// note: stock price as y axis and date as x axis, we think the "first day" as the 0, then 1,2,3.....
        /// if Y = a + bx. Then a = ((sigma_y)*(sigma_x2)-(sigma_x)(sigma_xy))/n(sigma_x2)-(sigmax)^2. b = (n(sigma_xy)-(sigma_x)*(sigma_y))/n(sigma_x2)-(sigma_x)^2
        /// </summary>
        /// <param name="summary"></param>
        public static void AnalyseStockTrendRegression(ref StockSummary summary)
        {
            List <StockPoint> points = summary.CacheData[Constant.DAILYCHART] as List <StockPoint>;
            double            sigma_x = 0, sigma_y = 0, sigma_xy = 0, sigma_x2 = 0, sigma_y2 = 0;

            //original data to paticipate linear regression
            for (int i = 0; i < 14; i++)
            {
                sigma_x += i;
                sigma_y += points[13 - i].ClosePrice;
                sigma_x2 = Math.Pow(i, 2);
                sigma_y2 = Math.Pow(points[13 - i].ClosePrice, 2);
                sigma_xy = i * points[13 - i].ClosePrice;
            }
            summary.LinearA = (sigma_y * sigma_x2 - sigma_x * sigma_xy) / (14 * sigma_x2 - Math.Pow(sigma_x, 2));
            summary.LinearB = (14 * sigma_xy - sigma_x * sigma_y) / (14 * sigma_x2 - Math.Pow(sigma_x, 2));
        }
示例#11
0
        private void gridStock_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0 || e.RowIndex >= gridStock.Rows.Count)
            {
                return;
            }

            DataGridViewRow row   = gridStock.Rows[e.RowIndex];
            StockSummary    stock = (StockSummary)row.Tag;

            using (StockManagerForm stockDialog = new StockManagerForm(stock.ItemID))
            {
                if (stockDialog.ShowDialog(this) == DialogResult.OK && stockDialog.DataChanged)
                {
                    LoadStockTab();
                }
            }
        }
示例#12
0
        public void AddAROONDataToStockObject(ref StockSummary result, string symbol)
        {
            var           data        = GetAROONData(symbol);
            var           dataPoints  = data[Constant.AROONKEY].OfType <JProperty>();
            List <double> AROONValues = new List <double>();
            int           i           = 0;

            foreach (JProperty point in dataPoints)
            {
                AROONValues.Add(GeneralTools.StringParser(point.Value[Constant.AROON].ToString()));
                if (i >= 200)
                {
                    break;
                }
                i++;
            }
            result.CacheData.Add(Constant.AROONKEY, AROONValues);
        }
示例#13
0
        public async Task <ActionResult> GetDataValues(string searchString)
        {
            var user_id = User.Identity.GetUserId();

            ViewBag.searchString = searchString;

            ViewBag.Id = user_id;
            StockSummary models = new StockSummary();

            if (!String.IsNullOrEmpty(searchString))
            {
                models = await GetStockQuote(searchString);
            }

            ViewBag.stock = db.StockLists.ToList();

            return(View("Index"));
        }
示例#14
0
        public StockSummary ReadStockAnalysis(string symbol)
        {
            if (StockConn.ConnectionString == String.Empty)
            {
                StockConn = new SqlConnection(Conn);
            }
            string query = "SELECT * FROM [Stock].[dbo].[StockAnalysis] WHERE [symbol] = @symbol";

            StockConn.Open();
            SqlCommand cmd = new SqlCommand(query, StockConn);

            cmd.Parameters.Add("@symbol", System.Data.SqlDbType.Char);
            // set values to parameters from textboxes
            cmd.Parameters["@symbol"].Value = symbol;
            using (System.Data.SqlClient.SqlDataReader oReader = cmd.ExecuteReader())
            {
                StockSummary summary = new StockSummary();
                summary.Symbol = symbol;
                if (oReader.HasRows)
                {
                    while (oReader.Read())
                    {
                        var parsed = JObject.Parse(oReader["patternData"].ToString());
                        var r      = parsed["boundaries"].ToString();
                        r = r.Substring(1, r.Length - 2);
                        string[] r1 = r.Split(',');
                        double[] re = new double[4] {
                            double.Parse(r1[0]), double.Parse(r1[1]), double.Parse(r1[2]), double.Parse(r1[3])
                        };

                        summary.SerializedProperties = new Dictionary <string, object>();
                        summary.SerializedProperties.Add("boundaries", re);
                        summary.CacheData.Add("fail", false);
                        summary.LastUpdate = oReader.GetDateTime(8);
                    }
                }
                else
                {
                    summary.CacheData.Add("fail", true);
                }
                StockConn.Close();
                return(summary);
            }
        }
示例#15
0
        private void AddStockMajorDataToStockSummary(ref StockSummary result)
        {
            string            req        = GeneralTools.NetworkRequestStringBuilder(result.Symbol, Constant.DAILY, Constant.QUERY_FUNCTION_VALUE_DAILY, string.Empty, string.Empty, _apiKey[0]);
            var               stockData  = OriginalStockData(req);
            var               dataPoints = stockData[Constant.DAILYCHART];
            List <StockPoint> points     = new List <StockPoint>();

            foreach (JProperty point in dataPoints.OfType <JProperty>())
            {
                StockPoint tmp = new StockPoint();
                tmp.Date       = point.Name.ToString();
                tmp.OpenPrice  = GeneralTools.StringParser(point.Value[Constant.OPENPRICE].ToString());
                tmp.ClosePrice = GeneralTools.StringParser(point.Value[Constant.CLOSEPRICE].ToString());
                tmp.HighPrice  = GeneralTools.StringParser(point.Value[Constant.HIGHPRICE].ToString());
                tmp.LowPrice   = GeneralTools.StringParser(point.Value[Constant.LOWPRICE].ToString());
                tmp.Volume     = Int32.Parse(point.Value[Constant.VOLUME].ToString());
                points.Add(tmp);
            }
            result.CacheData.Add(Constant.DAILYCHART, points);
        }
示例#16
0
        private void LoadStockTab()
        {
            int selectedEntryID = -1;

            if (gridStock.SelectedRows.Count > 0)
            {
                selectedEntryID = ((StockSummary)gridStock.SelectedRows[0].Tag).ItemID;
            }

            DataGridManager.AddDataGridEntries <StockSummary>(gridStock, ComplexQueries.GetStockSummary(), true, new Action <DataGridViewRow>(
                                                                  (DataGridViewRow row) =>
            {
                StockSummary sum = (StockSummary)row.Tag;

                if (selectedEntryID != -1 && sum.ItemID == selectedEntryID)
                {
                    row.Selected = true;
                }
            }
                                                                  ));
        }
示例#17
0
        public async Task <JsonResult> Create(string ticker)
        {
            var          user_id = User.Identity.GetUserId();
            StockSummary models  = new StockSummary();

            if (!String.IsNullOrEmpty(ticker))
            {
                models = await GetStockQuote(ticker);
            }
            UserStock userStock = new UserStock()
            {
                user_Id       = user_id,
                ticker        = ticker,
                Change        = models.Change,
                ChangePercent = models.ChangePercent
            };

            db.UserStocks.Add(userStock);
            db.SaveChanges();

            return(Json(userStock));
        }
        private Path [] GetTrendLineChartPath(double xmin, double ymin, double ymax, double stepX, double stepY, double lowVal, double highVal, int strokeThickness, SolidColorBrush color, bool isDash)
        {
            StockSummary summary = sqlReader.ReadStockAnalysis("ACB");

            if ((bool)summary.CacheData["fail"])
            {
                return(null);
            }
            double[] boundaries  = summary.SerializedProperties["boundaries"] as double[];
            var      summaryDate = summary.LastUpdate;
            int      index       = 0;
            var      points      = stockData.Charts[Constant.ChartMapper[type]];

            foreach (var point in points)
            {
                var tmp = point.Date.Split('-');
                if (Int16.Parse(tmp[0]) == summaryDate.Year && Int16.Parse(tmp[1]) == summaryDate.Month && Int16.Parse(tmp[2]) == summaryDate.Day)
                {
                    break;
                }
                index++;
            }
            int           indexH = 100 - (index + (int)boundaries[1] + 60); // the start x axis point we draw the line
            double        startHigh = points.ElementAt(index + (int)boundaries[1]).HighPrice + 60 * boundaries[0];
            int           indexL = 100 - (index + (int)boundaries[3] + 60); // the start x axis point we draw the line
            double        startLow = points.ElementAt(index + (int)boundaries[3]).LowPrice + 60 * boundaries[2];
            List <double> valH = new List <double>(); List <double> valL = new List <double>();

            for (int i = 0; i < 100; i++)
            {
                valH.Add(startHigh - boundaries[0] * i);
                valL.Add(startLow - boundaries[2] * i);
            }
            valH.Reverse();
            valL.Reverse();
            return(new Path[] { BuilderTools.LineChart(xmin, ymin, ymax, stepX, stepY, valH, indexH, lowVal, highVal, strokeThickness, color, false),
                                BuilderTools.LineChart(xmin, ymin, ymax, stepX, stepY, valL, indexL, lowVal, highVal, strokeThickness, color, false) });
        }
示例#19
0
        static void Main(string[] args)
        {
            Utils.WriteLine(ConsoleColor.Cyan,"Finance.Web.Example");

            HtmlWeb htmlWeb = new HtmlWeb();
            List<string> companyTickerSymbolsWeb = new List<string>() 
            {   @"NASDAQ:GOOG",
                @"NASDAQ:CSCO", 
                @"NYSE:HTZ",
                @"NYSE:MMM",
                @"NYSE:ACE",
                @"NYSE:AGN",
                @"NYSE:AOC",
                @"NASDAQ:AMGN",
                @"NYSE:AIZ",
                //@"NYSE:HRB", // This symbol has & symbols which makes the parsing explode. 
                @"NASDAQ:AAPL"
            };

            List<string> listingHistoricalPricesFiles = new List<string>()
            {
                @"C:\tmp\CSCO\HistoricalPrices.htm",
                @"C:\tmp\GOOG\HistoricalPrices.htm"
            };

            List<string> listingStockSummaryFiles = new List<string>()
            {
                @"C:\tmp\CSCO\Summary.htm",
                @"C:\tmp\GOOG\Summary.htm"
            };

            List<string> listingStockFinancialStatementsFiles = new List<string>()
            {
                @"C:\tmp\CSCO\Financials.htm",
                @"C:\tmp\GOOG\Financials.htm"
            };

            List<string> listingCompanyNewsFiles = new List<string>()
            {
                @"C:\tmp\CSCO\News.htm",
                @"C:\tmp\GOOG\News.htm"
            };

            #region Loading Financials from the file system.
            foreach (var file in listingStockFinancialStatementsFiles)
            {
                HtmlDocument document = new HtmlDocument();
                document.Load(file);
                StockFinancials stockFinancials = new StockFinancials(document);

                Utils.WriteLine(ConsoleColor.Cyan, "{0} Cash Flows", file);

                foreach (var item in stockFinancials.CashFlowAnnualData.CashFlowValuesDatabase)
                {
                    Utils.WriteLine(ConsoleColor.Red, "{0}", item.Key);
                    item.Value.ForEach(p => Utils.WriteLine(ConsoleColor.Magenta, "{0}={1}={2} , ", p.Date, p.MemeberElementName, p.Value));
                }


            }
            #endregion 

            #region Loading historical prices from file system.
            foreach (var file in listingHistoricalPricesFiles)
            {
                HtmlDocument document = new HtmlDocument();
                document.Load(file);
                HistoricalPrices historicalPrices = new HistoricalPrices(document);

                historicalPrices.Prices.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "{0}", historicalPrices.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Description={0}", historicalPrices.Description);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                    Utils.WriteLine(ConsoleColor.Blue, "Date={0}", p.Date);
                    Utils.WriteLine(ConsoleColor.Blue, "Open={0}", p.Open);
                    Utils.WriteLine(ConsoleColor.Blue, "Low={0}", p.Low);
                    Utils.WriteLine(ConsoleColor.Blue, "High={0}", p.High);
                    Utils.WriteLine(ConsoleColor.Blue, "Close={0}", p.Close);
                    Utils.WriteLine(ConsoleColor.Blue, "Volume={0}", p.Volume);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                });

                //Console.WriteLine("Press <Enter> ...");
                //Console.ReadLine();
                //System.Threading.Thread.Sleep(1000);
            }
            #endregion

            #region Loading company news from file system.
            foreach (var file in listingCompanyNewsFiles)
            {
                HtmlDocument document = new HtmlDocument();
                document.Load(file);
                CompanyNews companyNews = new CompanyNews(document);


                companyNews.NewsItems.ForEach(p =>
                    {
                        Utils.WriteLine(ConsoleColor.Red, "==================================");
                        Utils.WriteLine(ConsoleColor.Cyan, "Title={0}", p.Title);
                        Utils.WriteLine(ConsoleColor.Cyan, "Snapshot={0}", p.Snapshot);
                        Utils.WriteLine(ConsoleColor.Cyan, "Source={0}", p.Source);
                        Utils.WriteLine(ConsoleColor.Cyan, "NewsLink={0}", p.NewsLink);

                        p.RelatedNewsLinks.ForEach(g =>
                            {
                                Utils.WriteLine(ConsoleColor.Green, "RelatedNewsLinks.AbsoluteUri={0}", g.AbsoluteUri);
                            });

                        Utils.WriteLine(ConsoleColor.Red, "==================================");

                    });
            }
            #endregion 

            #region Loading stock summary from file system.
            foreach (var file in listingStockSummaryFiles)
            {
                HtmlDocument document = new HtmlDocument();
                document.Load(file);
                StockSummary stockSummary = new StockSummary(document);

                Utils.WriteLine(ConsoleColor.Cyan, "RefernceId : " + stockSummary.RefernceId);

                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Text: " + stockSummary.CompanyNews.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Link: " + stockSummary.CompanyNews.Link.ToString());

                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.CompanyDescription: " + stockSummary.CompanySection.CompanyDescriptsion);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.ExternalCompanyProfile.Text: " + stockSummary.CompanySection.ExternalCompanyProfile.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.EternalCompanyProfile.Link: " + stockSummary.CompanySection.ExternalCompanyProfile.Link.ToString());

                stockSummary.Mangement.ForEach(delegate(Mangement n)
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "Name: " + n.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Age : " + n.Age);
                    Utils.WriteLine(ConsoleColor.Cyan, "Title : " + n.Title);
                    Utils.WriteLine(ConsoleColor.Cyan, "ProfileLink : " + n.ProfileLink);
                    Utils.WriteLine(ConsoleColor.Cyan, "");
                });

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Text : " + stockSummary.Sector.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Link : " + stockSummary.Sector.Link);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Text : " + stockSummary.Industry.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Link : " + stockSummary.Industry.Link);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingPrice : " + stockSummary.ListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePrice : " + stockSummary.ListingChangePrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePricePercentage : {0}%", stockSummary.ListingChangePricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingPrice : " + stockSummary.ExtendedListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPrice : " + stockSummary.ExtendedChangeListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPricePercentage : " + stockSummary.ExtendedChangeListingPricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingTime : " + stockSummary.ExtendedListingTime);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.CompanyName : " + stockSummary.CompanyHeader.CompanyName);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingType : " + stockSummary.CompanyHeader.ListingType);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingSymbol : " + stockSummary.CompanyHeader.ListingSymbol);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Range : {0} ", stockSummary.Range.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.FiftyTwoWeek : {0} ", stockSummary.FiftyTwoWeek.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Open : {0} ", stockSummary.Open);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Volume : {0} ", stockSummary.Volume);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Average : {0} ", stockSummary.Average);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.MarketCapital : {0} ", stockSummary.MarketCapital);

            }
            #endregion 

            #region Loading stock summary from web.
            foreach (var item in companyTickerSymbolsWeb)
            {
                string[] s = item.Split(new char[] { ':' });
                StockSummary stockSummary = new StockSummary(s[1], s[0]);


                Utils.WriteLine(ConsoleColor.Cyan, "RefernceId : " + stockSummary.RefernceId);

                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Text: " + stockSummary.CompanyNews.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Link: " + stockSummary.CompanyNews.Link.ToString());

                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.CompanyDescription: " + stockSummary.CompanySection.CompanyDescriptsion);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.ExternalCompanyProfile.Text: " + stockSummary.CompanySection.ExternalCompanyProfile.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.EternalCompanyProfile.Link: " + stockSummary.CompanySection.ExternalCompanyProfile.Link.ToString());

                stockSummary.Mangement.ForEach(delegate(Mangement n)
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "Name: " + n.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Age : " + n.Age);
                    Utils.WriteLine(ConsoleColor.Cyan, "Title : " + n.Title);
                    Utils.WriteLine(ConsoleColor.Cyan, "ProfileLink : " + n.ProfileLink);
                    Utils.WriteLine(ConsoleColor.Cyan, "");
                });

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Text : " + stockSummary.Sector.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Link : " + stockSummary.Sector.Link);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Text : " + stockSummary.Industry.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Link : " + stockSummary.Industry.Link);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingPrice : " + stockSummary.ListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePrice : " + stockSummary.ListingChangePrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePricePercentage : {0}%", stockSummary.ListingChangePricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingPrice : " + stockSummary.ExtendedListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPrice : " + stockSummary.ExtendedChangeListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPricePercentage : " + stockSummary.ExtendedChangeListingPricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingTime : " + stockSummary.ExtendedListingTime);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.CompanyName : " + stockSummary.CompanyHeader.CompanyName);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingType : " + stockSummary.CompanyHeader.ListingType);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingSymbol : " + stockSummary.CompanyHeader.ListingSymbol);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Range : {0} ", stockSummary.Range.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.FiftyTwoWeek : {0} ", stockSummary.FiftyTwoWeek.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Open : {0} ", stockSummary.Open);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Volume : {0} ", stockSummary.Volume);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Average : {0} ", stockSummary.Average);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.MarketCapital : {0} ", stockSummary.MarketCapital);
            }
            #endregion 

            #region Loading company news from the web
            foreach (var item in companyTickerSymbolsWeb)
            {
                string[] s = item.Split(new char[] { ':' });
                CompanyNews companyNews = new CompanyNews(s[1], s[0]);

                companyNews.NewsItems.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Red, "==================================");
                    Utils.WriteLine(ConsoleColor.Cyan, "Title={0}", p.Title);
                    Utils.WriteLine(ConsoleColor.Cyan, "Snapshot={0}", p.Snapshot);
                    Utils.WriteLine(ConsoleColor.Cyan, "Source={0}", p.Source);
                    Utils.WriteLine(ConsoleColor.Cyan, "NewsLink={0}", p.NewsLink);

                    p.RelatedNewsLinks.ForEach(g =>
                    {
                        Utils.WriteLine(ConsoleColor.Green, "RelatedNewsLinks.AbsoluteUri={0}", g.AbsoluteUri);
                    });

                    Utils.WriteLine(ConsoleColor.Red, "==================================");

                });
            }
            #endregion 

            #region Loading Financials from the web
            foreach (var stock in companyTickerSymbolsWeb)
            {
                string[] s = stock.Split(new char[] { ':' });
                StockFinancials stockFinancials = new StockFinancials(s[1], s[0]);

                Utils.WriteLine(ConsoleColor.Cyan, "{0} Cash Flows", stock);

                foreach (var item in stockFinancials.CashFlowAnnualData.CashFlowValuesDatabase)
                {
                    Utils.WriteLine(ConsoleColor.Red, "{0}", item.Key);
                    item.Value.ForEach(p => Utils.WriteLine(ConsoleColor.Magenta, "{0}={1}={2} , ", p.Date, p.MemeberElementName, p.Value));
                }

            }
            #endregion 
            //throw new Exception("Still working on making it this far.");
            #region  Loading historical prices from the web
            foreach (var item in companyTickerSymbolsWeb)
            {
                string[] s = item.Split(new char[] { ':' });
                HistoricalPrices historicalPrices = new HistoricalPrices(s[1], s[0]);


                historicalPrices.Prices.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "{0}", historicalPrices.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Description={0}", historicalPrices.Description);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                    Utils.WriteLine(ConsoleColor.Blue, "Date={0}", p.Date);
                    Utils.WriteLine(ConsoleColor.Blue, "Open={0}", p.Open);
                    Utils.WriteLine(ConsoleColor.Blue, "Low={0}", p.Low);
                    Utils.WriteLine(ConsoleColor.Blue, "High={0}", p.High);
                    Utils.WriteLine(ConsoleColor.Blue, "Close={0}", p.Close);
                    Utils.WriteLine(ConsoleColor.Blue, "Volume={0}", p.Volume);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                });

                //Console.WriteLine("Press <Enter> ...");
                //Console.ReadLine();

                s = item.Split(new char[] { ':' });
                historicalPrices = new HistoricalPrices(s[1], s[0]);
                historicalPrices.Refresh(new DateRange(new DateTime(2007, 1, 1), new DateTime(2009, 1, 1)),
                    1, HistoricalPeriod.Weekly, 200);

                historicalPrices.Prices.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "{0}", historicalPrices.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Description={0}", historicalPrices.Description);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                    Utils.WriteLine(ConsoleColor.Blue, "Date={0}", p.Date);
                    Utils.WriteLine(ConsoleColor.Blue, "Open={0}", p.Open);
                    Utils.WriteLine(ConsoleColor.Blue, "Low={0}", p.Low);
                    Utils.WriteLine(ConsoleColor.Blue, "High={0}", p.High);
                    Utils.WriteLine(ConsoleColor.Blue, "Close={0}", p.Close);
                    Utils.WriteLine(ConsoleColor.Blue, "Volume={0}", p.Volume);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                });

                //Console.WriteLine("Press <Enter> ...");
                //Console.ReadLine();

                s = item.Split(new char[] { ':' });
                historicalPrices = new HistoricalPrices(s[1], s[0]);
                historicalPrices.Refresh(new DateRange(new DateTime(2005, 2, 23), new DateTime(2008, 6, 3)),
                    1, HistoricalPeriod.Daily, 200);

                historicalPrices.Prices.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "{0}", historicalPrices.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Description={0}", historicalPrices.Description);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                    Utils.WriteLine(ConsoleColor.Blue, "Date={0}", p.Date);
                    Utils.WriteLine(ConsoleColor.Blue, "Open={0}", p.Open);
                    Utils.WriteLine(ConsoleColor.Blue, "Low={0}", p.Low);
                    Utils.WriteLine(ConsoleColor.Blue, "High={0}", p.High);
                    Utils.WriteLine(ConsoleColor.Blue, "Close={0}", p.Close);
                    Utils.WriteLine(ConsoleColor.Blue, "Volume={0}", p.Volume);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                });

                //Console.WriteLine("Press <Enter> ...");
                //Console.ReadLine();

            }
            #endregion 

          
            #region Loading from the web.
            foreach (var item in companyTickerSymbolsWeb)
            {
                HtmlDocument document = htmlWeb.Load(googleStockQuery + item);

                #region StockSummary Example
                StockSummary stockSummary = new StockSummary(document);
                Utils.WriteLine(ConsoleColor.Cyan, "RefernceId : " + stockSummary.RefernceId);

                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Text: " + stockSummary.CompanyNews.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Link: " + stockSummary.CompanyNews.Link.ToString());

                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.CompanyDescription: " + stockSummary.CompanySection.CompanyDescriptsion);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.ExternalCompanyProfile.Text: " + stockSummary.CompanySection.ExternalCompanyProfile.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.EternalCompanyProfile.Link: " + stockSummary.CompanySection.ExternalCompanyProfile.Link.ToString());

                stockSummary.Mangement.ForEach(delegate(Mangement n)
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "Name: " + n.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Age : " + n.Age);
                    Utils.WriteLine(ConsoleColor.Cyan, "Title : " + n.Title);
                    Utils.WriteLine(ConsoleColor.Cyan, "ProfileLink : " + n.ProfileLink);
                    Utils.WriteLine(ConsoleColor.Cyan, "");
                });

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Text : " + stockSummary.Sector.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Link : " + stockSummary.Sector.Link);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Text : " + stockSummary.Industry.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Link : " + stockSummary.Industry.Link);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingPrice : " + stockSummary.ListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePrice : " + stockSummary.ListingChangePrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePricePercentage : {0}%", stockSummary.ListingChangePricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingPrice : " + stockSummary.ExtendedListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPrice : " + stockSummary.ExtendedChangeListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPricePercentage : " + stockSummary.ExtendedChangeListingPricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingTime : " + stockSummary.ExtendedListingTime);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.CompanyName : " + stockSummary.CompanyHeader.CompanyName);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingType : " + stockSummary.CompanyHeader.ListingType);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingSymbol : " + stockSummary.CompanyHeader.ListingSymbol);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Range : {0} ", stockSummary.Range.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.FiftyTwoWeek : {0} ", stockSummary.FiftyTwoWeek.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Open : {0} ", stockSummary.Open);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Volume : {0} ", stockSummary.Volume);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Average : {0} ", stockSummary.Average);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.MarketCapital : {0} ", stockSummary.MarketCapital);


                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.P_E : {0} ", stockSummary.P_E);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.P_E : {0} ", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Dividend : {0}", stockSummary.Dividend);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.Dividend : {0}", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Yield : {0} ", stockSummary.Yield);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.Yield : {0} ", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.EPS : {0} ", stockSummary.EPS);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.EPS : {0} ", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Shares : {0} ", stockSummary.Shares);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.Shares : {0} ", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Beta : {0} ", stockSummary.Beta);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.Beta : {0} ", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.InterestOwned : {0} %", stockSummary.InterestOwned);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.InterestOwned : {0} %", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.HomePage : {0} ", stockSummary.HomePage.ToString());
                #endregion 

                #region HistoricalPrices Example
                document = htmlWeb.Load(googleStockQueryHistoricalPrices + item);
                HistoricalPrices historicalPrices = new HistoricalPrices(document);
                #endregion

                #region RelatedCompanies Example
                document = htmlWeb.Load(googleStockQueryRelatedCompanies + item);
                RelatedCompanies relatedCompanies = new RelatedCompanies(document);
                #endregion 

                #region StockFinancials Example
                document = htmlWeb.Load(googleStockQueryFinancials + item);
                StockFinancials stockFinancials = new StockFinancials(document);
                #endregion 

                #region StockNews Example
                document = htmlWeb.Load(googleStockQueryCompanyNews + item);
                CompanyNews stockNews = new CompanyNews(document);
                
                #endregion 

                //Console.WriteLine("Press <Enter> ...");
                //Console.ReadLine();

            }
            #endregion
            
            Utils.WriteLine(ConsoleColor.Red, "Press <Enter> to Exit ...");
            Console.ReadLine();
        }
        public StockScannerAgent(List <string> stockList, NetworkDataReader reader, SqlDataReader sqlReader)
        {
            StockList  = stockList;
            _reader    = reader;
            _sqlReader = sqlReader;
            _source    = new CancellationTokenSource();
            var token = _source.Token;

            Scanner = new Task(() =>
            {
                int i = 0;
                while (i < _initialSleep)
                {
                    i++;
                    System.Threading.Thread.Sleep(1000);
                    Console.WriteLine("Currently sleep, give resource to other threads, " + i + " seconds left");
                }
                Console.WriteLine("The current List contains " + stockList.Count + " stocks");
                i = 0;
                while (true)
                {
                    if (stockList.Count <= 0)
                    {
                        break;
                    }
                    if (token.IsCancellationRequested)
                    {
                        token.ThrowIfCancellationRequested();
                    }
                    int status = 1; //sqlReader.IsStockAnalysedRecently(stockList[i]);

                    switch (status)
                    {
                    case 0:     // database has no record, need to insert
                        {
                            StockSummary tmp = _reader.FetchStockTrendSummaryObject(stockList[i]);
                            GeneralTools.AnalyseStockTrend(ref tmp);
                            GeneralTools.AnalyseStockTrendLine(ref tmp);
                            _sqlReader.UpdateStockAnalysis(tmp, 0);
                            Console.WriteLine("Stock " + stockList[i] + " inserted!");
                            break;
                        }

                    case 1:     // database needs to update
                        {
                            StockSummary tmp = _reader.FetchStockTrendSummaryObject(stockList[i]);
                            GeneralTools.AnalyseStockTrend(ref tmp);
                            GeneralTools.AnalyseStockTrendLine(ref tmp);
                            _sqlReader.UpdateStockAnalysis(tmp, 1);
                            Console.WriteLine("Stock " + stockList[i] + " updated!");
                            break;
                        }

                    case 2:
                        {
                            Console.WriteLine("Stock " + stockList[i] + " up to date!");
                            break;
                        }

                    default:
                        break;
                    }
                    Console.WriteLine("current scanned stock: " + stockList[i]);
                    i++;
                    if (i == stockList.Count)
                    {
                        i = 0;
                    }
                    System.Threading.Thread.Sleep(_scanInterval * 1000);
                }
            }, _source.Token);
            Start();
        }
示例#21
0
        static void Main(string[] args)
        {
            Utils.WriteLine(ConsoleColor.Cyan, "Finance.Web.Example");

            HtmlWeb       htmlWeb = new HtmlWeb();
            List <string> companyTickerSymbolsWeb = new List <string>()
            {
                @"NASDAQ:GOOG",
                @"NASDAQ:CSCO",
                @"NYSE:HTZ",
                @"NYSE:MMM",
                @"NYSE:ACE",
                @"NYSE:AGN",
                @"NYSE:AOC",
                @"NASDAQ:AMGN",
                @"NYSE:AIZ",
                //@"NYSE:HRB", // This symbol has & symbols which makes the parsing explode.
                @"NASDAQ:AAPL"
            };

            List <string> listingHistoricalPricesFiles = new List <string>()
            {
                @"C:\tmp\CSCO\HistoricalPrices.htm",
                @"C:\tmp\GOOG\HistoricalPrices.htm"
            };

            List <string> listingStockSummaryFiles = new List <string>()
            {
                @"C:\tmp\CSCO\Summary.htm",
                @"C:\tmp\GOOG\Summary.htm"
            };

            List <string> listingStockFinancialStatementsFiles = new List <string>()
            {
                @"C:\tmp\CSCO\Financials.htm",
                @"C:\tmp\GOOG\Financials.htm"
            };

            List <string> listingCompanyNewsFiles = new List <string>()
            {
                @"C:\tmp\CSCO\News.htm",
                @"C:\tmp\GOOG\News.htm"
            };

            #region Loading Financials from the file system.
            foreach (var file in listingStockFinancialStatementsFiles)
            {
                HtmlDocument document = new HtmlDocument();
                document.Load(file);
                StockFinancials stockFinancials = new StockFinancials(document);

                Utils.WriteLine(ConsoleColor.Cyan, "{0} Cash Flows", file);

                foreach (var item in stockFinancials.CashFlowAnnualData.CashFlowValuesDatabase)
                {
                    Utils.WriteLine(ConsoleColor.Red, "{0}", item.Key);
                    item.Value.ForEach(p => Utils.WriteLine(ConsoleColor.Magenta, "{0}={1}={2} , ", p.Date, p.MemeberElementName, p.Value));
                }
            }
            #endregion

            #region Loading historical prices from file system.
            foreach (var file in listingHistoricalPricesFiles)
            {
                HtmlDocument document = new HtmlDocument();
                document.Load(file);
                HistoricalPrices historicalPrices = new HistoricalPrices(document);

                historicalPrices.Prices.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "{0}", historicalPrices.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Description={0}", historicalPrices.Description);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                    Utils.WriteLine(ConsoleColor.Blue, "Date={0}", p.Date);
                    Utils.WriteLine(ConsoleColor.Blue, "Open={0}", p.Open);
                    Utils.WriteLine(ConsoleColor.Blue, "Low={0}", p.Low);
                    Utils.WriteLine(ConsoleColor.Blue, "High={0}", p.High);
                    Utils.WriteLine(ConsoleColor.Blue, "Close={0}", p.Close);
                    Utils.WriteLine(ConsoleColor.Blue, "Volume={0}", p.Volume);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                });

                //Console.WriteLine("Press <Enter> ...");
                //Console.ReadLine();
                //System.Threading.Thread.Sleep(1000);
            }
            #endregion

            #region Loading company news from file system.
            foreach (var file in listingCompanyNewsFiles)
            {
                HtmlDocument document = new HtmlDocument();
                document.Load(file);
                CompanyNews companyNews = new CompanyNews(document);


                companyNews.NewsItems.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Red, "==================================");
                    Utils.WriteLine(ConsoleColor.Cyan, "Title={0}", p.Title);
                    Utils.WriteLine(ConsoleColor.Cyan, "Snapshot={0}", p.Snapshot);
                    Utils.WriteLine(ConsoleColor.Cyan, "Source={0}", p.Source);
                    Utils.WriteLine(ConsoleColor.Cyan, "NewsLink={0}", p.NewsLink);

                    p.RelatedNewsLinks.ForEach(g =>
                    {
                        Utils.WriteLine(ConsoleColor.Green, "RelatedNewsLinks.AbsoluteUri={0}", g.AbsoluteUri);
                    });

                    Utils.WriteLine(ConsoleColor.Red, "==================================");
                });
            }
            #endregion

            #region Loading stock summary from file system.
            foreach (var file in listingStockSummaryFiles)
            {
                HtmlDocument document = new HtmlDocument();
                document.Load(file);
                StockSummary stockSummary = new StockSummary(document);

                Utils.WriteLine(ConsoleColor.Cyan, "RefernceId : " + stockSummary.RefernceId);

                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Text: " + stockSummary.CompanyNews.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Link: " + stockSummary.CompanyNews.Link.ToString());

                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.CompanyDescription: " + stockSummary.CompanySection.CompanyDescriptsion);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.ExternalCompanyProfile.Text: " + stockSummary.CompanySection.ExternalCompanyProfile.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.EternalCompanyProfile.Link: " + stockSummary.CompanySection.ExternalCompanyProfile.Link.ToString());

                stockSummary.Mangement.ForEach(delegate(Mangement n)
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "Name: " + n.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Age : " + n.Age);
                    Utils.WriteLine(ConsoleColor.Cyan, "Title : " + n.Title);
                    Utils.WriteLine(ConsoleColor.Cyan, "ProfileLink : " + n.ProfileLink);
                    Utils.WriteLine(ConsoleColor.Cyan, "");
                });

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Text : " + stockSummary.Sector.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Link : " + stockSummary.Sector.Link);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Text : " + stockSummary.Industry.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Link : " + stockSummary.Industry.Link);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingPrice : " + stockSummary.ListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePrice : " + stockSummary.ListingChangePrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePricePercentage : {0}%", stockSummary.ListingChangePricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingPrice : " + stockSummary.ExtendedListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPrice : " + stockSummary.ExtendedChangeListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPricePercentage : " + stockSummary.ExtendedChangeListingPricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingTime : " + stockSummary.ExtendedListingTime);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.CompanyName : " + stockSummary.CompanyHeader.CompanyName);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingType : " + stockSummary.CompanyHeader.ListingType);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingSymbol : " + stockSummary.CompanyHeader.ListingSymbol);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Range : {0} ", stockSummary.Range.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.FiftyTwoWeek : {0} ", stockSummary.FiftyTwoWeek.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Open : {0} ", stockSummary.Open);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Volume : {0} ", stockSummary.Volume);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Average : {0} ", stockSummary.Average);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.MarketCapital : {0} ", stockSummary.MarketCapital);
            }
            #endregion

            #region Loading stock summary from web.
            foreach (var item in companyTickerSymbolsWeb)
            {
                string[]     s            = item.Split(new char[] { ':' });
                StockSummary stockSummary = new StockSummary(s[1], s[0]);


                Utils.WriteLine(ConsoleColor.Cyan, "RefernceId : " + stockSummary.RefernceId);

                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Text: " + stockSummary.CompanyNews.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Link: " + stockSummary.CompanyNews.Link.ToString());

                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.CompanyDescription: " + stockSummary.CompanySection.CompanyDescriptsion);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.ExternalCompanyProfile.Text: " + stockSummary.CompanySection.ExternalCompanyProfile.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.EternalCompanyProfile.Link: " + stockSummary.CompanySection.ExternalCompanyProfile.Link.ToString());

                stockSummary.Mangement.ForEach(delegate(Mangement n)
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "Name: " + n.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Age : " + n.Age);
                    Utils.WriteLine(ConsoleColor.Cyan, "Title : " + n.Title);
                    Utils.WriteLine(ConsoleColor.Cyan, "ProfileLink : " + n.ProfileLink);
                    Utils.WriteLine(ConsoleColor.Cyan, "");
                });

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Text : " + stockSummary.Sector.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Link : " + stockSummary.Sector.Link);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Text : " + stockSummary.Industry.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Link : " + stockSummary.Industry.Link);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingPrice : " + stockSummary.ListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePrice : " + stockSummary.ListingChangePrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePricePercentage : {0}%", stockSummary.ListingChangePricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingPrice : " + stockSummary.ExtendedListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPrice : " + stockSummary.ExtendedChangeListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPricePercentage : " + stockSummary.ExtendedChangeListingPricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingTime : " + stockSummary.ExtendedListingTime);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.CompanyName : " + stockSummary.CompanyHeader.CompanyName);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingType : " + stockSummary.CompanyHeader.ListingType);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingSymbol : " + stockSummary.CompanyHeader.ListingSymbol);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Range : {0} ", stockSummary.Range.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.FiftyTwoWeek : {0} ", stockSummary.FiftyTwoWeek.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Open : {0} ", stockSummary.Open);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Volume : {0} ", stockSummary.Volume);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Average : {0} ", stockSummary.Average);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.MarketCapital : {0} ", stockSummary.MarketCapital);
            }
            #endregion

            #region Loading company news from the web
            foreach (var item in companyTickerSymbolsWeb)
            {
                string[]    s           = item.Split(new char[] { ':' });
                CompanyNews companyNews = new CompanyNews(s[1], s[0]);

                companyNews.NewsItems.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Red, "==================================");
                    Utils.WriteLine(ConsoleColor.Cyan, "Title={0}", p.Title);
                    Utils.WriteLine(ConsoleColor.Cyan, "Snapshot={0}", p.Snapshot);
                    Utils.WriteLine(ConsoleColor.Cyan, "Source={0}", p.Source);
                    Utils.WriteLine(ConsoleColor.Cyan, "NewsLink={0}", p.NewsLink);

                    p.RelatedNewsLinks.ForEach(g =>
                    {
                        Utils.WriteLine(ConsoleColor.Green, "RelatedNewsLinks.AbsoluteUri={0}", g.AbsoluteUri);
                    });

                    Utils.WriteLine(ConsoleColor.Red, "==================================");
                });
            }
            #endregion

            #region Loading Financials from the web
            foreach (var stock in companyTickerSymbolsWeb)
            {
                string[]        s = stock.Split(new char[] { ':' });
                StockFinancials stockFinancials = new StockFinancials(s[1], s[0]);

                Utils.WriteLine(ConsoleColor.Cyan, "{0} Cash Flows", stock);

                foreach (var item in stockFinancials.CashFlowAnnualData.CashFlowValuesDatabase)
                {
                    Utils.WriteLine(ConsoleColor.Red, "{0}", item.Key);
                    item.Value.ForEach(p => Utils.WriteLine(ConsoleColor.Magenta, "{0}={1}={2} , ", p.Date, p.MemeberElementName, p.Value));
                }
            }
            #endregion
            //throw new Exception("Still working on making it this far.");
            #region  Loading historical prices from the web
            foreach (var item in companyTickerSymbolsWeb)
            {
                string[]         s = item.Split(new char[] { ':' });
                HistoricalPrices historicalPrices = new HistoricalPrices(s[1], s[0]);


                historicalPrices.Prices.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "{0}", historicalPrices.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Description={0}", historicalPrices.Description);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                    Utils.WriteLine(ConsoleColor.Blue, "Date={0}", p.Date);
                    Utils.WriteLine(ConsoleColor.Blue, "Open={0}", p.Open);
                    Utils.WriteLine(ConsoleColor.Blue, "Low={0}", p.Low);
                    Utils.WriteLine(ConsoleColor.Blue, "High={0}", p.High);
                    Utils.WriteLine(ConsoleColor.Blue, "Close={0}", p.Close);
                    Utils.WriteLine(ConsoleColor.Blue, "Volume={0}", p.Volume);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                });

                //Console.WriteLine("Press <Enter> ...");
                //Console.ReadLine();

                s = item.Split(new char[] { ':' });
                historicalPrices = new HistoricalPrices(s[1], s[0]);
                historicalPrices.Refresh(new DateRange(new DateTime(2007, 1, 1), new DateTime(2009, 1, 1)),
                                         1, HistoricalPeriod.Weekly, 200);

                historicalPrices.Prices.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "{0}", historicalPrices.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Description={0}", historicalPrices.Description);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                    Utils.WriteLine(ConsoleColor.Blue, "Date={0}", p.Date);
                    Utils.WriteLine(ConsoleColor.Blue, "Open={0}", p.Open);
                    Utils.WriteLine(ConsoleColor.Blue, "Low={0}", p.Low);
                    Utils.WriteLine(ConsoleColor.Blue, "High={0}", p.High);
                    Utils.WriteLine(ConsoleColor.Blue, "Close={0}", p.Close);
                    Utils.WriteLine(ConsoleColor.Blue, "Volume={0}", p.Volume);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                });

                //Console.WriteLine("Press <Enter> ...");
                //Console.ReadLine();

                s = item.Split(new char[] { ':' });
                historicalPrices = new HistoricalPrices(s[1], s[0]);
                historicalPrices.Refresh(new DateRange(new DateTime(2005, 2, 23), new DateTime(2008, 6, 3)),
                                         1, HistoricalPeriod.Daily, 200);

                historicalPrices.Prices.ForEach(p =>
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "{0}", historicalPrices.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Description={0}", historicalPrices.Description);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                    Utils.WriteLine(ConsoleColor.Blue, "Date={0}", p.Date);
                    Utils.WriteLine(ConsoleColor.Blue, "Open={0}", p.Open);
                    Utils.WriteLine(ConsoleColor.Blue, "Low={0}", p.Low);
                    Utils.WriteLine(ConsoleColor.Blue, "High={0}", p.High);
                    Utils.WriteLine(ConsoleColor.Blue, "Close={0}", p.Close);
                    Utils.WriteLine(ConsoleColor.Blue, "Volume={0}", p.Volume);
                    Utils.WriteLine(ConsoleColor.Cyan, "==================================");
                });

                //Console.WriteLine("Press <Enter> ...");
                //Console.ReadLine();
            }
            #endregion


            #region Loading from the web.
            foreach (var item in companyTickerSymbolsWeb)
            {
                HtmlDocument document = htmlWeb.Load(googleStockQuery + item);

                #region StockSummary Example
                StockSummary stockSummary = new StockSummary(document);
                Utils.WriteLine(ConsoleColor.Cyan, "RefernceId : " + stockSummary.RefernceId);

                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Text: " + stockSummary.CompanyNews.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "Company News.Link: " + stockSummary.CompanyNews.Link.ToString());

                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.CompanyDescription: " + stockSummary.CompanySection.CompanyDescriptsion);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.ExternalCompanyProfile.Text: " + stockSummary.CompanySection.ExternalCompanyProfile.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "CompanySection.EternalCompanyProfile.Link: " + stockSummary.CompanySection.ExternalCompanyProfile.Link.ToString());

                stockSummary.Mangement.ForEach(delegate(Mangement n)
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "Name: " + n.Name);
                    Utils.WriteLine(ConsoleColor.Cyan, "Age : " + n.Age);
                    Utils.WriteLine(ConsoleColor.Cyan, "Title : " + n.Title);
                    Utils.WriteLine(ConsoleColor.Cyan, "ProfileLink : " + n.ProfileLink);
                    Utils.WriteLine(ConsoleColor.Cyan, "");
                });

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Text : " + stockSummary.Sector.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Sector.Link : " + stockSummary.Sector.Link);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Text : " + stockSummary.Industry.Text);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Industry.Link : " + stockSummary.Industry.Link);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingPrice : " + stockSummary.ListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePrice : " + stockSummary.ListingChangePrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ListingChangePricePercentage : {0}%", stockSummary.ListingChangePricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingPrice : " + stockSummary.ExtendedListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPrice : " + stockSummary.ExtendedChangeListingPrice);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedChangeListingPricePercentage : " + stockSummary.ExtendedChangeListingPricePercentage);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.ExtendedListingTime : " + stockSummary.ExtendedListingTime);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.CompanyName : " + stockSummary.CompanyHeader.CompanyName);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingType : " + stockSummary.CompanyHeader.ListingType);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.CompanyHeader.ListingSymbol : " + stockSummary.CompanyHeader.ListingSymbol);


                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Range : {0} ", stockSummary.Range.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.FiftyTwoWeek : {0} ", stockSummary.FiftyTwoWeek.ToString());
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Open : {0} ", stockSummary.Open);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Volume : {0} ", stockSummary.Volume);
                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Average : {0} ", stockSummary.Average);

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.MarketCapital : {0} ", stockSummary.MarketCapital);


                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.P_E : {0} ", stockSummary.P_E);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.P_E : {0} ", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Dividend : {0}", stockSummary.Dividend);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.Dividend : {0}", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Yield : {0} ", stockSummary.Yield);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.Yield : {0} ", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.EPS : {0} ", stockSummary.EPS);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.EPS : {0} ", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Shares : {0} ", stockSummary.Shares);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.Shares : {0} ", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.Beta : {0} ", stockSummary.Beta);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.Beta : {0} ", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                try
                {
                    Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.InterestOwned : {0} %", stockSummary.InterestOwned);
                }
                catch (DataNotAvailable ex)
                {
                    Utils.WriteLine(ConsoleColor.Red, "stockSummary.InterestOwned : {0} %", "-");
                    Utils.WriteLine(ConsoleColor.DarkMagenta, ex.PotentialReason);
                }

                Utils.WriteLine(ConsoleColor.Cyan, "stockSummary.HomePage : {0} ", stockSummary.HomePage.ToString());
                #endregion

                #region HistoricalPrices Example
                document = htmlWeb.Load(googleStockQueryHistoricalPrices + item);
                HistoricalPrices historicalPrices = new HistoricalPrices(document);
                #endregion

                #region RelatedCompanies Example
                document = htmlWeb.Load(googleStockQueryRelatedCompanies + item);
                RelatedCompanies relatedCompanies = new RelatedCompanies(document);
                #endregion

                #region StockFinancials Example
                document = htmlWeb.Load(googleStockQueryFinancials + item);
                StockFinancials stockFinancials = new StockFinancials(document);
                #endregion

                #region StockNews Example
                document = htmlWeb.Load(googleStockQueryCompanyNews + item);
                CompanyNews stockNews = new CompanyNews(document);

                #endregion

                //Console.WriteLine("Press <Enter> ...");
                //Console.ReadLine();
            }
            #endregion

            Utils.WriteLine(ConsoleColor.Red, "Press <Enter> to Exit ...");
            Console.ReadLine();
        }