Características da linguagem mql5, subtilezas e técnicas - página 27

 

Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação

Bugs, bugs, perguntas

fxsaber, 2017.02.07 13:41

SymbolInfoTick em indicadores funciona de forma bastante diferente do que em EAs.

Em um indicador ele sempre retorna o tique que foi o iniciador da chamada OnCalculate. E esses ticks iniciadores no indicador não devem ser pulados - esta é a ideologia dos desenvolvedores. O problema está na formação da fila destes carrapatos.

No Expert Advisor, SymbolInfoTick no OnTick não retorna o tick que iniciou a chamada do OnTick, mas faz uma solicitação completa para o estado atual.

 
fxsaber:

Em outras palavras:

O indicador mostrará o primeiro tick de todo o pacote quando um tick batch chegar, enquanto o EA mostrará o último tick.

Estou a ler isto bem?

 
Artyom Trishkin:

Em outras palavras:

O indicador mostrará o primeiro tick de todo o pacote quando um pacote de ticks chegar, enquanto o EA mostrará o último tick.

Estou a perceber bem?

Sim. A OnCalculate não será chamada a cada tique do pacote na ordem de fila.
 
fxsaber:
Sim. A OnCalculate não será chamada a cada toque do pacote na ordem da fila.

Em cada tique? Porque você NÃO escreveu...

Acontece que com a chegada de um pacote de carrapatos, o indicador começará na ordem dos carrapatos no pacote de entrada?

Pergunto-me, se o pacote foi recebido na abertura de uma nova barra, quantas vezes, durante este pacote de carrapatos, o indicador fará o recálculo completo?

 
Artyom Trishkin:

Em cada tique? Porque você NÃO escreveu...

Provavelmente não escreveu muitas coisas.

Acontece que com a chegada de um pacote de carrapatos, o indicador será iniciado na ordem dos carrapatos no pacote de entrada?

Pergunto-me, se o pacote chegou na abertura de um novo bar - quantas vezes durante este pacote de carrapatos o indicador fará um recálculo completo?

O evento de cálculo é gerado em TODOS os tick. Portanto, há uma fila de carrapatos para os indicadores. Se atingir um determinado montante, o log exibe um aviso de que o indicador está muito lento.

As próprias barras são indicadores por natureza e são formadas por eventos de cálculo. Portanto, se a TF M1 e são 10:15:00.020 e um pacote de 50 ms chega, então o primeiro tick ainda tem tempo 10:14:59.970. E todos os indicadores são chamados primeiro neste evento Calcular evento - primeiro o indicador de série temporal e depois indicadores personalizados com estas séries temporais. Ou seja, neste layout, a barra 10:15 ainda não está formada como a barra zero. E a barra de zero é 10:14.


Então, quando o pacote começar a desenrolar-se através de Calcular eventos, a barra 10:15 também aparecerá. Acho que já o soletrei em pormenor.

 
fxsaber:

Deve haver muita coisa que eu não escrevi.

O evento Calculate é gerado em TODOS os tick. Portanto, há uma fila de carrapatos para os indicadores. Se atingir um determinado montante, há um aviso no log de que o indicador é demasiado lento.

As próprias barras são indicadores por natureza e são formadas por Calcular eventos. Portanto, se TF M1 e são 10:15:00.020 e um pacote de 50 ms está chegando, então o primeiro tick ainda tem tempo 10:14:59.970. E todos os indicadores são chamados primeiro neste evento Calcular evento - primeiro o indicador de série temporal e depois indicadores personalizados com estas séries temporais. Ou seja, neste layout, a barra 10:15 ainda não está formada como a barra zero. E a barra de zero é 10:14.


Então, quando o pacote começar a desenrolar-se através de Calcular eventos, a barra 10:15 também aparecerá. Acho que já o soletrei em pormenor.

Obrigado.
 

Como consequência, é bastante normal que a EA receba um carrapato de uma barra que ainda não se formou. Mas este é um ponto tão sutil que mesmo reproduzi-lo de propósito exigiria muito esforço. Em geral, é mais teórico do que prático.


Se somos paranóicos quanto à velocidade, o uso de indicadores (e barras, é claro) não é uma opção. Está tudo na EA.

 

fxsaber:

Então, quando o pacote começar a desenrolar-se através de Calcular eventos, a barra 10:15 também aparecerá. Acho que já o soletrei em pormenor.

Informação interessante.
Existe alguma forma de determinar que uma embalagem chegou, ignorar os primeiros tiquetaques dela e levar apenas o último tique para processamento?
 
Vasiliy Pushkaryov:
Existe alguma forma de detectar que uma embalagem entrou, ignorar os primeiros carrapatos e levar apenas o último carrapato para processamento?
Em OnCalculate via CopyTicks.
 
fxsaber:
Em OnCalculate via CopyTicks.
Obrigado, eu levo-o a bordo.
Razão: