Очень странный случай ошибки 4108

 

Вот такой код в тестере оногда выдает ошибку 4108

С чем это может быть связано?

if(OrderSelect(ordz[i].order_ticket,SELECT_BY_TICKET,MODE_TRADES)) {

ot=OrderType();

if(ot>1){

if(!OrderDelete(ordz[i].order_ticket,clrMagenta)){

Print(ordz[i].order_ticket,"--------- Ordertype ",ot);

}

}

}

 

Когда используется выбор по тикету в функции OrderSelect(), то значение третьего параметра игнорируется. В итоге ордер с заданным тикетом может находиться не в списке рабочих ордеров, а в истории счета. Поэтому при таком подходе к выбору ордера нужно дополнительно проверять, в каком списке находится ордер:

if (OrderSelect(ordz[i].order_ticket,SELECT_BY_TICKET))
{
   if (OrderCloseTime() == 0)
   {
       // Ордер выбран в списке рабочих ордеров, с ним возможны торговые операции
   }
   else
   {
       // ордер в истории счета, торговые операции невозможны, ордеру уже ничто не поможет )))
   }
}