Please Help me why this ea doesnt continue when i backtested

 

THIS IS THE CODE:



input int magic = 222;


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

//| Expert tick function                                             |

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

void OnTick()

  {

    if(!IsNewBar()) return;

      {

         double upper = iBands(_Symbol,_Period,20,2,0,PRICE_CLOSE,MODE_UPPER,1);

         double lower = iBands(_Symbol,_Period,20,2,0,PRICE_CLOSE,MODE_LOWER,1);

         

         double close = iClose(_Symbol,_Period ,1);

         

         if(close>upper)

           {

               if(OrdersTotal()>0)

                {

                 closeall(OP_BUY);

                }   

            OrderSend(_Symbol,OP_SELL, 0.10,Bid,10,0,0,NULL,magic);    

           }

           else if(close<lower)

           {

               if(OrdersTotal()>0)

                {

                 closeall(OP_SELL);

                }   

              OrderSend(_Symbol,OP_BUY, 0.10,Ask,10,0,0,NULL,magic);  

           }

         

      }

  }

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

void closeall(int mode)

   {

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

      {

         OrderSelect(i,SELECT_BY_POS);

         if(OrderMagicNumber()== magic && OrderType()==mode)

           {

              OrderClose(OrderTicket(),OrderLots(),MarketInfo(_Symbol,MODE_BID+OrderType()),10);

           }

      }

   }





bool IsNewBar()

{

   datetime        currentBarTime = iTime(Symbol(),Period(),0);

   static datetime preBarTime = currentBarTime;

    

    if(preBarTime<currentBarTime)

     {

      preBarTime = currentBarTime;

      return(true);

     }

     return(false);

}
 
1. Use the code button to wrap your code so it's easier for us to read

2. Your loop condition in closeall will cause an infinite loop

            
            
            
void closeall(int mode)
   {
     for(int i = OrdersTotal()-1; 1>=0; i--)
      {
         OrderSelect(i,SELECT_BY_POS);
         if(OrderMagicNumber()== magic && OrderType()==mode)
           {
              OrderClose(OrderTicket(),OrderLots(),MarketInfo(_Symbol,MODE_BID+OrderType()),10);
           }
      }
   }

 
Alexander Martinez #:
1. Use the code button to wrap your code so it's easier for us to read

2. Your loop condition in closeall will cause an infinite loop

thank you ...

 
NP, I hope it helped 👍
 
somewhere in the closeall function that cause my ea to stop during backtesting. I noticed it when i deactivated that function. Please help me correct that error in the closeall function.
 

problem solved....  i type for(int i = OrdersTotal()-1; 1>=0; i--) ... the correct one is for(int i = OrdersTotal()-1; i>=0; i--)

  that was i not 1....hehehe.  thank you guys.

 
  1. Please edit your (original) post and use the CODE button (Alt-S)! (For large amounts of code, attach it.)
              General rules and best pratices of the Forum. - General - MQL5 programming forum (2019)
              Messages Editor

  2. OrderClose(OrderTicket(),OrderLots(),MarketInfo(_Symbol,MODE_BID+OrderType()),10);

    You buy at the Ask and sell at the Bid. Pending Buy Stop orders become market orders when hit and open at the Ask.

    1. Your buy order's TP/SL (or Sell Stop's/Sell Limit's entry) are triggered when the Bid / OrderClosePrice reaches it. Using Ask±n, makes your SL shorter and your TP longer, by the spread. Don't you want the specified amount used in either direction?

    2. Your sell order's TP/SL (or Buy Stop's/Buy Limit's entry) will be triggered when the Ask / OrderClosePrice reaches it. To trigger close to a specific Bid price, add the average spread.
                MODE_SPREAD (Paul) - MQL4 programming forum - Page 3 #25

    3. The charts show Bid prices only. Turn on the Ask line to see how big the spread is (Tools → Options (control+O) → charts → Show ask line.)
      Most brokers with variable spreads widen considerably at end of day (5 PM ET) ± 30 minutes. My GBPJPY shows average spread = 26 points, but average maximum spread = 134 (your broker will be similar).

 
ronaldo cabardo:

THIS IS THE CODE:



input int magic = 222;


This is off-topic, but bare with me. I'm curious to know why you used the number 222 for the magic number? 

I ask because I'm inferring this is a number you see frequently? If yes, then I see this number (222) frequently as well and I believe it has a special meaning. Cheers.

Reason: