コード例 #1
0
        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);
            }
        }