Удаление отложек. MQL4 - страница 2

 
artmedia70:
Проверяете есть ли рыночная позиция либо Buy, либо Sell с нужным магиком и символом графика. Если есть, ищете в цикле все отложенные ордера с нужным магиком и символом, и, если нашли, удаляете. Цикл должен быть обратным от OrdersTotal()-1 до >=0

В общем вот такой код и не работает почему-то

int pos;
   for(pos=OrdersTotal()-1; pos>=0; pos--)
     {
      // выделим текущий ордер, чтобы получить о нем информацию
      if (OrderSelect(pos, SELECT_BY_POS))
        {
         // Если "магическое" число совпадает и это открытая позиция 
         if ((OrderMagicNumber()==magic) && OrderSymbol()==Symbol() && ((OrderType()==OP_SELL) || (OrderType()==OP_BUY)))
          {
           // найти второй отложенный ордер
           int i;
           for(i=OrdersTotal()-1; i>=0; i--)
            {
              if (OrderSelect(i, SELECT_BY_POS))
               {
                if ((OrderMagicNumber()==magic) && OrderSymbol()==Symbol() && ((OrderType()==OP_SELLSTOP) || (OrderType()==OP_BUYSTOP)))
                 {
                   // ордер найден - удалим его
                   if (OrderDelete(OrderTicket()))
                    {
                     Print("Ордер удален");
                    }
                   else
                    {
                     Print("Ошибка ", GetLastError(), " при удалении ордера");
                    }
                 }
               }
            }
           // выйти из цикла
           break;
          } 
        } 
     }
 }
 
Dynamiteman:

В общем вот такой код и не работает почему-то

На коленке накидал простейший цикл:

for(int i=OrdersTotal()-1; i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS)) {
      if(OrderMagicNumber()!=magic) continue;
      if(OrderSymbol()!=Symbol())   continue;
      if(OrderType()>1 && OrderType()<6) OrderDelete(OrderTicket());
      }
   }
 
artmedia70:

На коленке накидал простейший цикл:

Спасибо в итоге заработало, в чем отличие правда было не знаю, но заработало, спасибо

   for(int i=OrdersTotal()-1; i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS)) {
      if(OrderMagicNumber()!=magic) continue;
      if(OrderSymbol()!=Symbol())   continue;
      if(OrderType()<=1) 
         {
         for(int i=OrdersTotal()-1; i>=0; i--) {
         if(OrderSelect(i,SELECT_BY_POS)) {
            if(OrderMagicNumber()!=magic) continue;
            if(OrderSymbol()!=Symbol())   continue;
            if(OrderType()>1 && OrderType()<6) OrderDelete(OrderTicket());
            }
            }
            }
      }
   }
 
Dynamiteman:

Спасибо в итоге заработало, в чем отличие правда было не знаю, но заработало, спасибо

После удаления ордеров внешний цикл бы прервать - зачем дальше гонять цикл, если все отложки во внутреннем уже удалены?
 
artmedia70:
Скоро все тут будут. Нужно как-то администрации подумать об избежании такой путаницы.
Да хотя бы сделать чекбокс для выбора темы заданного вопроса, чтобы автоматически подставлялся префикс MQL4/MQL5 к теме, или к сообщению.

Предлагал такое пару месяцев назад в СД. Сказали:

Пока нет таких планов, но будем иметь ввиду 

 
Tapochun:

Предлагал такое пару месяцев назад в СД. Сказали:

Ну что ж, хорошо. Лет через надцать увидим, наверное...
Причина обращения: