protected override void OnBar()
        {
            CalculatePivot();
            MainTrend();

            Candle candle = new Candle(MarketSeries, 1, ADXPeriods, Adx);
            Candle prevCandle = new Candle(MarketSeries, 2, ADXPeriods, Adx);
            Candle prevPrevCandle = new Candle(MarketSeries, 3, ADXPeriods, Adx);

            if (IsTradingTime(Server.Time))
            {
                double stopLoss = StopLoss;
                double takeProfit = TakeProfit;
                double open = MarketSeries.Open.LastValue;

                // Bullish trend
                if (IsBuying)
                {
                    takeProfit = GetDistance(open, Resistance2) - 4;
                    double distanceToWResistance = GetDistance(open, WResistance1);
                    if (takeProfit >= distanceToWResistance)
                        takeProfit = distanceToWResistance - 4;

                    stopLoss = GetDistance(((Pivot + Support1) * 0.5), open) + 4;

                    if (EnableMoneyManagement && !MoneyManagement.GetRiskRewardRatio(stopLoss, takeProfit))
                        return;

                    if (!MoneyManagement.CanOpenPosition(Positions, MaxOpenPositions))
                        return;

                    if (StarTrading && CandlestickPattern.BullishMorningStar(candle, prevCandle, prevPrevCandle) && candle.Close > Pivot && candle.Close < Resistance1 && candle.Close < WResistance1)
                        if (DistanceFromLevel(Pivot, candle.Close))
                            ExecuteOrder(TradeType.Buy, "BullishMorningStar", stopLoss, takeProfit);

                    if (EngulfingTrading && CandlestickPattern.BullishEngulfing(candle, prevCandle) && candle.Close > Pivot && candle.Close < Resistance1 && candle.Close < WResistance1)
                        if (DistanceFromLevel(Pivot, candle.Close))
                            ExecuteOrder(TradeType.Buy, "BullishEngulfing", stopLoss, takeProfit);

                    if (PiercingCoverTrading && CandlestickPattern.BullishPiercing(candle, prevCandle) && candle.Close > Pivot && candle.Close < Resistance1 && candle.Close < WResistance1)
                        if (DistanceFromLevel(Pivot, candle.Close))
                            ExecuteOrder(TradeType.Buy, "BullishPiercing", stopLoss, takeProfit);

                    if (HaramiTrading && CandlestickPattern.BullishHarami(candle, prevCandle) && candle.Close > Pivot && candle.Close < Resistance1 && candle.Close < WResistance1)
                        if (DistanceFromLevel(Pivot, candle.Close))
                            ExecuteOrder(TradeType.Buy, "BullishHarami", stopLoss, takeProfit);

                    if (HammerTrading && CandlestickPattern.BullishHammer(candle) && candle.Close > Pivot && candle.Close < Resistance1 && candle.Close < WResistance1)
                        if (DistanceFromLevel(Pivot, candle.Close))
                            ExecuteOrder(TradeType.Buy, "BullishHammer", stopLoss, takeProfit);

                }

                // Bearish trend
                if (IsSelling)
                {
                    takeProfit = GetDistance(open, Support2) - 4;
                    double distanceToWSupport = GetDistance(open, WSupport1);
                    if (takeProfit >= distanceToWSupport)
                        takeProfit = distanceToWSupport - 4;

                    stopLoss = GetDistance(((Pivot + Resistance1) * 0.5), open) + 4;

                    if (EnableMoneyManagement && !MoneyManagement.GetRiskRewardRatio(stopLoss, takeProfit))
                        return;

                    if (!MoneyManagement.CanOpenPosition(Positions, MaxOpenPositions))
                        return;

                    if (StarTrading && CandlestickPattern.BearishEveningStar(candle, prevCandle, prevPrevCandle) && candle.Close < Pivot && candle.Close > Support1 && candle.Close > WSupport1)
                        if (DistanceFromLevel(Pivot, candle.Close))
                            ExecuteOrder(TradeType.Sell, "BearishEveningStar", stopLoss, takeProfit);

                    if (EngulfingTrading && CandlestickPattern.BearishEngulfing(candle, prevCandle) && candle.Close < Pivot && candle.Close > Support1 && candle.Close > WSupport1)
                        if (DistanceFromLevel(Pivot, candle.Close))
                            ExecuteOrder(TradeType.Sell, "BearishEngulfing", stopLoss, takeProfit);

                    if (PiercingCoverTrading && CandlestickPattern.BearishDarkCloudCover(candle, prevCandle) && candle.Close < Pivot && candle.Close > Support1 && candle.Close > WSupport1)
                        if (DistanceFromLevel(Pivot, candle.Close))
                            ExecuteOrder(TradeType.Sell, "BearishDarkCloudCover", stopLoss, takeProfit);

                    if (HaramiTrading && CandlestickPattern.BearishHarami(candle, prevCandle) && candle.Close < Pivot && candle.Close > Support1 && candle.Close > WSupport1)
                        if (DistanceFromLevel(Pivot, candle.Close))
                            ExecuteOrder(TradeType.Sell, "BearishHarami", stopLoss, takeProfit);

                    if (HammerTrading && CandlestickPattern.BearishHammer(candle) && candle.Close < Pivot && candle.Close > Support1 && candle.Close > WSupport1)
                        if (DistanceFromLevel(Pivot, candle.Close))
                            ExecuteOrder(TradeType.Sell, "BearishHammer", stopLoss, takeProfit);

                }
            }
        }
        public static bool BullishPiercing(Candle candle, Candle prevCandle)
        {
            bool cond1 = (candle.Open < prevCandle.Close) ? true : false;
            bool cond2 = (candle.Low < prevCandle.Low) ? true : false;
            double midPoint = (prevCandle.Close + prevCandle.Open) / 2;
            bool cond3 = (candle.Close > midPoint) ? true : false;
            bool cond4 = (candle.High < prevCandle.High) ? true : false;

            if (candle.Bull && !prevCandle.Bull && cond1 && cond2 && cond3 && cond4)
                if (!IsDojiCandles(candle, prevCandle))
                    return true;

            return false;
        }
 private static bool IsDojiCandles(Candle candle1, Candle candle2)
 {
     if (candle1.Type == TypeCandlestick.CandDoji || candle2.Type == TypeCandlestick.CandDoji)
         return true;
     return false;
 }
        public static bool BullishHarami(Candle candle, Candle prevCandle)
        {
            bool cond1 = (candle.High < prevCandle.High) ? true : false;
            bool cond2 = (candle.Low > prevCandle.Low) ? true : false;
            bool cond3 = (candle.Open < prevCandle.Close) ? true : false;
            bool cond4 = (candle.Close > prevCandle.Open) ? true : false;
            bool cond5 = (candle.Close < prevCandle.Close) ? true : false;
            bool cond6 = (candle.Open > prevCandle.Open) ? true : false;
            double midPoint = (prevCandle.Open + prevCandle.Close) * 0.5;
            bool cond7 = (candle.Close >= midPoint) ? true : false;
            bool cond8 = (candle.Close <= midPoint) ? true : false;

            if (candle.IsSell() && prevCandle.IsBuy() && cond1 && cond2 && cond3 && cond4 && cond7)
                return true;

            if (candle.IsBuy() && prevCandle.IsBuy() && cond1 && cond2 && cond5 && cond6 && cond8)
                return true;

            return false;
        }
        public static bool BullishMorningStar(Candle candle, Candle prevCandle, Candle prevPrevCandle)
        {
            bool cond1 = (candle.High > prevCandle.High && candle.Close > prevCandle.High) ? true : false;
            bool cond2 = (candle.Open > prevCandle.Close) ? true : false;
            bool cond3 = (prevPrevCandle.High > prevCandle.High && prevPrevCandle.Open > prevCandle.High) ? true : false;
            bool cond4 = (prevPrevCandle.Close > prevCandle.Close) ? true : false;
            double midPoint = (prevPrevCandle.Close + prevPrevCandle.Open) / 2;
            bool cond5 = (candle.Close > midPoint) ? true : false;

            if (candle.IsBuy() && (prevCandle.IsBuy() || prevCandle.IsSell()) && prevPrevCandle.IsSell() && cond1 && cond2 && cond3 && cond4 && cond5)
                return true;

            return false;
        }
 public static bool BullishHammer(Candle candle)
 {
     double point = candle.High - (candle.High - candle.Low) * 0.3;
     if ((candle.IsBuy() || candle.IsSell()) && candle.Close > point && candle.Open > point)
         return true;
     return false;
 }
        // Bullish reversal patterns
        public static bool BullishEngulfing(Candle candle, Candle prevCandle)
        {
            bool cond1 = (candle.High > prevCandle.High) ? true : false;
            bool cond2 = (candle.High > prevCandle.Open) ? true : false;
            bool cond3 = (candle.Close > prevCandle.High) ? true : false;
            bool cond4 = (candle.Close >= prevCandle.Open) ? true : false;
            bool cond5 = (candle.Low < prevCandle.Close) ? true : false;
            bool cond6 = (candle.Low < prevCandle.Low) ? true : false;
            bool cond7 = (candle.Open <= prevCandle.Close) ? true : false;
            bool cond8 = (candle.Open < prevCandle.Low) ? true : false;
            double midPoint = (candle.Close + candle.Open) * 0.5;
            bool cond9 = (prevCandle.High >= midPoint) ? true : false;
            bool cond10 = (prevCandle.Low <= midPoint) ? true : false;

            // Ideally situation
            if (candle.IsBuy() && prevCandle.IsSell() && cond1 && cond2 && cond3 && cond4 && cond5 && cond6 && cond7 && cond7 && cond9 && cond10)
                if (!IsDojiCandles(candle, prevCandle))
                    return true;

            // Normal situation
            if (candle.IsBuy() && prevCandle.IsSell() && cond1 && cond4 && cond6 && cond7 && cond9 && cond10)
                if (!IsDojiCandles(candle, prevCandle))
                    return true;

            return false;
        }
 public static bool BearishHammer(Candle candle)
 {
     double point = candle.Low + (candle.High - candle.Low) * 0.3;
     if (candle.Close <= point && candle.Open <= point)
         return true;
     return false;
 }
        public static bool BearishEveningStar(Candle candle, Candle prevCandle, Candle prevPrevCandle)
        {
            bool cond1 = (candle.Low < prevCandle.Low && candle.Close < prevCandle.Low) ? true : false;
            bool cond2 = (candle.Open < prevCandle.Close) ? true : false;
            bool cond3 = (prevPrevCandle.Low < prevCandle.Low && prevPrevCandle.Open < prevCandle.Low) ? true : false;
            bool cond4 = (prevPrevCandle.Close < prevCandle.Close) ? true : false;
            double midPoint = (prevPrevCandle.Close + prevPrevCandle.Open) / 2;
            bool cond5 = (candle.Close < midPoint) ? true : false;

            if (candle.IsSell() && (prevCandle.IsBuy() || prevCandle.IsSell()) && prevPrevCandle.IsBuy() && cond1 && cond2 && cond3 && cond4 && cond5)
                return true;

            return false;
        }
        public static bool BearishDarkCloudCover(Candle candle, Candle prevCandle)
        {
            bool cond1 = (candle.Open > prevCandle.Close) ? true : false;
            bool cond2 = (candle.High > prevCandle.High) ? true : false;
            double midPoint = (prevCandle.Close + prevCandle.Open) / 2;
            bool cond3 = (candle.Close < midPoint) ? true : false;
            bool cond4 = (candle.Low > prevCandle.Low) ? true : false;

            if (!candle.Bull && prevCandle.Bull && cond1 && cond2 && cond3 && cond4)
                if (!IsDojiCandles(candle, prevCandle))
                    return true;

            return false;
        }