Erro em Cancelamento de Ordens

 

Meu EA fica acusando algum erro que aparentemente não existe.

Eu faço o envio da ordem de cancelamento através do "OrderSendAssync" ou "OrderSend", o MT5 aceita a solicitação, depois ele apresenta mensagem de erro "failed cancel order #18362984 buy limit 5 WINM21 at 122035 sl: 122010 tp: 122185 [Done]" e depois a ordem é de fato cancelada "cancel #18362984 buy limit 5 WINM21 at market done in 53.014 ms".

Até então isso não me incomodava pois o objetivo final (cancelar a ordem) era atingido e só ficava aparecendo o erro lá no diário. mas ao tentar utilizar o VPS as ordens não estavam sendo canceladas.


Alguém sabe informar o motivo de dar falha no cancelamento e logo em seguida receber mensagem que o cancelamento foi executado?


Vejam abaixo o diário.

2021.05.17 11:39:58.794 Trades  cancel order #18364673 buy limit 5 WINM21 at 122025 sl: 122000 tp: 122175
2021.05.17 11:39:58.879 Trades  accepted cancel order #18364673 buy limit 5 WINM21 at 122025 sl: 122000 tp: 122175
2021.05.17 11:39:58.880 Trades  failed cancel order #18364673 buy limit 5 WINM21 at 122025 sl: 122000 tp: 122175 [Done]
2021.05.17 11:39:58.882 Trades  cancel #18364673 buy limit 5 WINM21 at market done in 88.618 ms
2021.05.17 11:39:58.883 Trades  cancel order #18364672 sell limit 5 WINM21 at 122810 sl: 122835 tp: 122660
2021.05.17 11:39:58.970 Trades  accepted cancel order #18364672 sell limit 5 WINM21 at 122810 sl: 122835 tp: 122660
2021.05.17 11:39:58.972 Trades  failed cancel order #18364672 sell limit 5 WINM21 at 122810 sl: 122835 tp: 122660 [Done]
2021.05.17 11:39:58.974 Trades  cancel #18364672 sell limit 5 WINM21 at market done in 91.636 ms
2021.05.17 11:39:58.974 Trades  sell limit 5 WINM21 at 122815 sl: 122840 tp: 122665
2021.05.17 11:39:59.041 Trades  accepted sell limit 5 WINM21 at 122815 sl: 122840 tp: 122665
2021.05.17 11:39:59.041 Trades  sell limit 5 WINM21 at 122815 sl: 122840 tp: 122665 placed for execution
2021.05.17 11:39:59.041 Trades  order #18364787 sell limit 5 / 5 WINM21 at 122815 done in 67.276 ms
2021.05.17 11:39:59.042 Trades  buy limit 5 WINM21 at 122025 sl: 122000 tp: 122175
2021.05.17 11:39:59.106 Trades  accepted buy limit 5 WINM21 at 122025 sl: 122000 tp: 122175
2021.05.17 11:39:59.106 Trades  buy limit 5 WINM21 at 122025 sl: 122000 tp: 122175 placed for execution
2021.05.17 11:39:59.109 Trades  order #18364792 buy limit 5 / 5 WINM21 at 122025 done in 68.031 ms
 
Vinicius de Oliveira:

Parece alguma mensagem enviada indevidamente pelo próprio EA. Poste, pelo menos, a parte do código refere a exclusão de ordens.

void DeletarOrdens(ulong magicN)
   {
   MqlTradeRequest request = {0};
   MqlTradeResult result = {0};
   for(int i = OrdersTotal()-1;i>=0;i--)
      {
      ulong ticket = OrderGetTicket(i);
      ulong magic = OrderGetInteger(ORDER_MAGIC);
      string symbol = OrderGetString(ORDER_SYMBOL);
      if(magic == magicN && symbol == _Symbol)
         {
         ZeroMemory(request);
         ZeroMemory(result);
         request.action = TRADE_ACTION_REMOVE;
         request.order = ticket;
         if(!OrderSendAsync(request, result))
            {
            Print("OrderSend error: ",GetLastError());
            }        
         }
      }
   }  
 
Lucas Braga Santos:

Olá Lucas,


faltou somente ler a ordem,  OrderSelect(Ticket) logo após OrderGetTicket(i).

 
Rogerio Giannetti Torres:

Olá Lucas,


faltou somente ler a ordem,  OrderSelect(Ticket) logo após OrderGetTicket(i).

Rogério, boa tarde.

Fiz a alteração conforme informado mas continua ocorrendo o erro, veja abaixo:

void DeletarOrdens(ulong magicN)
   {
   MqlTradeRequest request = {0};
   MqlTradeResult result = {0};
   for(int i = OrdersTotal()-1;i>=0;i--)
      {
      ulong ticket = OrderGetTicket(i);
      OrderSelect(ticket);
      ulong magic = OrderGetInteger(ORDER_MAGIC);
      string symbol = OrderGetString(ORDER_SYMBOL);
      if(magic == magicN && symbol == _Symbol)
         {
         ZeroMemory(request);
         ZeroMemory(result);
         request.action = TRADE_ACTION_REMOVE;
         request.order = ticket;
         if(!OrderSendAsync(request, result))
            {
            Print("OrderSend error: ",GetLastError());
            }        
         }
      }
   }  
2021.05.17 13:33:59.009 Trades  '': cancel order #18373556 buy limit 5 WINM21 at 121845 sl: 121820 tp: 121995
2021.05.17 13:33:59.009 Trades  '': cancel order #18373555 sell limit 5 WINM21 at 122445 sl: 122470 tp: 122295
2021.05.17 13:33:59.009 Trades  '': sell limit 5 WINM21 at 122445 sl: 122470 tp: 122295
2021.05.17 13:33:59.058 Trades  '': accepted cancel order #18373556 buy limit 5 WINM21 at 121845 sl: 121820 tp: 121995
2021.05.17 13:33:59.058 Trades  '': accepted cancel order #18373555 sell limit 5 WINM21 at 122445 sl: 122470 tp: 122295
2021.05.17 13:33:59.059 Trades  '': accepted sell limit 5 WINM21 at 122445 sl: 122470 tp: 122295
2021.05.17 13:33:59.059 Trades  '': failed cancel order #18373556 buy limit 5 WINM21 at 121845 sl: 121820 tp: 121995 [Done]
2021.05.17 13:33:59.061 Trades  '': failed cancel order #18373555 sell limit 5 WINM21 at 122445 sl: 122470 tp: 122295 [Done]
2021.05.17 13:33:59.062 Trades  '': cancel #18373556 buy limit 5 WINM21 at market done in 52.965 ms
2021.05.17 13:33:59.062 Trades  '': sell limit 5 WINM21 at 122445 sl: 122470 tp: 122295 placed for execution
2021.05.17 13:33:59.064 Trades  '': cancel #18373555 sell limit 5 WINM21 at market done in 54.741 ms
2021.05.17 13:33:59.064 Trades  '': order #18373578 sell limit 5 / 5 WINM21 at 122445 done in 55.299 ms
2021.05.17 13:33:59.065 Trades  '': buy limit 5 WINM21 at 121835 sl: 121810 tp: 121985
2021.05.17 13:33:59.113 Trades  '': accepted buy limit 5 WINM21 at 121835 sl: 121810 tp: 121985
2021.05.17 13:33:59.114 Trades  '': buy limit 5 WINM21 at 121835 sl: 121810 tp: 121985 placed for execution
2021.05.17 13:33:59.116 Trades  '': order #18373579 buy limit 5 / 5 WINM21 at 121835 done in 51.312 ms
 
Lucas Braga Santos:

Rogério, boa tarde.

Fiz a alteração conforme informado mas continua ocorrendo o erro, veja abaixo:

2021.05.17 13:33:59.059 Trades  '': failed cancel order #18373556 buy limit 5 WINM21 at 121845 sl: 121820 tp: 121995 [Done]
2021.05.17 13:33:59.061 Trades  '': failed cancel order #18373555 sell limit 5 WINM21 at 122445 sl: 122470 tp: 122295 [Done]


Erro bem estranho, qual o código de erro aparece na aba EXPERTS, isso é se aparece pois deu [done] !!!

Eu verifico também o status da ordem, não trabalho com modo ASSYNC e testo a exclusão antes de prosseguir,


bool ToDoCloseOrders()
  {
   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(OrderSelect(OrderGetTicket(i)))
         if(OrderGetString(ORDER_SYMBOL) == _Symbol
            && OrderGetInteger(ORDER_MAGIC) == inpMagicNumber
            && OrderGetInteger(ORDER_STATE) == ORDER_STATE_PLACED
            && OrderGetInteger(ORDER_TYPE) > 1)
           {
            Ticket = OrderGetTicket(i);
            cTrade.OrderDelete(Ticket);
            while(OrderSelect(Ticket))
               Sleep(5);
            if(cTrade.ResultRetcode() != 10009)
              {
               Print("Erro no delete: ", cTrade.ResultRetcode());
              }
           }
     }
   flagOrderOn = false;
   return(true);
  }
 
Rogerio Giannetti Torres:


Erro bem estranho, qual o código de erro aparece na aba EXPERTS, isso é se aparece pois deu [done] !!!

Eu verifico também o status da ordem, não trabalho com modo ASSYNC e testo a exclusão antes de prosseguir,


Pois é. Muito estranho.
Na aba experts não aparece nenhum erro!!!