Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Prival:
Raramente, mas há situações em que as cotações de um instrumento ficam congeladas por um longo tempo (vi uma situação assim no iene). E se o Expert Advisor travar nesse par, você estará em apuros se não tiver traduzido todo o código para OnTime().
Lizar:
Esse evento pode ser recebido usando TimeCuurent(), mas o que fazer com ele e como sincronizá-lo é uma questão.
O que o TimeCuurent() tem a ver com isso?
A ajuda diz:
No manipulador OnTick(), essa função retornará a hora do tique processado de entrada. Em outros casos (por exemplo, chamada nos manipuladores OnInit(), OnDeinit(), OnTimer() e assim por diante), essa é a hora de chegada da última cotação de qualquer símbolo disponível na janela "Market Watch", a mesma hora que é mostrada no título dessa janela.
A sinopse diz o seguinte:
No manipulador OnTick(), essa função retornará a hora de chegada do tick que está sendo processado. Em outros casos (por exemplo, chamada nos manipuladores OnInit(), OnDeinit(), OnTimer() e assim por diante), essa é a hora de chegada da última cotação de qualquer símbolo disponível na janela "Market Watch", a mesma hora que é mostrada no cabeçalho dessa janela.
Sim, está claro. Somente se colocarmos no OnTime, poderemos atualizar a hora no máximo uma vez por minuto e, se colocarmos no OnTick() atual, corremos o risco de perder ticks em alguns pares (em múltiplos).
E o que fazer no bloco de processamento é claro (para múltiplos) - obtemos um novo valor, comparamos com o existente e concluímos se houve um novo tique ou não.
Mas me diga, por que fazer isso no Expert Advisor?
A sinopse diz o seguinte:
error. Aqui está o que a ajuda diz https://www.mql5.com/pt/docs/basis/function/events
Oevento NewTick é gerado somente para os Expert Advisors quando um novo tique é recebido no símbolo, a cujo gráfico o Expert Advisor está anexado.
Mais uma vez. Estamos falando de um Consultor Especializado que está ligado a algum símbolo. Ele é acionado pelo evento
void OnTick() {}
Se você estiver dentro dessa função e não houver ticks nesse par por mais de uma hora, não será possível fazer nada dentro de uma hora. Até agora, a única saída é fazer isso em um cronômetro, que começa independentemente da chegada de ticks no instrumento.
Mas se o colocarmos no OnTime, poderemos atualizar a hora no máximo uma vez por minuto e, se o colocarmos no OnTick() atual, corremos o risco de perder ticks em alguns dos pares (em múltiplos).
Erro. Aqui está o que a ajuda diz https://www.mql5.com/pt/docs/basis/function/events.
Mais uma vez. Estamos falando de um Expert Advisor que fica suspenso em algum símbolo. Ele é iniciado pelo evento
void OnTick() {}
Se você estiver dentro dessa função e não houver ticks nesse par por mais de uma hora, não será possível fazer nada dentro de uma hora. Até agora, a única saída é fazer isso no cronômetro, que é iniciado independentemente da chegada de ticks no instrumento.
Sim, se agirmos dentro da estrutura deste https://www.mql5.com/pt/docs/basis/function/events, concordo que a melhor opção, como vemos agora, é o OnTime. Mas isso só nos salvará da dependência da chegada de ticks. E não nos salvará do single-threadedness: enquanto estivermos processando um sinal para um instrumento, corremos o risco de perder ou atrasar o processamento de outros instrumentos. Isso é especialmente verdadeiro quando "o tempo de processamento das ordens de negociação é de 2 a 7 segundos" + requotes.
Lembrei-me do TimeCuurent() porque o Interesting começou a falar sobre ticks em tempo real para todos os pares na análise do mercado.
Artigo muito interessante. Obrigado por compartilhar tudo isso.
Entretanto, algumas observações:
Falando sobre essa função, você diz :
If you call this prototype function from one place, then we have what we need. But if we want to use this function, for example, again in another place in the same calculation loop, it will always return false, which means that there is no bar. And this will not always be true. Static variable in this case imposes an artificial limit on the number of prototype function calls.
Você substituiu uma variável local estática por uma variável global, que é a mesma coisa, e não resolveu seu problema.
No entanto, seu artigo tem o mérito de estimular o raciocínio e oferecer ideias interessantes.
Bom artigo, obrigado por compartilhar! Tudo isso foi muito útil!
De qualquer forma, usei sua função isNewBar e ela exibe a seguinte mensagem ao compilar:"possível perda de dados devido à conversão de tipos".
Então, alterei os tipos de variável de datetime para long dessa forma:
Agora ela compila sem nenhum aviso e parece funcionar bem. Muito obrigado!