public static void AnalyzeTradingPatterns([TimerTrigger("0 0 */2 * * *")] TimerInfo myTimer, [CosmosDB(CosmosDbConstants.DatabaseName, CosmosDbConstants.WatchListSymbols, ConnectionStringSetting = CosmosDbConstants.ConnectionStringName, SqlQuery = "SELECT * FROM c WHERE c.UserID='%default_user_id%' ORDER BY c._ts DESC")] IEnumerable <dynamic> watchListSymbols, [CosmosDB(CosmosDbConstants.DatabaseName, CosmosDbConstants.TradingPatterns, ConnectionStringSetting = CosmosDbConstants.ConnectionStringName)] IAsyncCollector <CandleStickPattern> patternsOut, ILogger log) { log.LogInformation($"Anaylyze downtrend reversals function executed at: {DateTime.Now}"); var symbols = watchListSymbols?.Select(wl => (string)wl.Symbol) ?? Environment.GetEnvironmentVariable("WatchListSymbols").Split(',', StringSplitOptions.RemoveEmptyEntries); var patterns = new List <CandleStickPattern>(); foreach (var symbol in symbols) { var prices = iex.SendAsync <List <StockPrice> >( endpoint: $"stock/{symbol}/chart/{DefaultRange}", @params: new Dictionary <string, string> { { "includeToday", "false" } }).Result; var candles = new LinkedList <StockPrice>(prices); for (var current = candles.First; current != null; current = current.Next) { if (current.IsHammer()) { patterns.Add(new CandleStickPattern(symbol, CandleStickPatterns.Hammer, current)); } if (current.IsInvertedHammer()) { patterns.Add(new CandleStickPattern(symbol, CandleStickPatterns.InvertedHammer, current)); } if (current.IsMorningStar()) { patterns.Add(new CandleStickPattern(symbol, CandleStickPatterns.MorningStar, current)); } if (current.IsPiercingLine()) { patterns.Add(new CandleStickPattern(symbol, CandleStickPatterns.PiercingLine, current)); } if (current.IsBullishEngulfing()) { patterns.Add(new CandleStickPattern(symbol, CandleStickPatterns.BullishEngulfing, current)); } } } foreach (var pattern in patterns) { //save possible observed candle stick patterns patternsOut.AddAsync(pattern); log.LogInformation("{@symbol} had possible {@pattern} on {@date}, followed by a volume of {@SubsequentVolume}.", pattern.Symbol, pattern.Pattern, pattern.Date.ToShortDateString(), pattern.SubsequentVolume); } }