Example #1
0
        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));
        }
Example #2
0
        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));
        }
Example #4
0
        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));
        }
Example #5
0
        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);
        }