Problema no cancelamento de ordem

 

Prezados, boa tarde.

Tenho um robô que, em algumas situações, eu o programei para fazer o cancelamento de uma ordem, neste caso uso a função OrderSend().

Notei que existem duas situações distintas (veja abaixo as mensagens do log do MT5):

1. failed cancel order #878709660 buy 0  at market [Invalid request] > neste caso, noto que a resposta é imediata e na linha ANTERIOR o log do MT5 já registra e execução desta ordem (deal).

2. failed cancel order #874911405 buy 0  at market [Request timeout] (Cancel received. Sending to OMS) > neste caso, o robô fica parado por uns 3 minutos e recebe a mensagem de TIME OUT. Noto que na linha POSTERIOR do log do MT5 ele registra a execução da ordem (deal)

Importante: mesmo no primeiro caso que ele mostra que a ordem já foi executada antes no logo do MT5, o meu robô ainda não recebeu a mensagem de execução no OnTradeTransaction() ou ainda não executou a função OnTimer() aonde eu verifico isso.

Perguntas:

1. É normal o robô ficar PARADO por 3 minutos conforme a situação 2 acima relatada (no TIME OUT)?

2. Existe alguma forma de mitigar isso? (com algum outro comando, quem sabe?)

3. Porque ele faz isso?

Obrigado!

 
André Barbisan:

Prezados, boa tarde.

Tenho um robô que, em algumas situações, eu o programei para fazer o cancelamento de uma ordem, neste caso uso a função OrderSend().

Notei que existem duas situações distintas (veja abaixo as mensagens do log do MT5):

1. failed cancel order #878709660 buy 0  at market [Invalid request] > neste caso, noto que a resposta é imediata e na linha ANTERIOR o log do MT5 já registra e execução desta ordem (deal).

2. failed cancel order #874911405 buy 0  at market [Request timeout] (Cancel received. Sending to OMS) > neste caso, o robô fica parado por uns 3 minutos e recebe a mensagem de TIME OUT. Noto que na linha POSTERIOR do log do MT5 ele registra a execução da ordem (deal)

Importante: mesmo no primeiro caso que ele mostra que a ordem já foi executada antes no logo do MT5, o meu robô ainda não recebeu a mensagem de execução no OnTradeTransaction() ou ainda não executou a função OnTimer() aonde eu verifico isso.

Perguntas:

1. É normal o robô ficar PARADO por 3 minutos conforme a situação 2 acima relatada (no TIME OUT)?

2. Existe alguma forma de mitigar isso? (com algum outro comando, quem sabe?)

3. Porque ele faz isso?

Obrigado!

Até inde eu sei... não "EXISTE BUY 0"...


E depois, vamos ver?

Qual a Corretora???

Gente, vamos fazer uma aposta??

Conta pra nós vai?

:)

 
André Barbisan:

Prezados, boa tarde.

Tenho um robô que, em algumas situações, eu o programei para fazer o cancelamento de uma ordem, neste caso uso a função OrderSend().

Notei que existem duas situações distintas (veja abaixo as mensagens do log do MT5):

1. failed cancel order #878709660 buy 0  at market [Invalid request] > neste caso, noto que a resposta é imediata e na linha ANTERIOR o log do MT5 já registra e execução desta ordem (deal).

2. failed cancel order #874911405 buy 0  at market [Request timeout] (Cancel received. Sending to OMS) > neste caso, o robô fica parado por uns 3 minutos e recebe a mensagem de TIME OUT. Noto que na linha POSTERIOR do log do MT5 ele registra a execução da ordem (deal)

Importante: mesmo no primeiro caso que ele mostra que a ordem já foi executada antes no logo do MT5, o meu robô ainda não recebeu a mensagem de execução no OnTradeTransaction() ou ainda não executou a função OnTimer() aonde eu verifico isso.

Perguntas:

1. É normal o robô ficar PARADO por 3 minutos conforme a situação 2 acima relatada (no TIME OUT)?

2. Existe alguma forma de mitigar isso? (com algum outro comando, quem sabe?)

3. Porque ele faz isso?

Obrigado!

Caro, estou com o mesmo problema, você conseguiu resolver?


Obrigado

 
André Barbisan:

Prezados, boa tarde.

Tenho um robô que, em algumas situações, eu o programei para fazer o cancelamento de uma ordem, neste caso uso a função OrderSend().

Notei que existem duas situações distintas (veja abaixo as mensagens do log do MT5):

1. failed cancel order #878709660 buy 0  at market [Invalid request] > neste caso, noto que a resposta é imediata e na linha ANTERIOR o log do MT5 já registra e execução desta ordem (deal).

2. failed cancel order #874911405 buy 0  at market [Request timeout] (Cancel received. Sending to OMS) > neste caso, o robô fica parado por uns 3 minutos e recebe a mensagem de TIME OUT. Noto que na linha POSTERIOR do log do MT5 ele registra a execução da ordem (deal)

Importante: mesmo no primeiro caso que ele mostra que a ordem já foi executada antes no logo do MT5, o meu robô ainda não recebeu a mensagem de execução no OnTradeTransaction() ou ainda não executou a função OnTimer() aonde eu verifico isso.

Perguntas:

1. É normal o robô ficar PARADO por 3 minutos conforme a situação 2 acima relatada (no TIME OUT)?

2. Existe alguma forma de mitigar isso? (com algum outro comando, quem sabe?)

3. Porque ele faz isso?

Obrigado!

1) Sim, tem uma corretora ai que tu envia o pedido de cancelamento, ela nao ti responde e envia devolta um reject na ordem. Como ela nao ti respondeu, o timeout ocorre.

2) Ao inves de usar sincrono, muda para assincrono. Na classe ctrade tem um async mode que pode estudar para ver se resolve o travamento, o timeout ainda vai ocorrer.

3) Porque eles acham "legal" a configuracao do servidor desse jeito. Se for a corretora que estou pensando nao eh mais possivel modificar uma ordem, eh obrigado a cancela-la e recolocar uma nova tambem. :'(

 
Insira o código de como está fazendo isso, senão QQ comentário aqui é tudo suposição
 

Alguma solução?

Pra quem usa o modo assíncrono de envio de ordem, como trata cada ordem/posição, tendo em vista que não terá o retorno imediato do order id?