public CandlePatternMatch Match(IAnalyzableContext analyzableContext) { var candle = analyzableContext.TimeBarAtIndex; if (candle.Open == candle.Close) { return(new CandlePatternMatch(true, false)); } var isDoji = candle.RealBody() < treshold *candle.SizeFromHighToLow(); return(new CandlePatternMatch(isDoji, false)); }
public CandlePatternMatch Match(IAnalyzableContext analyzableContext) { var candle = analyzableContext.TimeBarAtIndex; var isDoji = dojiPattern.Match(analyzableContext); var sizeHighToLow = candle.SizeFromHighToLow(); var isDragonFlyDoji = isDoji.Success && sizeHighToLow > 3 * candle.RealBody() && candle.Close - candle.Low > ShadowTreshold * sizeHighToLow && candle.Open - candle.Low > ShadowTreshold * sizeHighToLow; return(new CandlePatternMatch(isDragonFlyDoji, false)); }
public CandlePatternMatch Match(IAnalyzableContext analyzableContext) { var candle = analyzableContext.TimeBars[analyzableContext.TimeBarIndexToAnalyze]; if (candle.IsBearish()) { return(CandlePatternMatch.NoMatch); } var sizeFromHighToLow = candle.SizeFromHighToLow(); var isSpinningTop = sizeFromHighToLow > RealBodyMultiplier *candle.RealBody() && (candle.High - candle.Open) / (Treshold + sizeFromHighToLow) < 0.4m && (candle.Close - candle.Low) / (Treshold + sizeFromHighToLow) < 0.4m; return(new CandlePatternMatch(isSpinningTop, false)); }
public CandlePatternMatch Match(IAnalyzableContext analyzableContext) { var candle = analyzableContext.TimeBarAtIndex; if (candle.Open == candle.Close) { return(CandlePatternMatch.NoMatch); } var upTrendContext = new CandlestickContext(analyzableContext.TimeBars, analyzableContext.TimeBarIndexToAnalyze - 1); var isUptrendMatch = upTrendPatter.Match(upTrendContext); if (!isUptrendMatch.Success) { return(CandlePatternMatch.NoMatch); } var sizeFromHighToLow = candle.SizeFromHighToLow(); var isHammer = sizeFromHighToLow > RealBodyMultiplier *candle.RealBody() && candle.LowerShadow() / (Treshold + sizeFromHighToLow) < LowerWickLengthRatio; return(new CandlePatternMatch(isHammer, true)); }
public CandlePatternMatch Match(IAnalyzableContext analyzableContext) { if (Period > analyzableContext.TimeBars.Count) { return(CandlePatternMatch.NoMatch); //throw new ArgumentException($"Number of candels muset be greater than {nameof(Period)}"); } if (analyzableContext.TimeBarIndexToAnalyze <= Period - 1) { return(CandlePatternMatch.NoMatch); //throw new ArgumentException($"{nameof(analyzableContext.CandleIndexToAnalyze)} cannot be less or equal than the {nameof(Period)}"); } if (analyzableContext.TimeBarAtIndex.IsBullish()) { return(CandlePatternMatch.NoMatch); } var startIndex = analyzableContext.TimeBarIndexToAnalyze; var candles = analyzableContext.TimeBars; for (int i = 0; i < Period; i++) { if (candles[startIndex - i].High > candles[startIndex - i - 1].High) { return(CandlePatternMatch.NoMatch); } if (candles[startIndex - i].Low > candles[startIndex - i - 1].Low) { return(CandlePatternMatch.NoMatch); } } return(CandlePatternMatch.MatchWithoutConfirmationNeeded); }