/// <summary> /// Looks for white marubozus. /// </summary> private void LookForWhiteMarubozus(CandlestickAnalyzer candlestick, List<StockDaily> dailies, int index, DateTime date) { if (candlestick.IsWhiteMarubozu()) { var peekIndex = index + 1; var lumens = 0; while (peekIndex < dailies.Count) { if (dailies[peekIndex].LowPrice > candlestick.Low) { lumens++; } else { break; } if (peekIndex - index >= 20) { break; } peekIndex++; } this.whiteMarubozuNumOccurences++; this.whiteMarubozuTotalLumens += lumens; this.whiteMarubozuLumenRating = Convert.ToInt32(this.whiteMarubozuTotalLumens / this.whiteMarubozuNumOccurences); Console.WriteLine("White Marubozus -- Symbol=" + candlestick.TickerSymbol + "; Date=" + date.ToShortDateString() + "; Lumens=" + lumens + "; Rating=" + this.whiteMarubozuLumenRating); } }
public void UpdateStatistics() { List<string> tickers; using (var context = new StockScreenerEntities()) { tickers = context.Stocks.Select(stock => stock.Ticker).ToList(); } foreach (var ticker in tickers) { using (var context = new StockScreenerEntities()) { var tickerEntries = context.CandlesticksToStocks.Where(entry => entry.Ticker.Equals(ticker)); foreach (var entry in tickerEntries) { context.CandlesticksToStocks.DeleteObject(entry); } context.SaveChanges(); } List<StockDaily> dailies; using (var context = new StockScreenerEntities()) { dailies = context.Stocks.First(stock => stock.Ticker.Equals(ticker)).StockDailies.ToList(); } if (dailies.Count > 0) { var averageDailyRange = dailies.Average(daily => Math.Abs(daily.HighPrice - daily.LowPrice)); for (var index = 0; index < dailies.Count; index++) { var daily = dailies[index]; var candlestick = new CandlestickAnalyzer( daily.Exchange, ticker, daily.OpenPrice, daily.HighPrice, daily.LowPrice, daily.ClosePrice, averageDailyRange); this.LookForWhiteMarubozus(candlestick, dailies, index, daily.Date); this.LookForClosingWhiteMarubozus(candlestick, dailies, index, daily.Date); this.LookForOpeningWhiteMarubozus(candlestick, dailies, index, daily.Date); this.LookForDragonflyDoji(candlestick, dailies, index, daily.Date); } } } using (var context = new StockScreenerEntities()) { var whiteMarubozu = context.Candlesticks.First(candle => candle.ID == PatternIds.WhiteMarubozu); var whiteClosingMarubozu = context.Candlesticks.First(candle => candle.ID == PatternIds.WhiteClosingMarubozu); var whiteOpeningMarubozu = context.Candlesticks.First(candle => candle.ID == PatternIds.WhiteOpeningMarubozu); var dragonflyDoji = context.Candlesticks.First(candle => candle.ID == PatternIds.DragonflyDoji); whiteMarubozu.LumenRating = this.whiteMarubozuLumenRating; whiteMarubozu.NumOccurrences = this.whiteMarubozuNumOccurences; whiteClosingMarubozu.LumenRating = this.closingWhiteMarubozuLumenRating; whiteClosingMarubozu.NumOccurrences = this.closingWhiteMarubozuNumOccurences; whiteOpeningMarubozu.LumenRating = this.openingWhiteMarubozuLumenRating; whiteOpeningMarubozu.NumOccurrences = this.openingWhiteMarubozuNumOccurences; dragonflyDoji.LumenRating = this.dragonflyDojiLumenRating; dragonflyDoji.NumOccurrences = this.dragonflyDojiNumOccurences; context.SaveChanges(); } }
private void LookForMarubozus() { List<string> tickers; using (var context = new StockScreenerEntities()) { tickers = context.Stocks.Select(stock => stock.Ticker).ToList(); } foreach (var ticker in tickers) { List<StockDaily> dailies; using (var context = new StockScreenerEntities()) { dailies = context.Stocks.First(stock => stock.Ticker.Equals(ticker)).StockDailies.ToList(); } if (dailies.Count > 0) { var averageDailyRange = dailies.Average(daily => Math.Abs(daily.HighPrice - daily.LowPrice)); for (var index = 0; index < dailies.Count; index++) { var daily = dailies[index]; var candlestick = new CandlestickAnalyzer( daily.Exchange, ticker, daily.OpenPrice, daily.HighPrice, daily.LowPrice, daily.ClosePrice, averageDailyRange); this.LookForWhiteMarubozus(candlestick, dailies, index, daily.Date); this.LookForClosingWhiteMarubozus(candlestick, dailies, index, daily.Date); this.LookForOpeningWhiteMarubozus(candlestick, dailies, index, daily.Date); } } } }
/// <summary> /// Looks for white marubozus. /// </summary> private void LookForWhiteMarubozus(CandlestickAnalyzer candlestick, List<StockDaily> dailies, int index, DateTime date) { if (candlestick.IsWhiteMarubozu()) { var peekIndex = index + 1; var lumens = 0; while (peekIndex < dailies.Count) { if (dailies[peekIndex].LowPrice > candlestick.Low) { lumens++; } else { break; } if (peekIndex - index >= 100) { break; } peekIndex++; } this.whiteMarubozuNumOccurences++; this.whiteMarubozuTotalLumens += lumens; this.whiteMarubozuLumenRating = Convert.ToInt32(this.whiteMarubozuTotalLumens / this.whiteMarubozuNumOccurences); Console.WriteLine("White Marubozus -- Symbol=" + candlestick.TickerSymbol + "; Date=" + date.ToShortDateString() + "; Lumens=" + lumens + "; Rating=" + this.whiteMarubozuLumenRating); using (var context = new StockScreenerEntities()) { if (context.CandlesticksToStocks.Count(entry => entry.CandlestickId == PatternIds.WhiteMarubozu && entry.Ticker.Equals(candlestick.TickerSymbol)) > 0) { var candlestickToStock = context.CandlesticksToStocks.First( entry => entry.CandlestickId == PatternIds.WhiteMarubozu && entry.Ticker.Equals(candlestick.TickerSymbol)); var newLumenRating = ((candlestickToStock.LumenRating * candlestickToStock.NumOccurrences) + lumens) / ++candlestickToStock.NumOccurrences; candlestickToStock.LumenRating = newLumenRating; } else { context.CandlesticksToStocks.AddObject(new CandlesticksToStock { CandlestickId = PatternIds.WhiteMarubozu, Exchange = candlestick.Exchange, Ticker = candlestick.TickerSymbol, LumenRating = lumens, NumOccurrences = 1 }); } context.SaveChanges(); } } }