Strange problem with EA getting indicator data

 

Hello everyone!

I'm writing an EA now for MT4, and here's a very strange bug i found.

Here are lines of code it has (not exact, but you get the idea); 

 

while (condition) 

{Comment("Macd1:", iMACD(Pair_0,PERIOD_H1,1,25,1,PRICE_CLOSE,MODE_MAIN,0), "Macd2:", iMACD(Pair_1,PERIOD_H1,1,25,1,PRICE_CLOSE,MODE_MAIN,0) );}

 

Here's what happens:

1) When I put my EA on window with graph of Pair0 it shows both MACD values of Pair0 and Pair1, time passes, MACD of Pair1 shows right, but MACD of Pair0 freezes, it shows only the first value.

2) When I put my EA on window with graph of Pair1 it shows both MACD values of Pair0 and Pair1, time passes, MACD of Pair0 shows right, but MACD of Pair1 freezes, it shows only the first value. 

3) When I put my EA on window with graph of Pair3 it shows both MACD values of Pair0 and Pair1, time passes, everything is OK and values are up to date.

 

I use MT4 build 445.

 

Any ideas?

PS Sorry for my broken English. 

 

Here's the EA, put it on EURUSD, GBPUSD and any other pair. let it run for a while and youwill see the bug!

Files:
smallea_1.mq4  2 kb
 
alkravi:

Here's the EA, put it on EURUSD, GBPUSD and any other pair. let it run for a while and youwill see the bug!

You should add a sleep to your loop or it runs at max speed the CPU will allow and may freeze up your Terminal.  It seems to update OK for the same symbol but different timeframe,  for example, EURUSD M15
 

I added Sleep right after uploading and uploaded again, it was a mistake. Please try again if you didn't add sleep yourself.

Here's what I need - two opened windows - GBPUSD and EURUSD on H1 and this EA running on one of them (it's not the whole code ofcourse). Can you confirm the bug?

 
alkravi:

 Can you confirm the bug?

Yes.  Unless we are both doing something silly . . .  ;-)  I always reserve the right to have done something silly.

Your code with my small modifications . . .  

extern string  Pair_0         = "EURUSD";
extern string  Pair_1         = "GBPUSD";

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
   while (1==1) 
      {
      Comment(Pair_0, " Macd1: ", DoubleToStr(iMACD(Pair_0,PERIOD_H1,1,25,1,PRICE_CLOSE,MODE_MAIN,0), 5), " ", Pair_1, " Macd2: ",
         DoubleToStr(iMACD(Pair_1,PERIOD_H1,1,25,1,PRICE_CLOSE,MODE_MAIN,0), 5) ); 

      Sleep(200);
      }
   return(0);
   }
//+------------------------------------------------------------------+
 
Thanks for your help!
 
alkravi:
Thanks for your help!
If you get rid of the loop it works as it should . . . 

It also works with the loop and a longer sleep and the addition of RefreshRates() . . . 
Reason: