public async Task <string> SelectRandomGoodFirms() { _logger.LogInformation("Starting to select firms for the requester"); List <PiotroskiScoreMd> selectedFirms; try { selectedFirms = _connectionHandlerCF.Get(r => r.Rating >= 7 && r.FYear == DateTime.Now.Year) .ToList(); if (selectedFirms == null || !selectedFirms.Any()) { selectedFirms = _connectionHandlerCF.Get(r => r.Rating >= 7 && r.FYear == DateTime.Now.Year - 1) .ToList(); } if (!selectedFirms.Any()) { return(""); } } catch (Exception ex) { _logger.LogCritical("Error while getting data from MongoDb from Collection PiotroskiScore"); _logger.LogCritical(ex.Message); return(""); } selectedFirms.Shuffle(); selectedFirms = selectedFirms.Take(4) .OrderByDescending(r => r.Rating) .ThenByDescending(r => r.Revenue) .ToList(); var messageString = new StringBuilder(); messageString.Append("Here are a few recommendations for you.\n"); foreach (var selectedFirm in selectedFirms) { var companyName = await _resolveCompanyName.ResolveTicker(selectedFirm.Ticker); var symbol = Regex.Replace(selectedFirm.Ticker, ".{1}", "$0 "); messageString.Append($"{companyName} with ticker {symbol} has Piotrosk-F Score of {selectedFirm.Rating}\n"); QuotesFromWorldTrading quotes = await _obtainStockQuote.GetStockQuotes(selectedFirm.Ticker); var companyStats = await ObtainCompanyStats(selectedFirm.Ticker); if (quotes != null && quotes.Data.Any()) { var currentPrice = (float)quotes.Data[0].Price; messageString.Append($"It last traded at ${Math.Round(currentPrice,2)}. "); } if (companyStats != null && companyStats.week52high != 0) { var week52Low = Math.Round(companyStats.week52low, 2); var week52High = Math.Round(companyStats.week52high, 2); var peRatio = companyStats.peRatio == null ? 0 : companyStats.peRatio; messageString.Append($"52 week range is between ${week52Low} and {week52High} and P E Ratio is {peRatio}. "); } messageString.Append("\n\n"); } return(messageString.ToString()); }
private WebhookResponse BuildOutputMessage(QuotesFromWorldTrading indexData) { StringBuilder tmpStr = new StringBuilder(); if (indexData.Data.Length >= 1) { var dateToUse = indexData.Data[0].Last_trade_time == null?DateTime.Parse("01-01-2000") : (DateTime)indexData.Data[0].Last_trade_time; tmpStr.Append("As of "); tmpStr.Append($"{dateToUse.ToString("MMMM dd, hh:mm tt")} EST "); } foreach (var idxData in indexData.Data) { float price = idxData.Price != null ? (float)idxData.Price : 0; float dayChange = idxData.Day_change == null ? 0 : (float)idxData.Day_change; tmpStr.Append($"{idxData.Name} is at {Math.Round(price, 0)}. "); tmpStr.Append(idxData.Day_change > 0 ? " Up by " : "Down by "); tmpStr.Append($"{Math.Abs(Math.Round(dayChange, 0))} points.\n\n "); } //var xml = await new Ssml().Say("As of ") // .Say(indexData.Data[0].Last_trade_time).As(DateFormat.MonthDayYear) // .Say(indexData.Data[0].Last_trade_time.TimeOfDay).In(TimeFormat.TwelveHour) // .Say(indexData.Data[0].Name + " is at ") // .Say(Convert.ToInt32(indexData.Data[0].Price)).AsCardinalNumber() // .Say(indexData.Data[0].Day_change > 0 ? " Up by " : " Down by ") // .Say(Convert.ToInt32(Math.Abs(Math.Round(indexData.Data[0].Day_change)))).AsCardinalNumber() // .Say(indexData.Data[1].Name + " is at ") // .Say(Convert.ToInt32(indexData.Data[1].Price)).AsCardinalNumber() // .Say(indexData.Data[1].Day_change > 0 ? " Up by " : " Down by ") // .Say(Convert.ToInt32(Math.Abs(Math.Round(indexData.Data[1].Day_change)))).AsCardinalNumber() // .Say(indexData.Data[2].Name + " is at ") // .Say(Convert.ToInt32(indexData.Data[2].Price)).AsCardinalNumber() // .Say(indexData.Data[2].Day_change > 0 ? " Up by " : " Down by ") // .Say(Convert.ToInt32(Math.Abs(Math.Round(indexData.Data[2].Day_change)))).AsCardinalNumber() // .ToStringAsync(); var returnValue = new WebhookResponse { FulfillmentText = tmpStr.ToString() }; return(returnValue); }
public async Task <WebhookResponse> GetIndicesValuesAsync() { var tickers = new List <string> { "^DJI", "^IXIC", "^INX" }; var tmpStr = new StringBuilder(); tmpStr.AppendJoin(',', tickers); QuotesFromWorldTrading indexData = await _envHandler.ObtainFromWorldTrading(tmpStr.ToString()); WebhookResponse returnValue = BuildOutputMessage(indexData); return(returnValue); }
private string BuildOutputMsg(QuotesFromWorldTrading quotes) { if (quotes.Data.Length == 0) { return("Could not resolve requested firm or ticker"); } var tmpStr = new StringBuilder(); DateTime dateToUse = quotes.Data[0].Last_trade_time != null ? (DateTime)quotes.Data[0].Last_trade_time : DateTime.Parse("01-01-2000"); tmpStr.Append($"As of {dateToUse.ToString("MMMM dd, hh:mm tt")} EST "); foreach (var quote in quotes.Data) { float price = quote.Price != null ? (float)quote.Price : 0; quote.Day_change = quote.Day_change == null ? 0 : quote.Day_change; var symbol = Regex.Replace(quote.Symbol, ".{1}", "$0 "); tmpStr.Append($"{quote.Name} with ticker {symbol} was traded at {price.ToString("c2")}."); tmpStr.Append(quote.Day_change > 0 ? " Up by " : " Down by "); tmpStr.Append($"{((float)quote.Day_change).ToString("n2")} points.\n\n "); } return(tmpStr.ToString()); }
/// <summary> /// Builds the output MSG. /// </summary> /// <param name="quotes">The quotes.</param> /// <returns></returns> private string BuildOutputMsg(QuotesFromWorldTrading quotes) { if (quotes.Data.Length == 0) { return("Could not resolve requested firm or ticker"); } var tmpStr = new StringBuilder(); var datumToUse = quotes.Data.ToList().OrderByDescending(x => x.Last_trade_time); var dateToUse = (DateTime)datumToUse.First().Last_trade_time != null ? (DateTime)datumToUse.First().Last_trade_time : DateTime.Parse("01-01-2000"); if (DateTime.Now.AddDays(-4) > dateToUse) { var symbol = Regex.Replace(datumToUse.First().Symbol, ".{1}", "$0 "); var company = datumToUse.First().Name; return($"Believe {company} with symbol {symbol} was last traded more " + "than 4 days ago; nothing to report now\n"); } tmpStr.Append($"As of {dateToUse.ToString("MMMM dd, hh:mm tt")} EST "); foreach (var quote in quotes.Data) { var a = quote.Last_trade_time != null ? (DateTime)quote.Last_trade_time : DateTime.Parse("01-01-2000"); if (DateTime.Now.AddDays(-4) > a) { //if the quote is older than 4 days the most probably it is not an actively traded security. continue; } float price = quote.Price != null ? (float)quote.Price : 0; quote.Day_change = quote.Day_change == null ? 0 : quote.Day_change; var symbol = Regex.Replace(quote.Symbol, ".{1}", "$0 "); tmpStr.Append($"{quote.Name} with ticker {symbol} was traded at {price.ToString("c2")}."); tmpStr.Append(quote.Day_change > 0 ? " Up by " : " Down by "); tmpStr.Append($"{(Math.Abs((float)quote.Day_change)).ToString("n2")} points.\n\n "); } return(tmpStr.ToString()); }
/// <summary> /// Builds the index MSG. /// </summary> /// <param name="indexData">The index data.</param> /// <returns></returns> private string BuildIndexMsg(QuotesFromWorldTrading indexData) { StringBuilder tmpStr = new StringBuilder(); if (indexData.Data.Length >= 1) { var dateToUse = indexData.Data[0].Last_trade_time == null?DateTime.Parse("01-01-2000") : (DateTime)indexData.Data[0].Last_trade_time; tmpStr.Append("As of "); tmpStr.Append($"{dateToUse.ToString("MMMM dd, hh:mm tt")} EST "); } foreach (var idxData in indexData.Data) { float price = idxData.Price != null ? (float)idxData.Price : 0; float dayChange = idxData.Day_change == null ? 0 : (float)idxData.Day_change; tmpStr.Append($"{idxData.Name} was at {Math.Round(price, 0)}. "); tmpStr.Append(idxData.Day_change > 0 ? " Up by " : "Down by "); tmpStr.Append($"{Math.Abs(Math.Round(dayChange, 0))} points.\n\n "); } return(tmpStr.ToString()); }