: pending order # cannot be closed

 

Подскажите

при тестировании советника

не отрабатывает строка OrderClose(OrderTicket(),OrderLots(),Ask,5,Green)

в журнале сообщение pending order # cannot be closed

функция GetLastError() возвращает код 4108

что это за ошибка и как с ней бороться?

 
Отложенный ордер не может быть закрыт.
Вообщем для удаления отложеных ордеров используй функцию OrderDelete().
 
Luptator:
Отложенный ордер не может быть закрыт.
Вообщем для удаления отложеных ордеров используй функцию OrderDelete().

проблема в том, что закрываемый ордер не является отложенным !

перед закрытием есть такая строка

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
 
Какой тип ордера? buy_limit, buy stop, sell limit, sell stop?
 
 
ERR_INVALID_TICKET 4108 Неверный номер тикета
 

интиресно, а как он может быть неверным если он вычисляется предыдущей командой ?

for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
if(OrderType() == OP_SELL)
{

if (((OrderOpenPrice()-Bid)/Point) > 70)
{
if (!OrderClose(OrderTicket(), OrderLots(), Bid, 5,Red))
Print("SELL ERROR ", GetLastError());
loss = 0;
return(0);
}
if (((Bid-OrderOpenPrice())/Point) > 70)
{
Print("bid ", Bid," Openprice", OrderOpenPrice());
if (!OrderClose(OrderTicket(), OrderLots(), Bid, 5,Red))
Print("SELL ERROR ", GetLastError());
loss++;
return(0);
}

}

 
for(int i=OrdersTotal()-1;i>=0;i++)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol()) continue;
if(OrderType() == OP_SELL)
{

if (((OrderOpenPrice()-Bid)/Point) > 70)
{
if (!OrderClose(OrderTicket(), OrderLots(), Ask,5,Red))
Print("SELL ERROR ", GetLastError());
loss = 0;
return(0);
}
if (((Bid-OrderOpenPrice())/Point) > 70)
{
Print("bid ", Bid," Openprice", OrderOpenPrice());
if (!OrderClose(OrderTicket(), OrderLots(), Ask,5,Red))
Print("SELL ERROR ", GetLastError());
loss++;
return(0);
}

}
 
закрывающей скобки } не хватает
 
Rosh, вы хотите сказать

что for(int i=OrdersTotal()-1;i>=0;i--) и for(int i=0;i<OrdersTotal();i++) не одно и тоже?
 
 
В общем случае, ДА. Потому и получили эту ошибку -
ERR_INVALID_TICKET 4108 Неверный номер тикета
Причина обращения: