Please accept YouTube cookies to play this video. By accepting you will be accessing content from YouTube, a service provided by an external third party.
If you accept this notice, your choice will be saved and the page will refresh.
Com MQL5 para Metatrader podemos usar o laço do while para controlar o fluxo do programa. Mas há um senão que precisa de saber – ou pode codificar um loop infinito – sem sequer obter erros de compilação…
Neste vídeo vamos descobrir como usar a declaração „while“ para esperar até que algo aconteça como agora; esperámos até que o contador de atraso atingisse 500.000, por isso vamos descobrir como usar o loop „while“ no MQL5.
Para o fazer, clique no pequeno botão aqui ou prima F4 no seu Metatrader, agora deve ver a janela do Metaeditor e aqui quer clicar em: „File/ New/ Expert Advisor (template)“ do template, „Continue“, eu chamarei este ficheiro: „SimpleWhileLoop“, agora clico em „Continuar“, „Continuar“ e „Terminar“.
Podemos apagar tudo acima da função „OnTick“ e as duas linhas de comentário aqui.
Então comecemos por criar um contador de atraso (DelayCounter), vamos usar uma variável inteira porque só precisamos de números inteiros, começamos com o valor 1 e vamos aumentar o contador de atraso na função „OnTick“, digamos que temos um valor mínimo de 500.000 e só se o nosso contador de atraso estiver acima do nosso valor mínimo de 500.000 é que queremos fazer alguma coisa.
Agora podemos usar a declaração „enquanto“ dentro da função „OnTick“ para verificar se o nosso contador de atraso ainda está abaixo do nosso valor mínimo e se é esse o caso que queremos fazer alguma coisa, primeiro queremos criar uma saída que nos mostre o texto: „DelayCounter:“ seguido do valor calculado do contador de atraso actual e depois vamos aumentar o contador de atraso pelo valor 1 que é feito usando „DelayCounter“ igual a „DelayCounter“ mais 1, por isso vamos compilar o código aqui, isto deve funcionar sem qualquer erro e agora clicamos no pequeno botão aqui ou pressionamos F4 para voltar a Metatrader.
Vamos abrir o Testador de Estratégia clicando em: „View/ Strategy Tester“ ou pode também premir CTRL e R, aqui escolhemos o novo ficheiro: „SimpleWhileLoop.ex5“, por favor active o modo de visualização aqui e inicie o seu teste.
E agora vê que o nosso contador está a funcionar e quando atingir 500.000 isto vai mover-se para que tudo fique bem, mas há um senão; digamos que gostaria de aumentar o contador de atraso fora do loop, ainda podemos compilar o código sem erros, mas quando iniciarmos o próximo teste nada acontece. Todo o teste de estratégia está congelado, então porque é que isso acontece?
Se destacar a declaração „enquanto“ e premir F1 deverá ver o ficheiro „Ajuda“ mas nada acontece porque tudo ainda está congelado e isso é porque criámos aqui um loop infinito. Quando o primeiro tick chegar e esta expressão aqui for verdadeira, a declaração „enquanto“ provocará um loop infinito que nunca mais acabará! Queríamos aumentar o contador de atraso aqui mas como estamos a fazê-lo fora do loop „while“ isto nunca vai acontecer e por isso esta expressão será verdadeira para sempre e esta é uma das razões pelas quais não gosto de usar „while“ com muita frequência, pode-se verificar a maioria das condições quando se usa „se“, por isso vamos recompilar o código aqui, reiniciar um teste e desta vez vemos que o nosso contador de atraso está a funcionar porque a declaração „se“ só será executada uma vez de cada vez que um tick entrar enquanto a declaração „while“ correria para sempre.
Certo, então se quiser usar a declaração „while“ precisa de se certificar de que dentro do seu laço „while“ algo vai interromper a execução ou então o seu laço „while“ correrá para sempre.
Portanto, vamos reiniciar o teste e desta vez conta como é suposto fazer e neste pequeno vídeo aprendeu como usar a declaração de „enquanto“ e como evitar loops sem fim e codificou-a você mesmo com algumas linhas de código MQL5.