MT5 - [EDITADO] Investimentos - Erro ao cancelar/deletar pending orders

 

Todas as vezes que vou deletar uma ordem pendente via algoritmo, me acontece o mesmo erro:


2020.11.03 13:03:18.687 Trades ' xxxxxxxx ': failed cancel order #658037561 buy 0  at market [Request timeout] (Cancel received. Sending to OMS)


Ele deleta sim a ordem ou as ordens que eu preciso, mas a linha acima também é executada fazendo o EA todo travar por exatos 3 minutos. Isso acontece em toda ordem cancelada. Se forem 3 ordens, são 9 minutos de espera. O que geralmente acontece é, por exemplo:


2020.11.03 13:00:18.714 Trades ' xxxxxxxx ': accepted cancel order #658037561 buy limit 100 USIM5 at 6.41 //Eu realmente coloquei na plataforma essa ordem

2020.11.03 13:00:18.714 Trades ' xxxxxxxx ': cancel order #658037561 buy limit 100 USIM5 at 6.41 placed for execution (Cancel received. Sending to OMS) //Ele deleta a ordem
2020.11.03 13:03:18.687 Trades ' xxxxxxxx ': failed cancel order #658037561 buy 0  at market [Request timeout] (Cancel received. Sending to OMS) //Isso daqui acontece e faz o EA esperar 3 minutos


A ordem é cancelada, acontece isso daí, espera-se 3 minutos... Se tiver outra ordem, é cancelada e espera-se mais 3 minutos...


Já usei o mesmo código numa conta real na [EDITADO] (eu usava como conta principal) e funciona perfeitamente e não ocorre o erro citado.


O erro acontece tanto nas ordens pendentes que eu coloco manualmente ou é colocado com algoritmos. Eu já enviei o feedback para a Rico, mas não parece ter prioridade. Aqui fica a pergunta: como vocês resolveram esse problema? Porque até onde eu imagino, a mesma infraestrutura também deve ser usada na [EDITADO] e na [EDITADO].


Atualmente eu resolvi, provisoriamente, ou enviando a ordem para um outro ativo e/ou alterando os preços para venda para valores como 999 e compras para valores como 0.01, porque daí acabam vencendo no final do dia sem serem executadas... Pois é, olha a situação. Não tem como deixar o EA travado por 3 minutos para todo e qualquer cancelamento de ordem.



Já tentei usar o código:

#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Numero de ordens atuais pendentes 
   int ticket;
   uint     total=OrdersTotal(); 
//--- passar por ordens em um loop 
   for(uint i=0;i<total;i++) 
     { 
      //--- voltar ticket ordem por sua posição na lista 
      if((ticket=OrderGetTicket(i))>0) 
        { 
        //Fechar ordem
         CTrade *trade=new CTrade();
         trade.OrderDelete(ticket);
         delete trade;
        } 
     } 
   }  


E também já usei outro tipo de instrução (usando OrderSend()). Usando o loop do script acima.

            MqlTradeResult result={0};
            MqlTradeRequest request={0};
            request.order=ticket;
            request.action=TRADE_ACTION_REMOVE;

            OrderSend(request,result);
            //--- write the server reply to log

            Print(__FUNCTION__,": ",result.comment," reply code ",result.retcode);
            ZeroMemory(request);
            ZeroMemory(result);


Obrigado!

Porque a Hospedagem Virtual no MetaTrader 4 e no MetaTrader 5 são Melhores que os VPS Usuais
Porque a Hospedagem Virtual no MetaTrader 4 e no MetaTrader 5 são Melhores que os VPS Usuais
  • www.mql5.com
Alugar um servidor virtual diretamente dos terminais MetaTrader 4 e MetaTrader 5 é a melhor maneira de garantir um trabalho ininterrupto de seus robôs de negociação e das assinaturas de Sinais. Essencialmente, ele é análogo a um VPS, no entanto, ele é melhor e mais adequado para atender às necessidades e desafios que um trader se depara. O...
 

Estou com o mesmo problema na corretora Rico, conta real ... o EA gera muitas ordens pendentes e ao Cancelar, o script congela em modo debugging e demora 3 minutos em cancelar uma ordem.

Consegui deletar pelo homebroker, mas o MT5 nao reconhece esses cancelamentos e ficam como ordens fantasmas. Tive que solicitar  ao area de suporte limpar o MT5.


GKin, voce conseguiu algum outro jeito de cancelar as ordens via algoritmo  ?

 

Boa tarde.

Estou com o mesmo problema e publiquei no Fórum também.

Conseguiu algo?

 
Por enquanto, apenas por não encontrar uma solução melhor, substituí o delete por modificação da ordem para um preço distante.
 

Uma coisa que vi na corretora Rico foi que eu tinha N ordens de compra pendente e quando uma era pra ser executada sempre falhava pelo limite de risco. Aparentemente, as ordens pendentes mesmo que nao executadas estao reservando o dinheiro na conta como se fosse uma garantia. Dai quando era pra executar nao tinha dinheiro.

Minha teoria para esses deletes seria que o sistema de risco ta pensando que o delete puxaria mais garantia (enquanto que nao seria o caso). Mesmo nesse caso ai, nao seria correto um comportamento de timeout, seria sim uma rejeicao.

 
Boa noite, alguém conseguiu resolver este problema?
 

Fujam da Clear, Rico, Xp...

Não entendo como as pessoas sequer fazem a mínima lição de casa que é pesquisar sobre DMA... Acham que a vida do trader é LINDA... Sem percalços... Tudo cor-de-rosa...

 
Flavio Jarabeck:

Fujam da Clear, Rico, Xp...

Não entendo como as pessoas sequer fazem a mínima lição de casa que é pesquisar sobre DMA... Acham que a vida do trader é LINDA... Sem percalços... Tudo cor-de-rosa...

Concordo, mas tem muito mais que DMA envolvido, as vezes uma corretora que diz ser DMA 4 pode ter um resultado pior que DMA 2...
 

Mesmo problema na Rico.

 
Exatamente o mesmo problema!! Alguém conseguiu solucionar ?
 
Hugo Gava #:
Exatamente o mesmo problema!! Alguém conseguiu solucionar ?
Ja pensaram em mudar os envios das ordens pra onTimer ao inves do onTick, pra ver se melhora?