Executar função quando algum erro crítico acontecer antes de remover o expert

 

Fala pessoal!

Tenho um expert e já me deparei algumas vezes com algum erro de array crítico que remove o robô da tela, mas mantém a posição aberta e ordens penduradas.

É possível eu identificar quando um erro crítico desse que remove o robô ocorre, e antes do robô ser removido, eu executar as funções de fechamento de posição?

Obrigado!
João

 
joaosavioli: Tenho um expert e já me deparei algumas vezes com algum erro de array crítico que remove o robô da tela, mas mantém a posição aberta e ordens penduradas. É possível eu identificar quando um erro crítico desse que remove o robô ocorre, e antes do robô ser removido, eu executar as funções de fechamento de posição?

Será mais correcto e mais fácil corrigir o problema no código MQL em vez de tentar impedir o EA de terminar após uma falha crítica.

Mas se não tem o código fonte, então não haverá outra solução para o problema, se não contactar o autor e solicitar a correcção.

 

Olá Fernando, obrigado por responder.

Eu tenho acesso ao código-fonte pois sou eu que desenvolvo o código.

Esse último erro especificamente eu corrigi. Eu me refiro mesmo a executar alguma função para zerar a posição caso o robô seja removido por erro, por questões de segurança mesmo, mas se não existe como fazer então não dá certo.

Eu pensei em colocar isso por que dessa última vez que aconteceu as ordens ficaram penduradas na tela e a posição aberta sem controle.

Tentei colocar algo no OnDeinit( não não executa quando expert é removido por erro.

João

 
joaosavioli #: Olá Fernando, obrigado por responder. Eu tenho acesso ao código-fonte pois sou eu que desenvolvo o código. Esse último erro especificamente eu corrigi. Eu me refiro mesmo a executar alguma função para zerar a posição caso o robô seja removido por erro, por questões de segurança mesmo, mas se não existe como fazer então não dá certo. Eu pensei em colocar isso por que dessa última vez que aconteceu as ordens ficaram penduradas na tela e a posição aberta sem controle. Tentei colocar algo no OnDeinit( não não executa quando expert é removido por erro.

João

Pode sim executar isso no OnDeinit() mas terá de conseguir fechar todas as posições em aberto em menos de 2 segundos, pois esse é o tempo limite antes que o EA seja terminado à força pela aplicação.

Pode usar operações assíncronas para ser mais rápido, e assim mesmo que não consiga fechar dentro dos 2 segundos de limite, continuarão pendentes mesmo depois de ser terminado o EA. As operações assíncronas não são garantidas mas são mais rápidas.
 
joaosavioli #: ... não executa quando expert é removido por erro. 

O que considera removido por erro?

 
Fernando Carreiro #:

O que considera removido por erro?

Eu ja tentei por pedido colocar codigo pra fechar posição no OnDeInit, me parece que antes dele ser chamado é desautorizado o algo trading. Então acredito que não tenha como fazer isso via OnDeInit, mas poderia ter um outro robo que monitora se todos os graficos abertos tem EA e na falta de EA naquele grafico ativo encerrar a posição.
 
Ricardo Rodrigues Lucca #:
Eu ja tentei por pedido colocar codigo pra fechar posição no OnDeInit, me parece que antes dele ser chamado é desautorizado o algo trading. Então acredito que não tenha como fazer isso via OnDeInit, mas poderia ter um outro robo que monitora se todos os graficos abertos tem EA e na falta de EA naquele grafico ativo encerrar a posição.

Infelizmente não respondeu a minha pergunta ... O que considera removido por erro?

Considera "por erro" quando o operador remove o EA ou refere-se quando occore um erro crítico?

No caso dum error crítico, obviamente o OnDeinit não irá ser executado. É um erro crítico tal como o nome diz.

No caso de ser o operador a remover o EA então o OnDeinit irá ser executado mas com algumas restrições e tempo de limit.

Atenção que no OnDeinit poderá ter que usar funções MQL puras e não através de "classes" como CTrade porque esses poderão já estar em fase de eliminação.

Razão: