MQL5. Падает по ошибке ClosePosition

 

Всем привет!

Использую одновременно 12 реверсивных стратегий. И иногда закрытие позиции не проходит. Текст ошибки в соответствии с тем, как я вывожу принт:

mql5 positionclose() failed. return code=0. code description: unknown

Код открытия позиций:

ulong OrderBuy(int expert_magic, string comment)
  {
//--- объявление и инициализация запроса и результата
   MqlTradeRequest request= {};
   MqlTradeResult  result= {};
//--- параметры запроса
   request.action   = TRADE_ACTION_DEAL;                     // тип торговой операции
   request.symbol   = Symbol();                              // символ
   request.volume   = 0.1;                                   // объем в 0.1 лот
   request.type     = ORDER_TYPE_BUY;                        // тип ордера
   request.type_filling = ORDER_FILLING_IOC;
   request.magic    = expert_magic;
   request.comment = comment;
//--- отправка запроса
   if(!OrderSend(request,result))
      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
//--- информация об операции
   PrintFormat("buy retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

   return result.order;
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ulong OrderSell(int expert_magic, string comment)
  {
//--- объявление и инициализация запроса и результата
   MqlTradeRequest request= {};
   MqlTradeResult  result= {};
//--- параметры запроса
   request.action   = TRADE_ACTION_DEAL;                     // тип торговой операции
   request.symbol   = Symbol();                              // символ
   request.volume   = 0.1;                                   // объем в 0.1 лот
   request.type     = ORDER_TYPE_SELL;                        // тип ордера
   request.type_filling = ORDER_FILLING_IOC;
   request.magic    = expert_magic;
   request.comment = comment;
//--- отправка запроса
   if(!OrderSend(request,result))
      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
//--- информация об операции
   PrintFormat("sell retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);

   return result.order;
  }

Код c PositionClose:

void Close_trade(ulong ticket)
  {
   CTrade trade;

   if(!trade.PositionClose(PositionGetTicket(uint(ticket))))
     {
      Print(PositionGetSymbol(uint(ticket)), "PositionClose() failed. Return code=", trade.ResultRetcode(), ". Code description: ", trade.ResultRetcodeDescription(), "Ticket is", ticket);
      Close_trade(ticket);
     }
   else
     {
      Print(PositionGetSymbol(uint(ticket)), "PositionClose() successful. Return code=", trade.ResultRetcode(), " (", trade.ResultRetcodeDescription(), ")");
     }
  }
Я проверял и выводил номер тикета позиции. Это реальные открытые позиции тикетов, которые закрываются вручную в терминале
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
if(!trade.PositionClose(PositionGetTicket(uint(ticket))))

Очень странная конструкция, что хранится в переменной ticket у вас?

 
Maksim Emeliashin #:

Очень странная конструкция, что хранится в переменной ticket у вас?

В ticket передается собственно значение колонки Ticket во вкладке Trade в Metatrader
 
scolfield #:
В ticket передается собственно значение колонки Ticket во вкладке Trade в Metatrader

В таком случае, зачем вызов

PositionGetTicket(uint(ticket))

Мне кажется, вам стоит почитать справку и статьи о том, как работает внутренняя кухня позиций, ордеров и сделок в МТ5.

Причина обращения: