MT5 all candlestick pack

 //+------------------------------------------------------------------+

//|                                   Compleate Candlestick Pack.mq5 |

//|                                  Copyright 2023, MetaQuotes Ltd. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#include <Trade\Trade.mqh>

CTrade trade;

#property copyright "Copyright 2023, MetaQuotes Ltd."

#property link      "https://www.mql5.com"

#property version   "1.00"

input int MagicNumber=12345;

input double lotsize=0.01;

input double TargetMultiplier=0.01;

input bool invertedHammer=true;

input bool Hammer=true;

input double Hammer_Wick_Multiplier = 2.5;

input double Hammer_Body_Percentage = 0.25;

input bool uptrend_downtrend=true;

input int trendlookback=50;

bool mabuy=false,masell=false;


enum stmode

  {

   OnHighBreak=1,

   OnCandleFormation=2,

   NextCandleClose=3,

  };

string stgmodes;

input stmode StrategyMode = OnCandleFormation;

input string Info="Maribozu Candle";

enum canmode

  {

   NoWick=1,

   BothWick=2,

   Openwick=3,

   Closewick=4,

  };

string candlemode;

input canmode CandleMode = NoWick;

input double mari_greater_than=2;

input double mari_less_than=5;

input bool mariBullish=true;

input bool mariBearish=true;

input bool mariMaCondition=true;

input double MaPeriod1=20;

input double MaPeriod2=200;

enum matrig

  {

   OpenClose=1,

   HighLow=2,


  };

string MATRIGER;

input matrig TriggerMode = OpenClose;

input double mari_closingPercentage=80;

input string Info1="Engulfing Candle";

input double Engulfing_greater_than=2;

input double Engulfing_less_than=5;

input bool EngulfingBullish=true;

input bool EngulfingBearish=true;

input double Engulfing_closingPercentage=80;

input string Info2="Bullish Soldier Candle";

input bool Bullish_Soldier=true;

input double Soldier_greater_than=2;

input double Soldier_less_than=5;

input double Soldier_closingPercentage=80;

input string Info3="Bearish Crow Candle";

input bool Bearish_Crow=true;

input double Crow_greater_than=2;

input double Crow_less_than=5;


bool entryFormation=false;

double open1,high1,low1,close1,body,range,lowerWick,upperWick,currentClose,value,ask,bid,ma1,ma2;

bool HBUY=false,HSELL=false;

datetime entry=0,candletime=0,mentry=0;


//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void Crow()

  {

   double o1,o2,o3,o4,h1,h2,h3,h4,l1,l2,l3,l4,c1,c2,c3,c4,size,cmp;


   o1=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,1),2);

   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

   o3=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,3),2);

   o4=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,4),2);

   h1=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

   h3=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,3),2);

   h4=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,4),2);

   h1=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

   l1=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

   l3=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,3),2);

   l4=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,4),2);

   c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

   c3=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,3),2);

   c4=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,4),2);

   cmp=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,0),2);

   size= h1-l3;


   if(StrategyMode==OnHighBreak)

     {

      stgmodes="OnHighBreak";

     }

   else

      if(StrategyMode==OnCandleFormation)

        {

         stgmodes="OnCandleFormation";

        }

      else

         if(StrategyMode==NextCandleClose)

           {

            stgmodes="NextCandleClose";

           }


   if(Bearish_Crow==true)

     {

      if(size>Soldier_greater_than && size<Soldier_less_than)

        {


         if(stgmodes=="OnCandleFormation")

           {

            if(c1<o1&&c2<o2&&c3<o3&&c1<c2&&c1<c3&&c2<c3&&mentry!=iTime(Symbol(),PERIOD_CURRENT,0)&&closing_Percentage_soldier()==true)

              {

               mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Crow candle bearish OnCandleFormation  @: "+ Symbol());

               value=h1-l3;

               value=value*TargetMultiplier;

               value=l1-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h3,value,"OnCandleFormation");


              }

           }


         if(stgmodes=="OnHighBreak")

           {

            if(c1<o1&&c2<o2&&c3<o3&&c1<c2&&c1<c3&&c2<c3&&mentry!=iTime(Symbol(),PERIOD_CURRENT,0)&&cmp<l1&&closing_Percentage_soldier()==true)

              {

               mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Crow candle bearish OnHighBreak  @: "+ Symbol());

               value=h1-l3;

               value=value*TargetMultiplier;

               value=l1-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h3,value,"OnHighBreak");

              }

           }


         if(stgmodes=="NextCandleClose")

           {

            if(c2<o2&&c3<o3&&c4<o4&&c2<c3&&c2<c4&&c3<c4&&mentry!=iTime(Symbol(),PERIOD_CURRENT,0)&&c1<l2&&closing_Percentage_soldier()==true)

              {

               mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Crow candle bearish NextCandleClose  @: "+ Symbol());

               value=h2-l4;

               value=value*TargetMultiplier;

               value=l2-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h4,value,"NextCandleClose");



              }

           }



        }


     }




  }




//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void Soldier()

  {

   double o1,o2,o3,o4,h1,h2,h3,h4,l1,l2,l3,l4,c1,c2,c3,c4,size,cmp;


   o1=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,1),2);

   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

   o3=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,3),2);

   o4=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,4),2);

   h1=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

   h3=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,3),2);

   h4=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,4),2);

   h1=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

   l1=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

   l3=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,3),2);

   l4=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,4),2);

   c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

   c3=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,3),2);

   c4=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,4),2);

   cmp=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,0),2);

   size= h1-l3;


   if(StrategyMode==OnHighBreak)

     {

      stgmodes="OnHighBreak";

     }

   else

      if(StrategyMode==OnCandleFormation)

        {

         stgmodes="OnCandleFormation";

        }

      else

         if(StrategyMode==NextCandleClose)

           {

            stgmodes="NextCandleClose";

           }

   if(Bullish_Soldier==true)

     {

      if(size>Soldier_greater_than && size<Soldier_less_than)

        {

         if(stgmodes=="OnCandleFormation")

           {

            if(c1>o1&&c2>o2&&c3>o3&&c1>c2&&c1>c3&&c2>c3&&mentry!=iTime(Symbol(),PERIOD_CURRENT,0)&&closing_Percentage_soldier()==true)

              {

               mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Soldier candle bullish OnCandleFormation  @: "+ Symbol());

               value=h1-l3;

               value=value*TargetMultiplier;

               value=h1+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l3,value,"OnCandleFormation");

              }

           }


         if(stgmodes=="OnHighBreak")

           {

            if(c1>o1&&c2>o2&&c3>o3&&c1>c2&&c1>c3&&c2>c3&&mentry!=iTime(Symbol(),PERIOD_CURRENT,0)&&cmp>h1&&closing_Percentage_soldier()==true)

              {

               mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Soldier candle bullish OnHighBreak  @: "+ Symbol());

               value=h1-l3;

               value=value*TargetMultiplier;

               value=h1+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l3,value,"OnHighBreak");




              }

           }


         if(stgmodes=="NextCandleClose")

           {

            if(c2>o2&&c3>o3&&c4>o4&&c2>c3&&c2>c4&&c3>c4&&mentry!=iTime(Symbol(),PERIOD_CURRENT,0)&&c1>h2&&closing_Percentage_soldier()==true)

              {

               mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Soldier candle bullish OnHighBreak  @: "+ Symbol());

               value=h2-l4;

               value=value*TargetMultiplier;

               value=h2+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l4,value,"NextCandleClose");




              }

           }



        }



     }




  }


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int OnInit()

  {

//---


//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   EventKillTimer();

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int highestcandle, lowestcandle;

double highvalue, lowvalue;

double High[], Low[];

bool isRangeCalculated = false;

bool isWaitingForBreakout = false;

int candleCounter = 0;

bool rangeBroken = false;


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+


bool closing_Percentage_soldier()

  {

  

  

      double o1=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,1),2);

      double h1=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

      double l1=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

      double c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

      

      double o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

      double h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

      double l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

      double c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

      

      double o3=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,3),2);

      double h3=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,3),2);

      double l3=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,3),2);

      double c3=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,3),2);

      

      double o4=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,4),2);

      double h4=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,4),2);

      double l4=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,4),2);

      double c4=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,4),2);

      

      double candlesize1=h1-l1,CandleBody1=MathAbs(c1-o1);

      double candlesize2=h2-l2,CandleBody2=MathAbs(c2-o2);

      double candlesize3=h3-l3,CandleBody3=MathAbs(c3-o3);

      double candlesize4=h4-l4,CandleBody4=MathAbs(c4-o4);


      double percentvalue1 = candlesize1*Soldier_closingPercentage*0.01;

      double percentvalue2 = candlesize2*Soldier_closingPercentage*0.01;

      double percentvalue3 = candlesize3*Soldier_closingPercentage*0.01;

      double percentvalue4 = candlesize4*Soldier_closingPercentage*0.01;

  

  

   if(StrategyMode==OnHighBreak)

     {

      stgmodes="OnHighBreak";

      


      if(CandleBody1>=percentvalue1&&CandleBody2>=percentvalue2&&CandleBody3>=percentvalue3)


        {return true; }


     }

   else

      if(StrategyMode==OnCandleFormation)

        {

         stgmodes="OnCandleFormation";

         


         if(CandleBody1>=percentvalue1&&CandleBody2>=percentvalue2&&CandleBody3>=percentvalue3)


           {return true; }



        }

      else

         if(StrategyMode==NextCandleClose)

           {

            stgmodes="NextCandleClose";

            


            if(CandleBody4>=percentvalue4&&CandleBody2>=percentvalue2&&CandleBody3>=percentvalue3)


              {return true; }

           }


   return false;

  }







bool closing_Percentage_engulf()

  {

   if(StrategyMode==OnHighBreak)

     {

      stgmodes="OnHighBreak";

      double o=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,1),2);

      double h=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

      double l=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

      double c=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

      double candlesize=h-l,CandleBody=MathAbs(c-o);


      double percentvalue = candlesize*Engulfing_closingPercentage*0.01;


      if(CandleBody>=percentvalue)


        {return true; }


     }

   else

      if(StrategyMode==OnCandleFormation)

        {

         stgmodes="OnCandleFormation";

         double o=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,1),2);

         double h=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

         double l=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

         double c=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

         double candlesize=h-l,CandleBody=MathAbs(c-o);

         double percentvalue = candlesize*Engulfing_closingPercentage*0.01;


         if(CandleBody>=percentvalue)


           {return true; }



        }

      else

         if(StrategyMode==NextCandleClose)

           {

            stgmodes="NextCandleClose";

            double   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

            double   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

            double   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

            double   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

            double candlesize=h2-l2,CandleBody=MathAbs(c2-o2);

            double percentvalue = candlesize*Engulfing_closingPercentage*0.01;


            if(CandleBody>=percentvalue)


              {return true; }

           }


   return false;

  }





//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

bool closing_Percentage()

  {

   if(StrategyMode==OnHighBreak)

     {

      stgmodes="OnHighBreak";

      double o=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,1),2);

      double h=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

      double l=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

      double c=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

      double candlesize=h-l,CandleBody=MathAbs(c-o);

      double percentvalue = candlesize*mari_closingPercentage*0.01;


      if(CandleBody>=percentvalue)


        {return true; }


     }

   else

      if(StrategyMode==OnCandleFormation)

        {

         stgmodes="OnCandleFormation";

         double o=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,1),2);

         double h=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

         double l=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

         double c=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

         double candlesize=h-l,CandleBody=MathAbs(c-o);

         double percentvalue = candlesize*mari_closingPercentage*0.01;


         if(CandleBody>=percentvalue)


           {return true; }



        }

      else

         if(StrategyMode==NextCandleClose)

           {

            stgmodes="NextCandleClose";

            double   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

            double   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

            double   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

            double   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

            double candlesize=h2-l2,CandleBody=MathAbs(c2-o2);

            double percentvalue = candlesize*mari_closingPercentage*0.01;


            if(CandleBody>=percentvalue)


              {return true; }

           }


   return false;

  }




//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void engulfing()

  {

   double o1=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,1),2);

   double h1=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

   double l1=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

   double c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);


   double o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

   double h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

   double l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

   double c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

   double cmp=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,0),2);

   double size;

   size=h1-l1;




   if(StrategyMode==OnHighBreak)

     {

      stgmodes="OnHighBreak";

     }

   else

      if(StrategyMode==OnCandleFormation)

        {

         stgmodes="OnCandleFormation";

        }

      else

         if(StrategyMode==NextCandleClose)

           {

            stgmodes="NextCandleClose";

           }



   if(size>Engulfing_greater_than && size<Engulfing_less_than)

     {

      if(stgmodes=="NextCandleClose")

        {


         double o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

         double h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

         double l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

         double c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);


         double o3=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,3),2);

         double h3=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,3),2);

         double l3=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,3),2);

         double c3=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,3),2);

         double c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

         double size;

         size=h2-l2;



         if(c2>o2&& c3<o3 && c2>h3&&c1>h2 && l2<l3 &&EngulfingBullish==true&&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage_engulf()==true)

           {


            mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

            Alert("Engulfing candle bullish NextCandleClose  @: "+ Symbol());

            value=h2-l2;

            value=value*TargetMultiplier;

            value=h2+value;

            Alert("BUY @ "+Symbol());

            close_sell_position();

            close_buy_position();

            trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l1,value,"NextCandleClose");




           }

        }





      if(c1>o1&& c2<o2 && c1>h2 && l1<l2 &&EngulfingBullish==true&& cmp>h1 &&stgmodes=="OnHighBreak"&&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage_engulf()==true)

        {


         mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

         Alert("Engulfing candle bullish OnHighBreak  @: "+ Symbol());

         value=h1-l1;

         value=value*TargetMultiplier;

         value=h1+value;

         Alert("BUY @ "+Symbol());

         close_sell_position();

         close_buy_position();

         trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l1,value,"OnHighBreak");




        }





      if(c1>o1&& c2<o2 && c1>h2 && l1<l2 &&EngulfingBullish==true&& stgmodes=="OnCandleFormation"&&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage_engulf()==true)

        {


         mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

         Alert("Engulfing candle bullish OnCandleFormation  @: "+ Symbol());

         value=h1-l1;

         value=value*TargetMultiplier;

         value=h1+value;

         Alert("BUY @ "+Symbol());

         close_sell_position();

         close_buy_position();

         trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l1,value,"OnCandleFormation");




        }



      if(stgmodes=="NextCandleClose")

        {


         double o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

         double h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

         double l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

         double c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);


         double o3=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,3),2);

         double h3=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,3),2);

         double l3=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,3),2);

         double c3=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,3),2);

         double c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

         double size;

         size=h2-l2;


         if(c2<o2&&c3>o3 &&c2<l3&&h2>h3&& c1<l1 &&EngulfingBearish==true &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage_engulf()==true)

           {

            mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

            Alert("Engulfing candle bearish NextCandleClose  @: "+ Symbol());

            value=h2-l2;

            value=value*TargetMultiplier;

            value=l2-value;

            Alert("SELL @ "+Symbol());

            close_sell_position();

            close_buy_position();

            trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h2,value,"NextCandleClose");



           }


        }







      if(c1<o1&&c2>o2 &&c1<l2&&h1>h2&&cmp<l1&& stgmodes=="OnHighBreak"&&EngulfingBearish==true&&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage_engulf()==true)

        {

         mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

         Alert("Engulfing candle bearish OnHighBreak  @: "+ Symbol());

         value=h1-l1;

         value=value*TargetMultiplier;

         value=l1-value;

         Alert("SELL @ "+Symbol());

         close_sell_position();

         close_buy_position();

         trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h1,value,"OnHighBreak");



        }




      if(c1<o1&&c2>o2 &&c1<l2&&h1>h2&& stgmodes=="OnCandleFormation"&&EngulfingBearish==true&&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage_engulf()==true)

        {

         mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

         Alert("Engulfing candle bearish OnCandleFormation  @: "+ Symbol());

         value=h1-l1;

         value=value*TargetMultiplier;

         value=l1-value;

         Alert("SELL @ "+Symbol());

         close_sell_position();

         close_buy_position();

         trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h1,value,"AlgosysGridEA- StopReverse");

        }

     }


  }










//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void Maribozu()

  {

   double o=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,1),2);

   double h=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,1),2);

   double l=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

   double c=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

   double o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

   double h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

   double l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

   double c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

   double ct=iTime(Symbol(),PERIOD_CURRENT,0);

   double cmp=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,0),2);

   double size;

   double ma1,ma2;

   double MA_BUFF1[], MA_BUFF2[];

   ma1= iMA(Symbol(),PERIOD_CURRENT,MaPeriod1,0,MODE_EMA,PRICE_CLOSE);

   ma2= iMA(Symbol(),PERIOD_CURRENT,MaPeriod2,0,MODE_EMA,PRICE_CLOSE);

   ArraySetAsSeries(MA_BUFF1,true);

   CopyBuffer(ma1,0,0,3,MA_BUFF1);


   ArraySetAsSeries(MA_BUFF2,true);

   CopyBuffer(ma2,0,0,3,MA_BUFF2);

   size=h-l;



   if(StrategyMode==OnHighBreak)

     {

      stgmodes="OnHighBreak";

      Comment("\n o: "+o+

              "\n\n h: "+h+

              "\n\n l: "+l+

              "\n\n c: "+c+

              "\n\n ct: "+ct+

              "\n\n cmp:"+cmp+

              "\n\n ask:"+ask+

              "\n\n size:"+size+

              "\n\n maBuy:"+mabuy+

              "\n\n masell:"+masell



             );


     }

   else

      if(StrategyMode==OnCandleFormation)

        {

         stgmodes="OnCandleFormation";

         Comment("\n o: "+o+

                 "\n\n h: "+h+

                 "\n\n l: "+l+

                 "\n\n c: "+c+

                 "\n\n ct: "+ct+

                 "\n\n cmp:"+cmp+

                 "\n\n ask:"+ask+

                 "\n\n size:"+size+

                 "\n\n maBuy:"+mabuy+

                 "\n\n masell:"+masell

                );


        }

      else

         if(StrategyMode==NextCandleClose)

           {

            stgmodes="NextCandleClose";

           }





   if(size>mari_greater_than && size<mari_less_than)

     {


      if(mariBullish==true)

        {


         if(CandleMode==NoWick)

           {

            candlemode="NoWick";

           }

         else

            if(CandleMode==BothWick)

              {

               candlemode="BothWick";

              }

            else

               if(CandleMode==Openwick)

                 {

                  candlemode="Openwick";

                 }

               else

                  if(CandleMode==Closewick)

                    {

                     candlemode="Closewick";

                    }

        }



      if(mariMaCondition==false)

        {

         mabuy=true;

         masell=true;

        }


      if(mariMaCondition==true)

        {

         if(TriggerMode==HighLow)

           {

            if(mariBullish==true)

              {

               if(stgmodes=="OnHighBreak" ||  stgmodes=="OnCandleFormation")

                 {

                  if(h<=MA_BUFF2[1]&&l<MA_BUFF2[1])

                    {

                     mabuy=false;

                     masell=false;

                    }

                  if(h>MA_BUFF2[1]&&l>=MA_BUFF2[1])

                    {

                     mabuy=false;

                     masell=false;

                    }


                  if(l<MA_BUFF1[1]&&l<MA_BUFF2[1]&&h>MA_BUFF1[1]&&h>MA_BUFF2[1])

                    {

                     mabuy=true;

                     masell=true;

                    }





                 }

               if(stgmodes=="NextCandleClose")

                 {



                  if(h2<=MA_BUFF2[2]&&l2<MA_BUFF2[2])

                    {

                     mabuy=false;

                     masell=false;

                    }

                  if(h2>MA_BUFF2[2]&&l2>=MA_BUFF2[2])

                    {

                     mabuy=false;

                     masell=false;

                    }


                  if(l2<MA_BUFF1[2]&&l2<MA_BUFF2[2]&&h2>MA_BUFF1[2]&&h2>MA_BUFF2[2])

                    {

                     mabuy=true;

                     masell=true;

                    }

                 }

              }

            if(mariBearish==true)

              {


               if(stgmodes=="OnHighBreak" ||  stgmodes=="OnCandleFormation")

                 {


                  if(h<=MA_BUFF2[1]&&l<MA_BUFF2[1])

                    {

                     mabuy=false;

                     masell=false;

                    }

                  if(h>MA_BUFF2[1]&&l>=MA_BUFF2[1])

                    {

                     mabuy=false;

                     masell=false;

                    }

                  if(h>MA_BUFF1[1]&&h>MA_BUFF2[1]&&l<MA_BUFF1[1]&&l<MA_BUFF2[1])

                    {

                     mabuy=true;

                     masell=true;

                    }

                 }


               if(stgmodes=="NextCandleClose")

                 {

                  if(h2<=MA_BUFF2[2]&&l2<MA_BUFF2[2])

                    {

                     mabuy=false;

                     masell=false;

                    }

                  if(h2>MA_BUFF2[2]&&l2>=MA_BUFF2[2])

                    {

                     mabuy=false;

                     masell=false;

                    }


                  if(h2>MA_BUFF1[2]&&h2>MA_BUFF2[2]&&l2<MA_BUFF1[2]&&l2<MA_BUFF2[2])

                    {

                     mabuy=true;

                     masell=true;

                    }

                 }

              }

           }

        }

      //////////////candle coding



      if(candlemode=="BothWick")

        {


         if(o<c&&mariBullish==true)

           {

            if(stgmodes=="OnHighBreak")

              {

               double cwick=h-c;

               double owick=o-l;

               if(cwick>0 && owick>0 &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&& cmp>=h&&closing_Percentage()==true&&mabuy==true)

                 {


                  mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

                  Alert("BothWick Elephant candle bullish OnHighBreak  @: "+ Symbol());


                  value=h-l;

                  value=value*TargetMultiplier;

                  value=h+value;

                  Alert("BUY @ "+Symbol());

                  close_sell_position();

                  close_buy_position();

                  trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l,value,"AlgosysGridEA- StopReverse");

                 }


              }


            if(stgmodes=="OnCandleFormation")

              {

               double cwick=h-c;

               double owick=o-l;

               if(cwick>0 && owick>0 &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage()==true&&mabuy==true)

                 {


                  mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

                  Alert("BothWick Elephant candle bullish OnCandleFormation @: "+ Symbol());


                  value=h-l;

                  value=value*TargetMultiplier;

                  value=h+value;

                  Alert("BUY @ "+Symbol());

                  close_sell_position();

                  close_buy_position();

                  trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l,value,"AlgosysGridEA- StopReverse");

                 }



              }


            if(stgmodes=="NextCandleClose")

              {

               double   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

               double   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

               double   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

               double   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

               double  c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

               double low1=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

               double cwick=h2-c2;

               double owick=o2-l2;

               if(cwick>0 && owick>0 &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&c1>h2&&closing_Percentage()==true&&mabuy==true)

                 {

                  mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

                  Alert("BothWick Elephant candle bullish NextCandleClose @: "+ Symbol());


                  value=h2-l2;

                  value=value*TargetMultiplier;

                  value=h2+value;

                  Alert("BUY @ "+Symbol());

                  close_sell_position();

                  close_buy_position();

                  trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l2,value,"AlgosysGridEA- StopReverse");

                 }


              }

           }


         if(o>c&&mariBearish==true)

           {

            if(stgmodes=="OnHighBreak")

              {


               double cwick=h-o;

               double owick=c-l;

               if(cwick>0 && owick>0 &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&cmp<l&&closing_Percentage()==true&&masell==true)

                 {


                  mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

                  Alert("BothWick Elephant candle bearish OnHighBreak @: "+ Symbol());


                  value=h-l;

                  value=value*TargetMultiplier;

                  value=l-value;

                  Alert("SELL @ "+Symbol());

                  close_sell_position();

                  close_buy_position();

                  trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h,value,"AlgosysGridEA- StopReverse");


                 }

              }


            if(stgmodes=="OnCandleFormation")

              {


               double cwick=h-o;

               double owick=c-l;

               if(cwick>0 && owick>0 &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage()==true&&masell==true)

                 {


                  mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

                  Alert("BothWick Elephant candle bearish OnCandleFormation @: "+ Symbol());


                  value=h-l;

                  value=value*TargetMultiplier;

                  value=l-value;

                  Alert("SELL @ "+Symbol());

                  close_sell_position();

                  close_buy_position();

                  trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h,value,"AlgosysGridEA- StopReverse");


                 }

              }


           }


         if(stgmodes=="NextCandleClose")

           {

            double   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

            double   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

            double   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

            double   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

            double   c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

            double   cwick=h2-o2;

            double   owick=c2-l2;

            if(cwick>0 && owick>0 &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&c1<l2&&closing_Percentage()==true&&masell==true)

              {


               mentry=iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("BothWick Elephant candle bearish NextCandleClose @: "+ Symbol());


               value=h2-l2;

               value=value*TargetMultiplier;

               value=l2-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h2,value,"AlgosysGridEA- StopReverse");


              }

           }


        }



     }




   if(candlemode=="Closewick")

     {


      if(o<c&&mariBullish==true)

        {


         if(stgmodes=="OnHighBreak")

           {

            double cwick=h-c;

            if(cwick>0 && o==l &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&& cmp>h&&closing_Percentage()==true&&mabuy==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Closewick Elephant candle bullish OnHighBreak @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=h+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l,value,"AlgosysGridEA- StopReverse");


              }


           }


         if(stgmodes=="OnCandleFormation")

           {

            double cwick=h-c;

            if(cwick>0 && o==l &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage()==true&&mabuy==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Closewick Elephant candle bullish OnCandleFormation @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=h+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l,value,"AlgosysGridEA- StopReverse");


              }


           }


         if(stgmodes=="NextCandleClose")

           {

            double   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

            double   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

            double   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

            double   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

            double   c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

            double low1=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

            double cwick=h2-c2;

            if(cwick>0 && o2==l2 &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&c1>h2&&closing_Percentage()==true&&mabuy==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Closewick Elephant candle bullish NextCandleClose @: "+ Symbol());


               value=h2-l2;

               value=value*TargetMultiplier;

               value=h2+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l2,value,"AlgosysGridEA- StopReverse");


              }


           }


        }


      if(o>c&&mariBearish==true)

        {


         if(stgmodes=="OnHighBreak")

           {


            double cwick=c-l;

            if(cwick>0 && o==h &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&cmp<l&&closing_Percentage()==true&&masell==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Closewick Elephant candle bearish OnHighBreak @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=l-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h,value,"AlgosysGridEA- StopReverse");


              }

           }


         if(stgmodes=="OnCandleFormation")

           {


            double cwick=c-l;

            if(cwick>0 && o==h &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage()==true&&masell==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Closewick Elephant candle bearish OnCandleFormation @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=l-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h,value,"AlgosysGridEA- StopReverse");


              }

           }


         if(stgmodes=="NextCandleClose")

           {

            double   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

            double   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

            double   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

            double   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

            double   c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

            double cwick=c2-l2;

            if(cwick>0 && o2==h2&&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&c1>h2&&closing_Percentage()==true&&masell==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Closewick Elephant candle bearish NextCandleClose @: "+ Symbol());


               value=h2-l2;

               value=value*TargetMultiplier;

               value=l2-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h2,value,"AlgosysGridEA- StopReverse");


              }

           }


        }


     }





   if(candlemode=="Openwick")

     {



      if(o<c&&mariBullish==true)

        {


         if(stgmodes=="OnHighBreak")

           {

            double owick=o-l;

            if(owick>0 && c==h &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&cmp>h&&closing_Percentage()==true&&mabuy==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Openwick Elephant candle bullish OnHighBreak @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=h+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l,value,"AlgosysGridEA- StopReverse");


              }

           }


         if(stgmodes=="OnCandleFormation")

           {

            double owick=o-l;

            if(owick>0 && c==h &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage()==true&&mabuy==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Openwick Elephant candle bullish OnCandleFormation @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=h+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l,value,"AlgosysGridEA- StopReverse");


              }

           }


         if(stgmodes=="NextCandleClose")

           {

            double   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

            double   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

            double   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

            double   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

            double   c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

            double low1=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);


            double owick=o2-l2;

            if(owick>0 && c2==h2 &&iTime(Symbol(),PERIOD_CURRENT,0) != mentry&& c1>h2&&closing_Percentage()==true&&mabuy==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Openwick Elephant candle bullish NextCandleClose @: "+ Symbol());


               value=h2-l2;

               value=value*TargetMultiplier;

               value=h2+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l2,value,"AlgosysGridEA- StopReverse");


              }

           }


        }


      if(o>c&&mariBearish==true)

        {


         if(stgmodes=="OnHighBreak")

           {

            double owick=h-o;

            if(owick>0 &&c==l && iTime(Symbol(),PERIOD_CURRENT,0) != mentry&& cmp>h&&closing_Percentage()==true&&masell==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Openwick Elephant candle bearish OnHighBreak @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=l-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h,value,"AlgosysGridEA- StopReverse");


              }


           }


         if(stgmodes=="OnCandleFormation")

           {

            double owick=h-o;

            if(owick>0 &&c==l  && iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage()==true&&masell==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Openwick Elephant candle bearish OnCandleFormation @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=l-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h,value,"AlgosysGridEA- StopReverse");


              }


           }


         if(stgmodes=="NextCandleClose")

           {

            double   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

            double   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

            double   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

            double   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

            double   c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);



            double owick=h2-o2;

            if(owick>0 &&c2==l2  && iTime(Symbol(),PERIOD_CURRENT,0) != mentry&& c1<l2&&closing_Percentage()==true&&masell==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("Openwick Elephant candle bearish OnCandleFormation @: "+ Symbol());


               value=h2-l2;

               value=value*TargetMultiplier;

               value=l2-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h2,value,"AlgosysGridEA- StopReverse");


              }


           }

        }


     }


   if(candlemode=="NoWick")

     {


      if(o<c&&mariBullish==true)

        {

         if(stgmodes=="OnHighBreak")

           {

            if(o==l && c==h  && iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&cmp>h&&closing_Percentage()==true&&mabuy==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("No wick Elephant candle bullish OnHighBreak @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=h+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l,value,"AlgosysGridEA- StopReverse");


              }


           }

         if(stgmodes=="OnCandleFormation")

           {

            if(o==l && c==h  && iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage()==true&&mabuy==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("No wick Elephant candle bullish OnCandleFormation @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=h+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l,value,"AlgosysGridEA- StopReverse");


              }


           }

         if(stgmodes=="NextCandleClose")

           {

            double   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

            double   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

            double   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

            double   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

            double   c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

            double low1=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,1),2);

            if(o2==l2 && c2==h2  && iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&c1>h2&&closing_Percentage()==true&&mabuy==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("No wick Elephant candle bullish NextCandleClose @: "+ Symbol());


               value=h2-l2;

               value=value*TargetMultiplier;

               value=h2+value;

               Alert("BUY @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),l2,value,"AlgosysGridEA- StopReverse");


              }


           }

        }

      if(o>c&&mariBearish==true)

        {

         if(stgmodes=="OnHighBreak")

           {

            if(o==h && c==l  && iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&cmp<l&&closing_Percentage()==true&&masell==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("No wick Elephant candle bearish OnHighBreak @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=l-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h,value,"AlgosysGridEA- StopReverse");


              }


           }

         if(stgmodes=="OnCandleFormation")

           {

            if(o==h && c==l  && iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&closing_Percentage()==true&&masell==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("No wick Elephant candle bearish OnCandleFormation @: "+ Symbol());


               value=h-l;

               value=value*TargetMultiplier;

               value=l-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h,value,"AlgosysGridEA- StopReverse");


              }


           }


         if(stgmodes=="NextCandleClose")

           {

            double   h2=NormalizeDouble(iHigh(Symbol(),PERIOD_CURRENT,2),2);

            double   c2=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,2),2);

            double   l2=NormalizeDouble(iLow(Symbol(),PERIOD_CURRENT,2),2);

            double   o2=NormalizeDouble(iOpen(Symbol(),PERIOD_CURRENT,2),2);

            double   c1=NormalizeDouble(iClose(Symbol(),PERIOD_CURRENT,1),2);

            if(o2==h2 && c2==l2  && iTime(Symbol(),PERIOD_CURRENT,0) != mentry&&c1<l2&&closing_Percentage()==true&&masell==true)

              {


               mentry= iTime(Symbol(),PERIOD_CURRENT,0) ;

               Alert("No wick Elephant candle bearish OnCandleFormation @: "+ Symbol());


               value=h2-l2;

               value=value*TargetMultiplier;

               value=l2-value;

               Alert("SELL @ "+Symbol());

               close_sell_position();

               close_buy_position();

               trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),h2,value,"AlgosysGridEA- StopReverse");


              }


           }

        }

     }

  }




//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void highcal()

  {


   highvalue = iHigh(Symbol(),PERIOD_CURRENT,1);

   for(int i = 1; i < trendlookback; ++i)

     {

      if(iHigh(Symbol(),PERIOD_CURRENT,i) > highvalue)

         highvalue = iHigh(Symbol(),PERIOD_CURRENT,i);


      ObjectDelete(0,"highvalue");

      ObjectCreate(0, "highvalue", OBJ_HLINE, 0, 0, highvalue);

      ObjectSetInteger(0, "highvalue", OBJPROP_COLOR, Blue);

      ObjectSetInteger(0, "highvalue", OBJPROP_STYLE, STYLE_SOLID);

      ObjectSetInteger(0, "highvalue", OBJPROP_WIDTH, 2);

      ObjectSetInteger(0, "highvalue", OBJPROP_BACK, false);


     }

  }


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

//---



//+------------------------------------------------------------------+

//|                                                                  |

//+---------------------------------------------------------------

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void entry_hammer()

  {


   double curentClose=iClose(Symbol(),PERIOD_CURRENT,0);

   double previousClose=iClose(Symbol(),PERIOD_CURRENT,1);




   if(StrategyMode==OnHighBreak)

     {

      stgmodes="OnHighBreak";

     }

   else

      if(StrategyMode==OnCandleFormation)

        {

         stgmodes="OnCandleFormation";

        }

      else

         if(StrategyMode==NextCandleClose)

           {

            stgmodes="NextCandleClose";

           }


   if(stgmodes=="NextCandleClose")

     {


      open1=iOpen(Symbol(),PERIOD_CURRENT,2);

      high1=iHigh(Symbol(),PERIOD_CURRENT,2);

      low1=iLow(Symbol(),PERIOD_CURRENT,2);

      close1=iClose(Symbol(),PERIOD_CURRENT,2);

      body = MathAbs(close1 - open1);

      range = high1 - low1;

      lowerWick = open1 > close1 ? close1 - low1 : open1 - low1;

      upperWick = open1 > close1 ? high1 - open1 : high1 - close1;


      if((close1 > open1 && lowerWick >= body * Hammer_Wick_Multiplier && upperWick <= range * Hammer_Body_Percentage ||

          close1 < open1 && lowerWick >= body * Hammer_Wick_Multiplier && upperWick <= range * Hammer_Body_Percentage||

          close1 == open1 && close1 != high1 && range >= (high1- close1) * Hammer_Wick_Multiplier &&

          upperWick <= range * Hammer_Body_Percentage)&&

         previousClose>high1&&entry!=iTime(Symbol(),PERIOD_CURRENT,0)&&

         Hammer==true

        )

        {

         entry=iTime(Symbol(),PERIOD_CURRENT,0);

         buydraw();

         value=curentClose-low1;

         value=value*TargetMultiplier;

         value=curentClose+value;

         Alert("BUY @ "+Symbol());

         close_sell_position();

         close_sell_position();

         close_buy_position();

         trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),low1,value,"AlgosysGridEA- StopReverse");


        }



      //short

      if((close1 < open1 && upperWick >= body * Hammer_Wick_Multiplier && lowerWick <= range * Hammer_Body_Percentage||

          close1 > open1 && upperWick >= body * Hammer_Wick_Multiplier && lowerWick <= range * Hammer_Body_Percentage||

          close1 == open1 && close1 != low1 && range >= (close1 - low1) * Hammer_Wick_Multiplier && lowerWick <= range * Hammer_Body_Percentage)&&previousClose<low1&&entry!=iTime(Symbol(),PERIOD_CURRENT,0)&&invertedHammer==true)

        {

         entry=iTime(Symbol(),PERIOD_CURRENT,0);

         selldraw();

         value=high1-curentClose;

         value=value*TargetMultiplier;

         value=curentClose-value;

         Alert("SELL @ "+Symbol());

         close_sell_position();

         close_buy_position();

         trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),high1,value,"AlgosysGridEA- StopReverse");


        }



     }


   if(stgmodes=="OnHighBreak")

     {



      if((close1 > open1 && lowerWick >= body * Hammer_Wick_Multiplier && upperWick <= range * Hammer_Body_Percentage ||

          close1 < open1 && lowerWick >= body * Hammer_Wick_Multiplier && upperWick <= range * Hammer_Body_Percentage||

          close1 == open1 && close1 != high1 && range >= (high1- close1) * Hammer_Wick_Multiplier && upperWick <= range * Hammer_Body_Percentage)&&curentClose>high1&&entry!=iTime(Symbol(),PERIOD_CURRENT,0)&&

         Hammer==true)

        {

         entry=iTime(Symbol(),PERIOD_CURRENT,0);

         buydraw();

         value=curentClose-low1;

         value=value*TargetMultiplier;

         value=curentClose+value;

         Alert("BUY @ "+Symbol());

         close_sell_position();

         close_buy_position();

         trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),low1,value,"AlgosysGridEA- StopReverse");


        }


      if((close1 < open1 && upperWick >= body * Hammer_Wick_Multiplier && lowerWick <= range * Hammer_Body_Percentage||

          close1 > open1 && upperWick >= body * Hammer_Wick_Multiplier && lowerWick <= range * Hammer_Body_Percentage||

          close1 == open1 && close1 != low1 && range >= (close1 - low1) * Hammer_Wick_Multiplier && lowerWick <= range * Hammer_Body_Percentage)&&curentClose<low1&&entry!=iTime(Symbol(),PERIOD_CURRENT,0)&&invertedHammer==true)

        {

         entry=iTime(Symbol(),PERIOD_CURRENT,0);

         selldraw();

         value=high1-curentClose;

         value=value*TargetMultiplier;

         value=curentClose-value;

         Alert("SELL @ "+Symbol());

         close_sell_position();

         close_buy_position();

         trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),high1,value,"AlgosysGridEA- StopReverse");


        }


     }



   if(stgmodes=="OnCandleFormation")

     {


      ///buy

      if((close1 > open1 && lowerWick >= body * Hammer_Wick_Multiplier && upperWick <= range * Hammer_Body_Percentage ||

          close1 < open1 && lowerWick >= body * Hammer_Wick_Multiplier && upperWick <= range * Hammer_Body_Percentage||

          close1 == open1 && close1 != high1 && range >= (high1- close1) * Hammer_Wick_Multiplier && upperWick <= range * Hammer_Body_Percentage)&&entry!=iTime(Symbol(),PERIOD_CURRENT,0)&&

         Hammer==true)

        {

         entry=iTime(Symbol(),PERIOD_CURRENT,0);

         buydraw();

         value=curentClose-low1;

         value=value*TargetMultiplier;

         value=curentClose+value;

         Alert("BUY @ "+Symbol());

         close_sell_position();

         close_buy_position();

         trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),low1,value,"AlgosysGridEA- StopReverse");


        }



      //short

      if((close1 < open1 && upperWick >= body * Hammer_Wick_Multiplier && lowerWick <= range * Hammer_Body_Percentage||

          close1 > open1 && upperWick >= body * Hammer_Wick_Multiplier && lowerWick <= range * Hammer_Body_Percentage||

          close1 == open1 && close1 != low1 && range >= (close1 - low1) * Hammer_Wick_Multiplier && lowerWick <= range * Hammer_Body_Percentage)&&entry!=iTime(Symbol(),PERIOD_CURRENT,0)&&invertedHammer==true)

        {

         entry=iTime(Symbol(),PERIOD_CURRENT,0);

         selldraw();

         value=high1-curentClose;

         value=value*TargetMultiplier;

         value=curentClose-value;

         Alert("SELL @ "+Symbol());

         close_sell_position();

         close_buy_position();

         trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),high1,value,"AlgosysGridEA- StopReverse");


        }






     }


  }





//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void CreateHorizontalLine(string lineName, double price, color lineColor, ENUM_LINE_STYLE style, int width)

  {

// Create the horizontal line object

   if(ObjectCreate(0, lineName, OBJ_HLINE, 0, 0, price))

     {


      ObjectSetInteger(0, lineName, OBJPROP_COLOR, lineColor);


      ObjectSetInteger(0, lineName, OBJPROP_STYLE, style);


      ObjectSetInteger(0, lineName, OBJPROP_WIDTH, width);


      ObjectSetInteger(0, lineName, OBJPROP_BACK, false);


      Print("Horizontal line created successfully.");

     }

   else

     {

      Print("Error creating horizontal line: ", GetLastError());

     }

  }


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void OnTick()

  {

   open1=iOpen(Symbol(),PERIOD_CURRENT,1);

   high1=iHigh(Symbol(),PERIOD_CURRENT,1);

   low1=iLow(Symbol(),PERIOD_CURRENT,1);

   close1=iClose(Symbol(),PERIOD_CURRENT,1);

   currentClose=iClose(Symbol(),PERIOD_CURRENT,0);


   body = MathAbs(close1 - open1);

   range = high1 - low1;

   lowerWick = open1 > close1 ? close1 - low1 : open1 - low1;

   upperWick = open1 > close1 ? high1 - open1 : high1 - close1;

// Comment("body: "+body+"\n\nrange: "+range+"\n\nlowerWick: "+lowerWick+"\n\nupperWick: "+upperWick);

//---

   if(check_SELL_open_position()==0&&check_buy_open_position()==0)

     {

      entry_hammer();

      Maribozu();

      engulfing();

      Soldier();

      Crow();

     }


Comment("check_SELL_open_position: "+check_SELL_open_position()+"\n\check_buy_open_position: "+check_buy_open_position()+"\n\closing_Percentage_soldier(): "+closing_Percentage_soldier());

//---

  }


int  check_buy_open_position()


  {


   int numberofbuyposition=0;


   for(int i = PositionsTotal()-1;i>=0;i--)


     {


      string currencypair=PositionGetSymbol(i);


      int position_direction=PositionGetInteger(POSITION_TYPE);


      if(Symbol()==currencypair && position_direction == POSITION_TYPE_BUY)


        {


         numberofbuyposition=numberofbuyposition+1;


        }


     }


   return numberofbuyposition;


  }




int  check_SELL_open_position()


  {


   int numberofSELLposition=0;


   for(int i = PositionsTotal()-1;i>=0;i--)


     {


      string currencypair=PositionGetSymbol(i);


      int position_direction=PositionGetInteger(POSITION_TYPE);


      if(Symbol()==currencypair && position_direction == POSITION_TYPE_SELL)


        {


         numberofSELLposition=numberofSELLposition+1;


        }


     }


   return numberofSELLposition;


  }






//+------------------------------------------------------------------+

void buydraw()

  {

   ObjectCreate(Symbol(),"BUYSIGNAL"+iTime(Symbol(),PERIOD_CURRENT,0),OBJ_ARROW_BUY,0,iTime(Symbol(),PERIOD_CURRENT,1),iLow(Symbol(),PERIOD_CURRENT,1));

  }


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void selldraw()

  {

   ObjectCreate(Symbol(),"SELLSIGNAL"+iTime(Symbol(),PERIOD_CURRENT,0),OBJ_ARROW_SELL,0,iTime(Symbol(),PERIOD_CURRENT,1),iHigh(Symbol(),PERIOD_CURRENT,1));

  }

//+------------------------------------------------------------------+

void close_sell_position()

  {

   for(int i=PositionsTotal()-1; i>=0; i--)

     {

      string currencypair=PositionGetSymbol(i);

      int position_direction=PositionGetInteger(POSITION_TYPE);

      int posmagic=PositionGetInteger(POSITION_MAGIC);

      Alert("posmagic: "+posmagic);

      Alert("MagicNumber: "+MagicNumber);

      if(currencypair==Symbol() && position_direction == POSITION_TYPE_SELL&& int(posmagic) == int(MagicNumber))

        {

         Alert("MagicNumber: reaching");

         ulong ticket=PositionGetTicket(i);

         trade.PositionClose(ticket);

        }

     }


  }



//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void close_buy_position()

  {

   for(int i=PositionsTotal()-1; i>=0; i--)

     {

      string currencypair=PositionGetSymbol(i);

      int position_direction=PositionGetInteger(POSITION_TYPE);

      int posmagic=PositionGetInteger(POSITION_MAGIC);

      Alert("posmagic: "+posmagic);

      Alert("MagicNumber: "+MagicNumber);

      if(currencypair==Symbol() && position_direction == POSITION_TYPE_BUY&& int(posmagic) == int(MagicNumber)

        )

        {

         Alert("MagicNumber: reaching");

         ulong ticket=PositionGetTicket(i);

         trade.PositionClose(ticket);

        }

     }

  }


//+------------------------------------------------------------------+


//+------------------------------------------------------------------+


//+------------------------------------------------------------------+


Comments

Popular posts from this blog

MQL5 : Add time to current time in mins

MQL5: Closed order detail