EA System Revolution 1.0

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

//|                                  EA Systems - Revolution 1.0.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"

#include <Trade\Trade.mqh>

CTrade trade;

input double lotsize;

input string TradeStartTime = "15:34";

input string TradeStopTime = "15:36";

input bool CloseTradesAtStopTime=false;

input double Target;

input double Stoploss;

input bool USE_TSL=false;

input double TSL_START;

input double TSL_STEP;

bool initial_orders=false;

bool EAActivated=false;

string check=NULL;

double buysl,sellsl,buytgt,selltgt,startval_buy,stepval_buy,startval_sell,stepval_sell;

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

//| Expert initialization function                                   |

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

int OnInit()

  {

//---


//---

   return(INIT_SUCCEEDED);

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

//---


  }

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

//| Expert tick function

//1) open trade without any condition

//2)                                           |

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


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

//|                                                                  |

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

double close;

void OnTick()

  {


   if(TimeCurrent()>StringToTime(TradeStartTime) && TimeCurrent()<StringToTime(TradeStopTime))

     {

      EAActivated = true;

     }

   else

     {

      EAActivated = false;

     }


   if(EAActivated == true)

     {

      check="Trading enabled";

     }

   if(EAActivated == false)

     {

      check="Trading Disabled";

     }



   if(CloseTradesAtStopTime==true &&TimeCurrent()>StringToTime(TradeStopTime))

     {

      close_sell_position();

      close_buy_position();


     }


   Comment(check);


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


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

     {

      initial_orders=true;

      if(Target>0)

        {

         buytgt=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)+Target;

         buytgt=NormalizeDouble(buytgt,_Digits);

         

         selltgt=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)-Target;

         selltgt=NormalizeDouble(selltgt,_Digits);

        }

      if(Stoploss>0)

        {

         buysl=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)-Stoploss;

         buysl=NormalizeDouble(buysl,_Digits);

         

         sellsl=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)+Stoploss;

         sellsl=NormalizeDouble(sellsl,_Digits);

        }


      if(TSL_START>0&&USE_TSL==true)

        {

         startval_buy=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)+TSL_START;

         stepval_buy=buysl+TSL_STEP;

         startval_sell=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)-TSL_START;

         stepval_sell=sellsl-TSL_STEP;

        }



      trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),buysl,buytgt,"Ea System Revolution");

      trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),sellsl,selltgt,"Ea System Revolution");

     }


   if(initial_orders==true &&EAActivated == true)

     {

      if(check_open_position()==0)

        {

         if(Target>0)

           {

            buytgt=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)+Target;

            buytgt=NormalizeDouble(buytgt,_Digits);

            selltgt=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)-Target;

            selltgt=NormalizeDouble(selltgt,_Digits);

           }

         if(Stoploss>0)

           {

            buysl=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)-Stoploss;

            buysl=NormalizeDouble(buysl,_Digits);

            sellsl=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)+Stoploss;

            sellsl=NormalizeDouble(sellsl,_Digits);

           }


         trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),buysl,buytgt,"Ea System Revolution");

         trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),sellsl,selltgt,"Ea System Revolution");


         if(TSL_START>0&&USE_TSL==true)

           {

            startval_buy=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)+TSL_START;

            stepval_buy=buysl+TSL_STEP;

            startval_sell=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)-TSL_START;

            stepval_sell=sellsl-TSL_STEP;

           }


        }


      if(close<=startval_sell&&startval_sell>0&&USE_TSL==true)

        {

         startval_sell=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)-TSL_START;

         selltsl(stepval_sell);

         sellsl=stepval_sell;

         stepval_sell=sellsl-TSL_STEP;

        }


      if(close>=startval_buy&&startval_buy>0&&USE_TSL==true)

        {

         startval_buy=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)+TSL_START;

         buytsl(stepval_buy);

         buysl=stepval_buy;

         stepval_buy=buysl+TSL_STEP;

        }




     }

   Comment("check_open_position: "+check_open_position());

  }

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


// exit sell alll position function




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

//|                                                                  |

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


void buytsl(double NEWSL)


  {

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

     {

      string currencypair=PositionGetSymbol(i);

      int position_direction=PositionGetInteger(POSITION_TYPE);

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

        {

         ulong ticket=PositionGetTicket(i);

         double tp=PositionGetDouble(POSITION_TP);

         trade.PositionModify(ticket,NEWSL,tp);

        }

     }

  }



void selltsl(double NEWSL)


  {

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

     {

      string currencypair=PositionGetSymbol(i);

      int position_direction=PositionGetInteger(POSITION_TYPE);

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

        {

         ulong ticket=PositionGetTicket(i);

         double tp=PositionGetDouble(POSITION_TP);

         trade.PositionModify(ticket,NEWSL,tp);

        }

     }

  }



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

//|                                                                  |

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

void close_sell_position()

  {

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

     {

      string currencypair=PositionGetSymbol(i);

      int position_direction=PositionGetInteger(POSITION_TYPE);

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

        {

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

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

        {

         int ticket=PositionGetTicket(i);

         trade.PositionClose(ticket);

        }

     }

  }




int  check_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)


        {


         numberofSELLposition=numberofSELLposition+1;


        }


     }


   return numberofSELLposition;


  }


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


Comments

Popular posts from this blog

MQL5 : Add time to current time in mins

MQL5: Closed order detail