OnDeinit e OnInit Na Troca de Timeframe

 

(Parêntesis de agradecimento, se estiver sem tempo, pule para o parágrafo seguinte)

Oi amigos! Primeiramente gostaria de agradecer a toda a ajuda que recebi aqui no fórum, acabei de concluir meu primeiro EA. Falta agora testar mais um pouco, consertar possíveis bugs, mas já posso começar a utilizar. Foram milhares de linha de código e muito do que utilizei nele aprendi por aqui com as contribuições dos colegas.

Notei que os cálculos ficam bagunçados no meu EA se eu troco de timeframe. Existiria a possibilidade de chamar OnDeinit e posteriormente OnInit quando o usuário trocar de Timeframe? Assim daria um "refresh" em todos os cálculos e seria a mesma coisa que retirar o EA, trocar o timeframe e colocá-lo novamente.

Obrigado pela atenção, um abraço!

 
israeltandrade:

(Parêntesis de agradecimento, se estiver sem tempo, pule para o parágrafo seguinte)

Oi amigos! Primeiramente gostaria de agradecer a toda a ajuda que recebi aqui no fórum, acabei de concluir meu primeiro EA. Falta agora testar mais um pouco, consertar possíveis bugs, mas já posso começar a utilizar. Foram milhares de linha de código e muito do que utilizei nele aprendi por aqui com as contribuições dos colegas.

Notei que os cálculos ficam bagunçados no meu EA se eu troco de timeframe. Existiria a possibilidade de chamar OnDeinit e posteriormente OnInit quando o usuário trocar de Timeframe? Assim daria um "refresh" em todos os cálculos e seria a mesma coisa que retirar o EA, trocar o timeframe e colocá-lo novamente.

Obrigado pela atenção, um abraço!

Não. Entrará em loop infinito.

O MQL5 apesar de ser derivado do C++ é uma versão bem castrada, com vários buracos.

Você terá que estruturar muito bem seu OnInit() para que você minimize esses efeitos... A pergunta é: por quê seu EA precisa trocar de TF? Isso é bem perigoso, porque a maneira assíncrona como o MQL5 trabalha muitas vezes atrapalha tudo, principalmente porque faltam vários "hooks" na linguagem, aí fica na esperança e adivinhação e código macarrônico só para resolver essas deficiências...


;)

 
israeltandrade:

(Parêntesis de agradecimento, se estiver sem tempo, pule para o parágrafo seguinte)

Oi amigos! Primeiramente gostaria de agradecer a toda a ajuda que recebi aqui no fórum, acabei de concluir meu primeiro EA. Falta agora testar mais um pouco, consertar possíveis bugs, mas já posso começar a utilizar. Foram milhares de linha de código e muito do que utilizei nele aprendi por aqui com as contribuições dos colegas.

Notei que os cálculos ficam bagunçados no meu EA se eu troco de timeframe. Existiria a possibilidade de chamar OnDeinit e posteriormente OnInit quando o usuário trocar de Timeframe? Assim daria um "refresh" em todos os cálculos e seria a mesma coisa que retirar o EA, trocar o timeframe e colocá-lo novamente.

Obrigado pela atenção, um abraço!

Olá Israel,

isso já acontece qdo. o TF é alterado, leia a documentação. Porém tem um porém, você deve programar o ajuste inicial de todas as variáveis dentro do OnInit, pois a mudança de TF e de  parâmetros   não reiniciam as variáveis  para o valor de compilação, as variáveis permanecem com seus valores antes do DeInit ( semelhante a uma variável static ).  Ou seja o "refresh" tem que estar programado.

 
Flavio Jarabeck:

Não. Entrará em loop infinito.

O MQL5 apesar de ser derivado do C++ é uma versão bem castrada, com vários buracos.

Você terá que estruturar muito bem seu OnInit() para que você minimize esses efeitos... A pergunta é: por quê seu EA precisa trocar de TF? Isso é bem perigoso, porque a maneira assíncrona como o MQL5 trabalha muitas vezes atrapalha tudo, principalmente porque faltam vários "hooks" na linguagem, aí fica na esperança e adivinhação e código macarrônico só para resolver essas deficiências...


;)

Pois é, estou cutucando o limite da linguagem, acredito... Percebi isso também com algumas funções. Mas vida que segue, estou satisfeito com meu EA, embora não dê para fazer absolutamente tudo.

 
Rogerio Giannetti Torres:

Olá Israel,

isso já acontece qdo. o TF é alterado, leia a documentação. Porém tem um porém, você deve programar o ajuste inicial de todas as variáveis dentro do OnInit, pois a mudança de TF e de  parâmetros   não reiniciam as variáveis  para o valor de compilação, as variáveis permanecem com seus valores antes do DeInit ( semelhante a uma variável static ).  Ou seja o "refresh" tem que estar programado.

Imaginei que essa seria a única solução. No entanto alguns códigos realmente não podem ser calculados no OnInit (meu EA é realmente diferente na questão do tempo e muito dependente de OnTimer). Enfim, acho que vou ter de avisar o usuário para não trocar de TF com o robô ligado.