APRENDA O TUTORIAL BÁSICO MQL5 – 8 COMO USAR O WHILE LOOP

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.

YouTube privacy policy

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.