From 95d60aa9d17117750ace4921a2134cf587ce85a8 Mon Sep 17 00:00:00 2001 From: Sean Date: Thu, 6 Nov 2025 08:14:53 -0500 Subject: [PATCH] Update comments --- .../MarketDataLib/Helper/MarketDataHelper.cs | 197 +++++++++--------- 1 file changed, 101 insertions(+), 96 deletions(-) diff --git a/MarketData/MarketDataLib/Helper/MarketDataHelper.cs b/MarketData/MarketDataLib/Helper/MarketDataHelper.cs index 9e1f9a6..4475c89 100755 --- a/MarketData/MarketDataLib/Helper/MarketDataHelper.cs +++ b/MarketData/MarketDataLib/Helper/MarketDataHelper.cs @@ -173,115 +173,120 @@ namespace MarketData.Helper MDTrace.WriteLine(LogLevel.DEBUG, String.Format("MarketData.GetPremarketData: Done, took {0}(ms)", profiler.End())); } } -// ****************************************************************************************************************************************************************************** -// ************************************************************************** Z A C K S E A R N I N G S A N N O U N C E M E N T S ******************************************* -// ****************************************************************************************************************************************************************************** - public static EarningsAnnouncements GetEarningsAnnouncements(String symbol) - { - Profiler profiler = new Profiler(); - HttpNetResponse httpNetResponse=null; - EarningsAnnouncements earningsAnnouncements=new EarningsAnnouncements(); - MemoryStream memoryStream=null; - try + // ****************************************************************************************************************************************************************************** + // ************************************************************************** Z A C K S E A R N I N G S A N N O U N C E M E N T S ******************************************* + // ****************************************************************************************************************************************************************************** + /// + /// This retrieves earnings announcements from Zacks Research and is used during the nighyly process. + /// + /// + /// + public static EarningsAnnouncements GetEarningsAnnouncements(String symbol) { - StringBuilder sb=new StringBuilder(); - sb.Append("https://www.zacks.com/stock/research/").Append(symbol).Append("/earnings-announcements"); - String strRequest=sb.ToString(); - httpNetResponse=HttpNetRequest.GetRequestNoEncodingV4(strRequest); - if(!httpNetResponse.Success) + Profiler profiler = new Profiler(); + HttpNetResponse httpNetResponse = null; + EarningsAnnouncements earningsAnnouncements = new EarningsAnnouncements(); + MemoryStream memoryStream = null; + try { - MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Request:{0} failed with status {1}",httpNetResponse.Request,httpNetResponse.StatusCode)); - return null; - } - String responseString=httpNetResponse.ResponseString; -// get next earnings date - byte[] streamBytes = Encoding.ASCII.GetBytes(httpNetResponse.ResponseString); - memoryStream = new MemoryStream(streamBytes); - HtmlDocument htmlDocument = new HtmlDocument(); - htmlDocument.Load(memoryStream); - HtmlNodeCollection table = htmlDocument.DocumentNode.SelectNodes("//*[@class=\"key-expected-earnings-data-module\"]"); - if (null != table && 0 != table.Count) - { - HtmlNodeCollection rows = table[0].SelectNodes(".//tr"); - String[] requiredElements={"Report Date","Period Ending","Zacks Consensus Estimate","Earnings ESP"}; - if(2==rows.Count) + StringBuilder sb = new StringBuilder(); + sb.Append("https://www.zacks.com/stock/research/").Append(symbol).Append("/earnings-announcements"); + String strRequest = sb.ToString(); + httpNetResponse = HttpNetRequest.GetRequestNoEncodingV4(strRequest); + if (!httpNetResponse.Success) { - HtmlNodeCollection headerColumns = rows[0].SelectNodes(".//th"); - if (null!=headerColumns && 0!=headerColumns.Count && HeaderContains(headerColumns,requiredElements)) + MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Request:{0} failed with status {1}", httpNetResponse.Request, httpNetResponse.StatusCode)); + return null; + } + String responseString = httpNetResponse.ResponseString; + // get next earnings date + byte[] streamBytes = Encoding.ASCII.GetBytes(httpNetResponse.ResponseString); + memoryStream = new MemoryStream(streamBytes); + HtmlDocument htmlDocument = new HtmlDocument(); + htmlDocument.Load(memoryStream); + HtmlNodeCollection table = htmlDocument.DocumentNode.SelectNodes("//*[@class=\"key-expected-earnings-data-module\"]"); + if (null != table && 0 != table.Count) + { + HtmlNodeCollection rows = table[0].SelectNodes(".//tr"); + String[] requiredElements = { "Report Date", "Period Ending", "Zacks Consensus Estimate", "Earnings ESP" }; + if (2 == rows.Count) { - HtmlNodeCollection dataColumns = rows[1].ChildNodes; - String[] reportElements=dataColumns[1].InnerText.Split(' '); - String reportDate=reportElements[0]; - if(!"NA".Equals(reportDate)) + HtmlNodeCollection headerColumns = rows[0].SelectNodes(".//th"); + if (null != headerColumns && 0 != headerColumns.Count && HeaderContains(headerColumns, requiredElements)) { - String[] formats=new[] {"MM/yyyy","M/yyyy"}; - String periodEnding=dataColumns[3].InnerText; - EarningsAnnouncement earningsAnnouncement=new EarningsAnnouncement(); - earningsAnnouncement.Symbol=symbol; - earningsAnnouncement.Date=Utility.ParseDate(reportDate); - earningsAnnouncement.PeriodEnding=DateTime.ParseExact(periodEnding, formats, new System.Globalization.CultureInfo("en-US"),DateTimeStyles.AssumeLocal); - if(reportElements[1].Equals("(AMC)"))earningsAnnouncement.Time="After Close"; - else if(reportElements[1].Equals("(NONE)"))earningsAnnouncement.Time="Before Open"; - else earningsAnnouncement.Time=reportElements[1]; - earningsAnnouncements.Add(earningsAnnouncement); + HtmlNodeCollection dataColumns = rows[1].ChildNodes; + String[] reportElements = dataColumns[1].InnerText.Split(' '); + String reportDate = reportElements[0]; + if (!"NA".Equals(reportDate)) + { + String[] formats = new[] { "MM/yyyy", "M/yyyy" }; + String periodEnding = dataColumns[3].InnerText; + EarningsAnnouncement earningsAnnouncement = new EarningsAnnouncement(); + earningsAnnouncement.Symbol = symbol; + earningsAnnouncement.Date = Utility.ParseDate(reportDate); + earningsAnnouncement.PeriodEnding = DateTime.ParseExact(periodEnding, formats, new System.Globalization.CultureInfo("en-US"), DateTimeStyles.AssumeLocal); + if (reportElements[1].Equals("(AMC)")) earningsAnnouncement.Time = "After Close"; + else if (reportElements[1].Equals("(NONE)")) earningsAnnouncement.Time = "Before Open"; + else earningsAnnouncement.Time = reportElements[1]; + earningsAnnouncements.Add(earningsAnnouncement); + } } } } - } -// get historical - responseString=Utility.KeepAfter(responseString,"earnings_announcements_earnings_table"); - if(null==responseString)return null; - responseString=Utility.KeepBefore(responseString,"] ]"); - if(null==responseString)return null; - responseString=responseString+"]"; - responseString=Utility.KeepAfter(responseString,"[ ["); - if(null==responseString)return null; - responseString="["+responseString; - responseString=Utility.RemoveDivs(responseString); - if(null==responseString)return null; - String[] items=responseString.Split(']'); - for(int index=0;index