mq5-placing limit order

 

Hello, I have a problem with my source code

The EA should place a limit order once it finds a good entry even if there is still an open limit order

However, it does not work like that, please help me to fix it(if I remove the OrderTolatl()==0, it works but it places many orders)

Thanks in advance

#include<Trade\Trade.mqh> 
// Create an instance from CTrade 
CTrade trade; 
//--- input parameters
input int      StopLoss=500;      // Stop Loss
input int      TakeProfit=1000;   // Take Profit
input double   Lot=3.0;          // Lots to Trade
double Open4; // 
double Open5; // 
void OnTick() {
 // We calculate the Ask price
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
         // We calculate the Bid price 
double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); 
// Create a string for the signal
 string signal=""; 

////////////////////////////////////////
bool SellCandle1= iOpen(Symbol(),Period(),1)-iClose(Symbol(),Period(),1)>0;
bool BuyCandle1= iClose(Symbol(),Period(),1)-iOpen(Symbol(),Period(),1)>0;
bool SellCandle2= iOpen(Symbol(),Period(),2)-iClose(Symbol(),Period(),2)>0;
bool BuyCandle2= iClose(Symbol(),Period(),2)-iOpen(Symbol(),Period(),2)>0;
bool SellCandle3= iOpen(Symbol(),Period(),3)-iClose(Symbol(),Period(),3)>0;
bool BuyCandle3= iClose(Symbol(),Period(),3)-iOpen(Symbol(),Period(),3)>0;
////////////////////////////////////////

////////////////////////////////////////
bool CondBUY1= iOpen(Symbol(),Period(),5)-iClose(Symbol(),Period(),5)>0 
            && (((iClose(Symbol(),Period(),4)-iOpen(Symbol(),Period(),4)>0 && iOpen(Symbol(),Period(),5)>iOpen(Symbol(),Period(),3) && iOpen(Symbol(),Period(),5)>iOpen(Symbol(),Period(),2))
                  && (iClose(Symbol(),Period(),4)-iOpen(Symbol(),Period(),4)>0 && iOpen(Symbol(),Period(),5)>iClose(Symbol(),Period(),3) && iOpen(Symbol(),Period(),5)>iClose(Symbol(),Period(),2)))
                && ((iClose(Symbol(),Period(),4)-iOpen(Symbol(),Period(),4)>0 && iClose(Symbol(),Period(),5)<iOpen(Symbol(),Period(),3) && iClose(Symbol(),Period(),5)<iOpen(Symbol(),Period(),2))
                  && (iClose(Symbol(),Period(),4)-iOpen(Symbol(),Period(),4)>0 && iClose(Symbol(),Period(),5)<iClose(Symbol(),Period(),3) && iClose(Symbol(),Period(),5)<iClose(Symbol(),Period(),2))))
            && iOpen(Symbol(),Period(),5)<iClose(Symbol(),Period(),1);
            
bool CondBUY2= iOpen(Symbol(),Period(),4)-iClose(Symbol(),Period(),4)>0 
            && (((iClose(Symbol(),Period(),3)-iOpen(Symbol(),Period(),3)>0 && iOpen(Symbol(),Period(),4)>iOpen(Symbol(),Period(),2))
                  && (iClose(Symbol(),Period(),3)-iOpen(Symbol(),Period(),3)>0 && iOpen(Symbol(),Period(),4)>iClose(Symbol(),Period(),2)))
                && ((iClose(Symbol(),Period(),3)-iOpen(Symbol(),Period(),3)>0 && iClose(Symbol(),Period(),4)<iOpen(Symbol(),Period(),2))
                  && (iClose(Symbol(),Period(),3)-iOpen(Symbol(),Period(),3)>0 && iClose(Symbol(),Period(),4)<iClose(Symbol(),Period(),2))))
            && iOpen(Symbol(),Period(),4)<iClose(Symbol(),Period(),1);
            
            
bool CondSELL1= iClose(Symbol(),Period(),5)-iOpen(Symbol(),Period(),5)>0 
            && (((iOpen(Symbol(),Period(),4)-iClose(Symbol(),Period(),4)>0 && iOpen(Symbol(),Period(),5)<iOpen(Symbol(),Period(),3) && iOpen(Symbol(),Period(),5)<iOpen(Symbol(),Period(),2))
                  && (iOpen(Symbol(),Period(),4)-iClose(Symbol(),Period(),4)>0 && iOpen(Symbol(),Period(),5)<iClose(Symbol(),Period(),3) && iOpen(Symbol(),Period(),5)<iClose(Symbol(),Period(),2)))
                && ((iOpen(Symbol(),Period(),4)-iClose(Symbol(),Period(),4)>0 && iClose(Symbol(),Period(),5)>iOpen(Symbol(),Period(),3) && iClose(Symbol(),Period(),5)>iOpen(Symbol(),Period(),2))
                  && (iOpen(Symbol(),Period(),4)-iClose(Symbol(),Period(),4)>0 && iClose(Symbol(),Period(),5)>iClose(Symbol(),Period(),3) && iClose(Symbol(),Period(),5)>iClose(Symbol(),Period(),2))))
            && iOpen(Symbol(),Period(),5)>iClose(Symbol(),Period(),1);
            
bool CondSELL2= iClose(Symbol(),Period(),4)-iOpen(Symbol(),Period(),4)>0 
            && (((iOpen(Symbol(),Period(),3)-iClose(Symbol(),Period(),3)>0 && iOpen(Symbol(),Period(),4)<iOpen(Symbol(),Period(),2))
                  && (iOpen(Symbol(),Period(),3)-iClose(Symbol(),Period(),3)>0 && iOpen(Symbol(),Period(),4)<iClose(Symbol(),Period(),2)))
                && ((iOpen(Symbol(),Period(),3)-iClose(Symbol(),Period(),3)>0 && iClose(Symbol(),Period(),4)>iOpen(Symbol(),Period(),2))
                  && (iOpen(Symbol(),Period(),3)-iClose(Symbol(),Period(),3)>0 && iClose(Symbol(),Period(),4)>iClose(Symbol(),Period(),2))))
            && iOpen(Symbol(),Period(),4)>iClose(Symbol(),Period(),1);
////////////////////////////////////////
if ( //  
      ( CondBUY1)) { 
       signal="buy1"; } 
if ( // 
      ( CondBUY2)) { 
       signal="buy2"; } 
if ( // 
      (CondSELL1) ) { 
       signal="sell1";  }
if ( // 
      (CondSELL2) ) { 
       signal="sell2";  }
       
       
       ///////////////////////////////////////////////////////////////
                  //  stop loss and take profit //
            double TP;
            double SL;
            if(CondBUY1){
                     if(iLow(Symbol(),Period(),5)<iLow(Symbol(),Period(),4)
                        && iLow(Symbol(),Period(),5)<iLow(Symbol(),Period(),3)
                        && iLow(Symbol(),Period(),5)<iLow(Symbol(),Period(),2)){
                        SL= iLow(Symbol(),Period(),5)-(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))+(((iClose(Symbol(),Period(),1)-iLow(Symbol(),Period(),5))*61)/100);
                        }
                     if(iLow(Symbol(),Period(),4)<iLow(Symbol(),Period(),5)
                        && iLow(Symbol(),Period(),4)<iLow(Symbol(),Period(),3)
                        && iLow(Symbol(),Period(),4)<iLow(Symbol(),Period(),2)){
                        SL= iLow(Symbol(),Period(),4)-(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))+(((iClose(Symbol(),Period(),1)-iLow(Symbol(),Period(),4))*61)/100);
                        }
                     if(iLow(Symbol(),Period(),3)<iLow(Symbol(),Period(),4)
                        && iLow(Symbol(),Period(),3)<iLow(Symbol(),Period(),5)
                        && iLow(Symbol(),Period(),3)<iLow(Symbol(),Period(),2)){
                        SL= iLow(Symbol(),Period(),3)-(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))+(((iClose(Symbol(),Period(),1)-iLow(Symbol(),Period(),3))*61)/100);
                        }
                     if(iLow(Symbol(),Period(),2)<iLow(Symbol(),Period(),4)
                        && iLow(Symbol(),Period(),2)<iLow(Symbol(),Period(),3)
                        && iLow(Symbol(),Period(),2)<iLow(Symbol(),Period(),5)){
                        SL= iLow(Symbol(),Period(),2)-(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))+(((iClose(Symbol(),Period(),1)-iLow(Symbol(),Period(),2))*61)/100);
                        }}
            if(CondBUY2){
                     if(iLow(Symbol(),Period(),4)<iLow(Symbol(),Period(),3)
                        && iLow(Symbol(),Period(),4)<iLow(Symbol(),Period(),2)){
                        SL= iLow(Symbol(),Period(),4)-(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))+(((iClose(Symbol(),Period(),1)-iLow(Symbol(),Period(),4))*61)/100);
                        }
                     if(iLow(Symbol(),Period(),3)<iLow(Symbol(),Period(),4)
                        && iLow(Symbol(),Period(),3)<iLow(Symbol(),Period(),2)){
                        SL= iLow(Symbol(),Period(),3)-(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))+(((iClose(Symbol(),Period(),1)-iLow(Symbol(),Period(),3))*61)/100);
                        }
                     if(iLow(Symbol(),Period(),2)<iLow(Symbol(),Period(),4)
                        && iLow(Symbol(),Period(),2)<iLow(Symbol(),Period(),3)){
                        SL= iLow(Symbol(),Period(),2)-(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))+(((iClose(Symbol(),Period(),1)-iLow(Symbol(),Period(),2))*61)/100);
                        }}
                        
                       
            if(CondSELL1){
                     if(iHigh(Symbol(),Period(),5)>iHigh(Symbol(),Period(),4)
                        && iHigh(Symbol(),Period(),5)>iHigh(Symbol(),Period(),3)
                        && iHigh(Symbol(),Period(),5)>iHigh(Symbol(),Period(),2)){
                        SL= iHigh(Symbol(),Period(),5)+(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))-(((iHigh(Symbol(),Period(),5)-iClose(Symbol(),Period(),1))*61)/100);
                        }
                     if(iHigh(Symbol(),Period(),4)>iHigh(Symbol(),Period(),5)
                        && iHigh(Symbol(),Period(),4)>iHigh(Symbol(),Period(),3)
                        && iHigh(Symbol(),Period(),4)>iHigh(Symbol(),Period(),2)){
                        SL= iHigh(Symbol(),Period(),4)+(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))-(((iHigh(Symbol(),Period(),4)-iClose(Symbol(),Period(),1))*61)/100);
                        }
                     if(iHigh(Symbol(),Period(),3)>iHigh(Symbol(),Period(),4)
                        && iHigh(Symbol(),Period(),3)>iHigh(Symbol(),Period(),5)
                        && iHigh(Symbol(),Period(),3)>iHigh(Symbol(),Period(),2)){
                        SL= iHigh(Symbol(),Period(),3)+(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))-(((iHigh(Symbol(),Period(),3)-iClose(Symbol(),Period(),1))*61)/100);
                        }
                     if(iHigh(Symbol(),Period(),2)>iHigh(Symbol(),Period(),4)
                        && iHigh(Symbol(),Period(),2)>iHigh(Symbol(),Period(),3)
                        && iHigh(Symbol(),Period(),2)>iHigh(Symbol(),Period(),5)){
                        SL= iHigh(Symbol(),Period(),2)+(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))-(((iHigh(Symbol(),Period(),2)-iClose(Symbol(),Period(),1))*61)/100);
                        }}
            if(CondSELL2){
                     if(iHigh(Symbol(),Period(),4)>iHigh(Symbol(),Period(),3)
                        && iHigh(Symbol(),Period(),4)>iHigh(Symbol(),Period(),2)){
                        SL= iHigh(Symbol(),Period(),4)+(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))-(((iHigh(Symbol(),Period(),4)-iClose(Symbol(),Period(),1))*61)/100);
                        }
                     if(iHigh(Symbol(),Period(),3)>iHigh(Symbol(),Period(),4)
                        && iHigh(Symbol(),Period(),3)>iHigh(Symbol(),Period(),2)){
                        SL= iHigh(Symbol(),Period(),3)+(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))-(((iHigh(Symbol(),Period(),3)-iClose(Symbol(),Period(),1))*61)/100);
                        }
                     if(iHigh(Symbol(),Period(),2)>iHigh(Symbol(),Period(),3)
                        && iHigh(Symbol(),Period(),2)>iHigh(Symbol(),Period(),4)){
                        SL= iHigh(Symbol(),Period(),2)+(StopLoss*_Point);
                        TP=(iOpen(Symbol(),Period(),1))-(((iHigh(Symbol(),Period(),2)-iClose(Symbol(),Period(),1))*61)/100);
                        }}
       ///////////////////////////////////////////////////////////////
       
       
       // 
       Open4= iOpen(Symbol(),Period(),4);
       Open5= iOpen(Symbol(),Period(),5);
if(OrdersTotal()==0 && PositionsTotal()==0){
      if (signal =="sell1") {
      trade.SellLimit(3.00,Open5,NULL,SL,TP,ORDER_TIME_GTC,0,0);}
      if (signal =="sell2") {
      trade.SellLimit(3.00,Open4,NULL,SL,TP,ORDER_TIME_GTC,0,0);}
       // buy 10 Microlot 
      if (signal =="buy1"){ 
      trade.BuyLimit(3.00,Open5,NULL,SL,TP,ORDER_TIME_GTC,0,0);}
      if (signal =="buy2"){ 
      trade.BuyLimit(3.00,Open4,NULL,SL,TP,ORDER_TIME_GTC,0,0);}
// 
}

if(OrdersTotal()>0 && PositionsTotal()==0){
      if (signal =="sell1") {
      trade.SellLimit(3.00,Open5,NULL,SL,TP,ORDER_TIME_GTC,0,0);}
      if (signal =="sell2") {
      trade.SellLimit(3.00,Open4,NULL,SL,TP,ORDER_TIME_GTC,0,0);}
       // buy 10 Microlot 
      if (signal =="buy1"){ 
      trade.BuyLimit(3.00,Open5,NULL,SL,TP,ORDER_TIME_GTC,0,0);}
      if (signal =="buy2"){ 
      trade.BuyLimit(3.00,Open4,NULL,SL,TP,ORDER_TIME_GTC,0,0);}
// 
}

Comment ("The current signal is: ",signal); } 
 
tolotra25:

Hello, I have a problem with my source code

The EA should place a limit order once it finds a good entry even if there is still an open limit order

However, it does not work like that, please help me to fix it(if I remove the OrderTolatl()==0, it works but it places many orders)

Thanks in advance

please help me
 
tolotra25: (if I remove the OrderTolatl()==0, it works but it places many orders)

You are looking at a signal. Act on a change of signal.
          Too many orders - MQL4 programming forum #1 (2017)
          MQL4 (in Strategy Tester) - double testing of entry conditions - MQL4 programming forum #1 (2017)

 
William Roeder #:

You are looking at a signal. Act on a change of signal.
          Too many orders - MQL4 programming forum #1 (2017)
          MQL4 (in Strategy Tester) - double testing of entry conditions - MQL4 programming forum #1 (2017)

thanks, I will check it