to dosyć dziwny problem, co prawda takiego jak Twój nigdy nie zauważyłem ale faktem jest że całej platformie daleko do 100% stabilności.
Ja tam nie widzę w kodzie nic co mogłoby powodować jakiś błąd, natomiast mogę Ci podpowiedzieć jak mi się udało wybrnąć z podobnej sytuacji kiedyś. Poprostu dodałem sobie plik z ustawieniami do którego EA zapisywał najważniejsze rzeczy, czy też takie które mogą  powodować problemy, po tym system zaczął pracować stabilnie. Minusem jest to żę rozwiązanie jest dosyć pracochłonne - musisz oprogramować całą obsługę pliku konfiguracyjnego.
EDIT:
chwilkę pomyślałem i przypomniało mi się że miałem kiedyś podobny problem 
sytuacja wyglądała tak: miałem kilka zleceń oczekujących i przy określonych warunkach chciałem je wszystkie pousuwać. Robiłem to w jednej iteracji i okazało się że EA usuwał tylko co drugie zlecenie!!! Np. miałem 6 zleceń typu BUYLIMIT, to EA usunął tylko 3 za pierwszą próbą(co drugie zlecenie), jak mu dołożyłem drugą próbę to usunął 2 z pozostałych trzech i dopiero w trzeciej pętli usunął ostatnie zlecenie. Do tej pory nie wiem czy to ja zrobiłem jakiś błąd czy taka jest charakterystyka mt4 (przy okazji może ktoś mnie oświeci), ale problem obszedłem w ten sposób:
Kod: Zaznacz cały
while (trades>0)
            {
               for(cnt=0;cnt<OrdersTotal();cnt++)
               {
                  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
                  ticket=OrderTicket();
               
                  if (OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()==OP_BUY) OrderClose(ticket,OrderLots(),Bid,3,Red);
                  if (OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()==OP_SELL) OrderClose(ticket,OrderLots(),Ask,3,Green);
               
                  if (OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()==OP_BUYLIMIT) OrderDelete(ticket,CLR_NONE);
                  if (OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()==OP_SELLLIMIT) OrderDelete(ticket,CLR_NONE);
               }
               
               trades=0;
               for(cnt=0;cnt<OrdersTotal();cnt++)
               {
                  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
                  if (OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) trades=trades+1;
               }
nie wiem jak to dokładnie u Ciebie wygląda ale może też ta sytuacja wydarza się jak masz więcej zleceń oczekujących? Jak to nie to, to przepraszam za mylne tropy 
pzodrawiam