Отложенный ордер не может быть закрыт.
Вообщем для удаления отложеных ордеров используй функцию OrderDelete().
Вообщем для удаления отложеных ордеров используй функцию OrderDelete().
Luptator:
Отложенный ордер не может быть закрыт.
Вообщем для удаления отложеных ордеров используй функцию OrderDelete().
Отложенный ордер не может быть закрыт.
Вообщем для удаления отложеных ордеров используй функцию OrderDelete().
проблема в том, что закрываемый ордер не является отложенным !
перед закрытием есть такая строка
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
Какой тип ордера? buy_limit, buy stop, sell limit, sell stop?
Коды ошибок: https://docs.mql4.com/ru/constants/errors
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);
}
}
{
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++) не одно и тоже?
что for(int i=OrdersTotal()-1;i>=0;i--) и for(int i=0;i<OrdersTotal();i++) не одно и тоже?
В общем случае, ДА. Потому и получили эту ошибку -
ERR_INVALID_TICKET | 4108 | Неверный номер тикета |
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите
при тестировании советника
не отрабатывает строка OrderClose(OrderTicket(),OrderLots(),Ask,5,Green)
в журнале сообщение pending order # cannot be closed
функция GetLastError() возвращает код 4108
что это за ошибка и как с ней бороться?