MQL5: Dymmy ZigZag (Harish upwork strategy)

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

//|                                                 Dummy zigzag.mq5 |

//|                                  Copyright 2023, MetaQuotes Ltd. |

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

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

#property copyright "Copyright 2023, MetaQuotes Ltd."

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

#property version   "1.00"

input string TradeStartTime = "00:00";

input string TradeStopTime = "13:25";

input bool Positional=true;

input double MagicNumber=12345;

input double Lotsize=1;

input double RoundOffLevel=1;

input double RoundOfDist=1;

input bool Trend =false;

input bool useDummy =false;

input int DummyLevel=0;

bool runOnce=false,first=false;

double buylevel=0,selllevel=0,roundoffval,ltp;

string Trade=NULL;

int buycount=0,sellcount=0;

#include <Trade\Trade.mqh>

CTrade trade;

bool EAActivated = false;

bool buydummydone=false,selldummydone=false;


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

//|                                                                  |

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

double RoundToNearest(double value, double interval)

  {

   return MathRound(value / interval) * interval;

  }

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

//| Expert initialization function                                   |

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

int OnInit()

  {

//---


//---

   return(INIT_SUCCEEDED);

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

//---


  }

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

//| Expert tick function                                             |

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

double  ask,bid;

void OnTick()

  {


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


   if(Trend ==false)

     {

      ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);

      bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);

     }

   if(Trend==true)

     {

      ask= SymbolInfoDouble(Symbol(),SYMBOL_BID);

      bid= SymbolInfoDouble(Symbol(),SYMBOL_ASK);

     }




   if(Positional==true)

     {

      EAActivated = true;

     }


   if(Positional==false)

     {

      datetime current_time = TimeCurrent();

      datetime start_time = StringToTime(TradeStartTime);

      datetime stop_time = StringToTime(TradeStopTime);


      if(current_time >= start_time && current_time <= stop_time)

        {

         EAActivated = true;

        }

      else

        {

         EAActivated = false;

         close_buy_position();

         close_sell_position();

         runOnce=false;

         buylevel=0;

         selllevel=0;

         first=false;

        }

     }


   Comment("selllevel: "+selllevel+"\n\nbuylevel: "+buylevel+"\n\nTrade: "+Trade);


   if(runOnce==false&& EAActivated == true)

     {

      roundoffval=RoundToNearest(ltp, RoundOffLevel);

      buylevel=roundoffval-RoundOfDist;

      selllevel=roundoffval+RoundOfDist;

      runOnce=true;

     }


   if(runOnce==true&& EAActivated == true)

     {


      if(ask<=buylevel&&first==false)

        {

         first=true;

         Alert("Initial Buy @ "+Symbol());


         if(useDummy==true)

           {

            if(Trend ==false)

              {

               buydraw();

               if(buycount==DummyLevel)

                 {

                  trade.SetExpertMagicNumber(MagicNumber);

                  trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix  Dummy Zig Zag Buy");


                 }

              }


            if(Trend ==true)

              {

               selldraw();

               if(buycount==DummyLevel)

                 {

                  trade.SetExpertMagicNumber(MagicNumber);

                  trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");

                 }

              }

            buycount++;

            sellcount=0;

           }


         if(useDummy==false)

           {

            if(Trend ==false)

              {

               trade.SetExpertMagicNumber(MagicNumber);

               trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix  Dummy Zig Zag Buy");

              }


            if(Trend ==true)

              {

               trade.SetExpertMagicNumber(MagicNumber);

               trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");

              }

           }


         buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;

         selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;

         Trade="BUY";

        }


      if(bid>=selllevel&&first==false)

        {

         first=true;

         Alert("Initial Sell @ "+Symbol());


         if(useDummy==true)

           {

            if(Trend ==false&& sellcount==DummyLevel)

              {

               trade.SetExpertMagicNumber(MagicNumber);

               trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");

              }


            if(Trend ==true&& sellcount==DummyLevel)

              {

               trade.SetExpertMagicNumber(MagicNumber);

               trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix  Dummy Zig Zag Buy");

              }

            sellcount++;

            buycount=0;

           }


         if(useDummy==false)

           {

            if(Trend ==false)

              {

               trade.SetExpertMagicNumber(MagicNumber);

               trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");

              }


            if(Trend ==true)

              {

               trade.SetExpertMagicNumber(MagicNumber);

               trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix  Dummy Zig Zag Buy");

              }

           }


         buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;

         selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;

         Trade="SHORT";

        }



      if(first==true&& EAActivated == true)

        {


         if(Trade=="BUY"&&bid<=buylevel)

           {


            if(useDummy==true)

              {

               if(Trend ==false)

                 {

                  close_buy_position();

                  buydraw();


                  if(buycount==DummyLevel)

                    {

                     trade.SetExpertMagicNumber(MagicNumber);

                     trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix  Dummy Zig Zag Buy");

                    }


                 }

               if(Trend ==true)

                 {

                  close_sell_position();

                  selldraw();

                  if(buycount==DummyLevel)

                    {

                     trade.SetExpertMagicNumber(MagicNumber);

                     trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");

                    }

                 }

               buycount++;

              }

            if(useDummy==false)

              {

               if(Trend ==false)

                 {

                  close_buy_position();

                  buydraw();

                 }

               if(Trend ==true)

                 {

                  close_sell_position();

                  selldraw();

                 }

              }


            buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;

            selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;

           }



         if(Trade=="BUY"&&bid>=selllevel)

           {

            Trade="SHORT";

            if(useDummy==true)

              {

               if(Trend ==false)

                 {

                  close_buy_position();

                  // trade.SetExpertMagicNumber(MagicNumber);

                  //trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");

                 }

               if(Trend ==true)

                 {

                  close_sell_position();

                  // trade.SetExpertMagicNumber(MagicNumber);

                  // trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix  Dummy Zig Zag Buy");

                 }

               buycount=0;

               sellcount++;

              }

            if(useDummy==false)

              {

               if(Trend ==false)

                 {

                  close_buy_position();

                  trade.SetExpertMagicNumber(MagicNumber);

                  trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");

                 }

               if(Trend ==true)

                 {

                  close_sell_position();

                  trade.SetExpertMagicNumber(MagicNumber);

                  trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix  Dummy Zig Zag Buy");

                 }

              }


            buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;

            selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;

           }


         if(Trade=="SHORT"&&ask>=selllevel)

           {

            if(useDummy==true)

              {

               if(Trend ==false)

                 {

                  close_sell_position();

                  selldraw();

                  if(sellcount==DummyLevel)

                    {

                     trade.SetExpertMagicNumber(MagicNumber);

                     trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");

                    }

                 }

               if(Trend ==true)

                 {

                  close_buy_position();

                  buydraw();

                  if(sellcount==DummyLevel)

                    {

                     trade.SetExpertMagicNumber(MagicNumber);

                     trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur: Programetix  Dummy Zig Zag Buy");

                    }

                 }

               sellcount++;

              }

            if(useDummy==false)

              {

               if(Trend ==false)

                 {

                  close_sell_position();

                  selldraw();

                 }

               if(Trend ==true)

                 {

                  close_buy_position();

                  buydraw();

                 }

              }

            buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;

            selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;


           }


         if(Trade=="SHORT"&&ask<=buylevel)

           {

            Trade="BUY";

            if(useDummy==true)

              {

               if(Trend ==false)

                 {

                  close_sell_position();

                  // trade.SetExpertMagicNumber(MagicNumber);

                  // trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur:Programetix  Dummy Zig Zag Buy");

                 }

               if(Trend ==true)

                 {

                  close_buy_position();

                  //   trade.SetExpertMagicNumber(MagicNumber);

                  //   trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");

                 }

               buycount++;

               sellcount=0;

              }

            if(useDummy==false)

              {

               if(Trend ==false)

                 {

                  close_sell_position();

                  trade.SetExpertMagicNumber(MagicNumber);

                  trade.Buy(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),0,0," Algosangrur:Programetix  Dummy Zig Zag Buy");

                 }

               if(Trend ==true)

                 {

                  close_buy_position();

                  trade.SetExpertMagicNumber(MagicNumber);

                  trade.Sell(Lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),0,0," Algosangrur: Programetix Dummy Zig Zag Sell");

                 }

              }

            buylevel=RoundToNearest(ltp, RoundOffLevel)-RoundOfDist;

            selllevel=RoundToNearest(ltp, RoundOffLevel)+RoundOfDist;

           }

        }

     }

  }

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

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);



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

        {

         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);


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

        )

        {


         ulong ticket=PositionGetTicket(i);

         trade.PositionClose(ticket);

        }

     }

  }



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

//|                                                                  |

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

void buydraw()

  {

   string arrowName="BUYSIGNAL"+iTime(Symbol(),PERIOD_CURRENT,0);

   ObjectCreate(Symbol(),arrowName,OBJ_ARROW_BUY,0,iTime(Symbol(),PERIOD_CURRENT,1),iHigh(Symbol(),PERIOD_CURRENT,1));

   ObjectSetInteger(0, arrowName, OBJPROP_COLOR, clrLimeGreen);


  }


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

//|                                                                  |

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

void selldraw()


  {


   string arrowName="SELLSIGNAL"+iTime(Symbol(),PERIOD_CURRENT,0);

   ObjectCreate(Symbol(),arrowName,OBJ_ARROW_SELL,0,TimeCurrent(),iHigh(Symbol(),PERIOD_CURRENT,1));

   ObjectSetInteger(0, arrowName, OBJPROP_COLOR, clrGold);


  }

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


Comments

Popular posts from this blog

MQL5 : Add time to current time in mins

MQL5: Closed order detail