Отличие реала от тестера (какие проверки добавлять). - страница 2

 
skinet21:
Подскажите, пожалуйста, как написать при закрытии ордера, чтобы если пришел сигнал на закрытие, то ордер закрывался до тех пор пока не закроится, даже если условие на закрытие уже не выполняется. вот код условия закрытия ордера for(int i=0;i =Ask){ OrderClose(OrderTicket(),OrderLots(),Ask,proskalse,White); } } } } } странно часть кода обрезали.


В самом внешнем цикле закрытия ордеров укажите условие - пока есть рыночные ордера, т.е. пока их количество не равно нулю, то дальше уже в цикле по живым ордерам производите их закрытие, а вообще гляньте - хотя бы ради прикола учебник, например здесь - функция CloseAll() и отобразите у себя по аналогии, если у Вас не ведутся массивы с характеристиками ордеров, просто выбираете ордера и вперед...

Примечание. В цикле For... ордера необходимо выбирать от последнего к первому при их закрытии.

Например, так

//+------------------------------------------------------------------+
//| Закрытие всех позиций                                            |
//+------------------------------------------------------------------+

void CloseAllOrders(int magic)
{
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (OrderSelect(orderIndex, SELECT_BY_POS))
      {
         if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == magic))
         {
            if ((OrderType() != OP_BUY) && (OrderType() != OP_SELL))
            {
               OrderDelete(OrderTicket());
            }
            else
            {
               ClosePosBySelect();
            }
         }
      }
   }
}
 

Вот так, пойдет?

Файлы:
mrexccr.rar  7 kb
 
skinet21:

Вот так, пойдет?

Не надо изобретать велосипед. Используйте функции KimIV :

https://forum.mql4.com/ru/38949
Причина обращения: