Ошибка в логике - страница 2

 
input double STEP = 100.10;
void OnTick()
  {
//---
   if(AccountBalance()+STEP<=AccountEquity()) //Если значение текущего эквити больше чем баланс+степ.
    for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderType()==OP_BUYSTOP )  if(OrderDelete(OrderTicket())== false) GetLastError();
         if(OrderType()==OP_SELLSTOP)  if(OrderDelete(OrderTicket())== false) GetLastError();
         if(OrderType()==OP_BUYLIMIT ) if(OrderDelete(OrderTicket())== false) GetLastError();;
         if(OrderType()==OP_SELLLIMIT) if(OrderDelete(OrderTicket())== false) GetLastError();
         
         if(OrderType()==1) if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red) == false) GetLastError();
         if(OrderType()==0) if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red) == false) GetLastError();
        }
     }
  }
 
А что вы написали в коде, честно, я не понял.. Для такой простой задачи там слишком много кода. Зачем-то используете глобальные переменные терминала, и дальше по коду не стал разбираться, там сплошные высокотехнологичные излишества :)
 
не смотрел особо код, но сразу глянул в узкое место всех новичков и здесь увидел аналогичную ошибку - при удалении ордеров перебор надо делать не с 0 до ордерстотал, а наоборот.
 
protr:
Спасибо но в процессе работы баланс растет при том что еквити в данный момент может быть отрицательным
С какого перепугу?  Баланс может быть отрицательным, а вот поиметь отрицательный эквити Колян не позволит.
Причина обращения: