Método de segurança no EA quando a ordem saiu com atraso

Guilherme Mendonca
1463

Gostaria de saber a opinião de vocês ou se alguém já tentou alguma solução para tal problema.


Um dos problemas que enfrento com meus EAs na B3, é quando ocorre uma lentidão nas cotações da corretora ou até mesmo falhas na conexão.

Em determinados momentos, um EA com ordens "à mercado", algumas vezes chega a ter delay de mais de 5 segundos entre o envio da ordem (comando enviado do MT5) até a execução da ordem e o retorno confirmando os detalhes da transação para o MT5.

Se tratando do mercado de índice e dólar na B3, 1 segundo de atraso na execução da ordem pode trazer grandes diferenças no resultado do trade.

Uma possível solução que estou pensando em implementar no EA, seria fazer uma comparação entre o horario do envio da ordem e o horario que foi executada.

Caso exista um gap maior que X segundos, o EA finalizaria a operação imediatamente.  

Segue abaixo as partes do código.

O primeiro momento foi um exemplo de uma ordem Buy, a parte do codigo ficaria assim:

datetime sent=0;

if(Trade.Buy(lot,Symbol(),ask,StopLoss,0))
    {
      sent=TimeCurrent();
    } 

Depois disso, em outro momento, dentro da função OnTick(), o EA faria a comparação entre os horários.

datetime pos_time=0;
int DelayedOrder=3;

//--- Fechar a posição se sair atrasada 
if(PositionSelect(Symbol()))     pos_time=(datetime)PositionGetInteger(POSITION_TIME);      if(pos_time>(sent+DelayedOrder))       {        Trade.PositionClose(Symbol());        Print("OrderSent = ",sent);        Print("Pos_Time = ",pos_time);       }              
Ruy Christian Hoffmann
933
Guilherme Mendonca:

Gostaria de saber a opinião de vocês ou se alguém já tentou alguma solução para tal problema.


Um dos problemas que enfrento com meus EAs na B3, é quando ocorre uma lentidão nas cotações da corretora ou até mesmo falhas na conexão.

Em determinados momentos, um EA com ordens "à mercado", algumas vezes chega a ter delay de mais de 5 segundos entre o envio da ordem (comando enviado do MT5) até a execução da ordem e o retorno confirmando os detalhes da transação para o MT5.

Se tratando do mercado de índice e dólar na B3, 1 segundo de atraso na execução da ordem pode trazer grandes diferenças no resultado do trade.

Uma possível solução que estou pensando em implementar no EA, seria fazer uma comparação entre o horario do envio da ordem e o horario que foi executada.

Caso exista um gap maior que X segundos, o EA finalizaria a operação imediatamente.  

Segue abaixo as partes do código.

O primeiro momento foi um exemplo de uma ordem Buy, a parte do codigo ficaria assim:

Depois disso, em outro momento, dentro da função OnTick(), o EA faria a comparação entre os horários.

Olá Guilherme, bom dia,

Eu não li seu código porque não sou bom em códigos, sou preguiçoso para ler códigos.

Mas pelo que entendi você não está tendo problema no seu código e sim quer uma opinião sobre sua solução para seu problema de delay.

Eu achei funcional sim para o que você deseja. Dependendo de como é seu setup realmente esse tempo que demora para processar a ordem pode fazer muita diferença, principalmente nos scalpers curtos.

Outro meio que você reduz um pouco esse atraso é usando uma boa VPS, faz muita diferença no final das contas viu. a VPS não vai solucionar o atraso da Corretora vs B3, mas vai melhorar a velocidade entre você e a Corretora.

Agora entenda que, devido a diferença entre preço de compra e preço de venda, é bem provável que 99% dessas suas saídas imediatas ocorram pequenas perdas... Mas, dependendo do seu setup antes perder pouco do que perder mais né. Interessante é incrementar que antes desse "encerramento imediato" você faça uma check se está positivo ou negativo, pois se tiver positivo não há porque sair antecipadamente.

Parabéns ai pela lógica de análise.

Guilherme Mendonca
1463
Ruy Christian Hoffmann:

Olá Guilherme, bom dia,

Eu não li seu código porque não sou bom em códigos, sou preguiçoso para ler códigos.

Mas pelo que entendi você não está tendo problema no seu código e sim quer uma opinião sobre sua solução para seu problema de delay.

Eu achei funcional sim para o que você deseja. Dependendo de como é seu setup realmente esse tempo que demora para processar a ordem pode fazer muita diferença, principalmente nos scalpers curtos.

Outro meio que você reduz um pouco esse atraso é usando uma boa VPS, faz muita diferença no final das contas viu. a VPS não vai solucionar o atraso da Corretora vs B3, mas vai melhorar a velocidade entre você e a Corretora.

Agora entenda que, devido a diferença entre preço de compra e preço de venda, é bem provável que 99% dessas suas saídas imediatas ocorram pequenas perdas... Mas, dependendo do seu setup antes perder pouco do que perder mais né. Interessante é incrementar que antes desse "encerramento imediato" você faça uma check se está positivo ou negativo, pois se tiver positivo não há porque sair antecipadamente.

Parabéns ai pela lógica de análise.

Obrigado pela resposta Ruy.

Sim, gostaria de uma opinião de alguem que tenha tantado alguma solução parecida ou alguém que tenha uma ideia mais funcional que a minha.

Rogerio Giannetti Torres
3928
Guilherme Mendonca:


Olá bom dia,

a meu ver o que importa não é o delay em segundos mas sim a derrapagem em ticks na execução da ordem.  O tratamento  dessa derrapagem é uma regra de negócio que pode ser:  aceitar o trade, encerrar pois a derrapagem foi maior que a tolerância ou ajustar o SL/TP para o preço de entrada

Guilherme Mendonca
1463
Rogerio Giannetti Torres:

Olá bom dia,

a meu ver o que importa não é o delay em segundos mas sim a derrapagem em ticks na execução da ordem.  O tratamento  dessa derrapagem é uma regra de negócio que pode ser:  aceitar o trade, encerrar pois a derrapagem foi maior que a tolerância ou ajustar o SL/TP para o preço de entrada

Bom dia Rogerio, 


Na verdade não. Vou te dar um exemplo que já aconteceu comigo.

O EA enviou uma ordem de compra a mercado (mas não executou imediatamente) quando o preço do indice estava em 10100 (numero ficticio).

Em 4 segundos, o mercado foi a 10160 e depois retornou a 10100.

Só depois disso (6 segundos depois do envio da ordem), que minha ordem foi executada a 10100 (derrapagem 0).  Após a execução, o mercado caiu e eu tomei StopLoss.

O detalhe que meu EA, depois de andar 40 pontos a favor, ele já alteraria o Stop para meu preço de entrada. Ou seja, em menos de 5 segundos eu entraria no trade e sairia no 0x0 ou ganhando 5 pontos por exemplo.

Como ele executou atrasado, o mercado já tinha feito um movimento e retornado, porém o resultado foi completamente diferente do esperado.

Então minha ideia seria se o EA identificar que houve um atraso entre o envio da ordem e execução, ele fecharia o trade imediatamente (mesmo que eu perca alguns pontos). 

Rogerio Giannetti Torres
3928

Guilherme Mendonca:



Entendo, mas não percebo isso um determinante, isto é que todos ou a maioria dos trades abertos num delay darão loss. Continuo com a percepção que o que importa é o preço executado é o preço que a estratégia determina.


 

Flavio Jarabeck
326118
Guilherme Mendonca:

Gostaria de saber a opinião de vocês ou se alguém já tentou alguma solução para tal problema.


Um dos problemas que enfrento com meus EAs na B3, é quando ocorre uma lentidão nas cotações da corretora ou até mesmo falhas na conexão.

Em determinados momentos, um EA com ordens "à mercado", algumas vezes chega a ter delay de mais de 5 segundos entre o envio da ordem (comando enviado do MT5) até a execução da ordem e o retorno confirmando os detalhes da transação para o MT5.

Se tratando do mercado de índice e dólar na B3, 1 segundo de atraso na execução da ordem pode trazer grandes diferenças no resultado do trade.

Uma possível solução que estou pensando em implementar no EA, seria fazer uma comparação entre o horario do envio da ordem e o horario que foi executada.

Caso exista um gap maior que X segundos, o EA finalizaria a operação imediatamente.  

Segue abaixo as partes do código.

O primeiro momento foi um exemplo de uma ordem Buy, a parte do codigo ficaria assim:

Depois disso, em outro momento, dentro da função OnTick(), o EA faria a comparação entre os horários.

Vamos começar do começo...

Qual a corretora?

Guilherme Mendonca
1463
Flavio Jarabeck:

Vamos começar do começo...

Qual a corretora?

XP. 
Flavio Jarabeck
326118
Guilherme Mendonca:
XP. 

Troque de corretora.

A XP e Clear são irmãs, ou no pior dos casos, primas. Não sei se é o caso e não querendo ser leviano, apenas apontarei fatos. Quando usei esses caras, eram DMA1. Estude sobre isso.

Delay de mais 1 segundo para executar uma ordem, para ROBÔ, É UM ABSURDO DESCOMUNAL.

Você pode até aceitar isso em trades lentos, a favor da tendência, etc... Não sendo Scalping... Alvo longo...

De novo , mude de corretora.

E sinceramente não entendo por quê você está tentando contornar um problema que É, DA CORRETORA!

Guilherme Mendonca
1463
Flavio Jarabeck:

Troque de corretora.

A XP e Clear são irmãs, ou no pior dos casos, primas. Não sei se é o caso e não querendo ser leviano, apenas apontarei fatos. Quando usei esses caras, eram DMA1. Estude sobre isso.

Delay de mais 1 segundo para executar uma ordem, para ROBÔ, É UM ABSURDO DESCOMUNAL.

Você pode até aceitar isso em trades lentos, a favor da tendência, etc... Não sendo Scalping... Alvo longo...

De novo , mude de corretora.

E sinceramente não entendo por quê você está tentando contornar um problema que É, DA CORRETORA!

Obrigado pela resposta. Sim, estou usando a Modal em paralelo tem 40 dias para observar o comportamento. 
Realmente é um problema da corretora, mas qdo eu reclamei eles me devolveram somente o valor da diferença do preço de entrada. Ou seja, o que aconteceu naquele intervalo de alguns segundos que eu fiquei de fora e que seria o suficiente pra eu sair do trade sem perder nada, eles não consideraram.
Enfim, enquanto não temos alguma corretora que leve mais a sério o Metatrader, a solução é tentar minimizar os problemas causados por ela. 


Flavio Jarabeck
326118
Guilherme Mendonca:
Obrigado pela resposta. Sim, estou usando a Modal em paralelo tem 40 dias para observar o comportamento. 
Realmente é um problema da corretora, mas qdo eu reclamei eles me devolveram somente o valor da diferença do preço de entrada. Ou seja, o que aconteceu naquele intervalo de alguns segundos que eu fiquei de fora e que seria o suficiente pra eu sair do trade sem perder nada, eles não consideraram.
Enfim, enquanto não temos alguma corretora que leve mais a sério o Metatrader, a solução é tentar minimizar os problemas causados por ela. 


De novo pesquise sobre a arquitetura DMA e só escolha corretoras que no mínimo tem DMA2...

E grave tudo, conversas de chat, email, e depois cobre!

E, JAMAIS ACREDITE em conversinha de vendedor ou "Representante Comercial", que vai te convencer que DMA1 é "SUPER OK para você".

Depois que você estudar sobre o assunto, você vai descobrir porque DMA1 é uma m* aqui no Brasil...

FUJA!

;)