Bibliotecas: OnTickMulti - página 2

 

fxsaber #:

double OnTester()

{return AccountInfoDouble(ACCOUNT_BALANCE); }

Para que serve essa linha?

 
lynxntech #:

Para que serve essa linha?

Para retornar o valor do saldo desejado.

 

Vocês já verificaram se os ticks estão sincronizados no tempo na sua solução?

Em testes comuns, se solicitarmos ticks com caracteres diferentes, há um atraso de 1 tick entre um e outro. Para verificar isso, criei scripts personalizados com ticks a cada minuto.

 
Rorschach #:

Vocês já verificaram até que ponto os ticks estão sincronizados em sua solução?

Está tudo funcionando corretamente. E no Tester padrão também está certo. Se não estiver, mostre.

 
fxsaber #:
No Tester padrão está correto. Se não estiver, mostre.

Criei ticks personalizados a partir dos gráficos de um minuto do EUR e do GBP (por conveniência)

Para o EUR está correto; para o GBP, está um tique à frente (observe a hora e o preço)

Arquivos anexados:
1.mq5  3 kb
 
Rorschach #:

Criei ticks personalizados a partir dos intervalos de um minuto do EUR e do GBP (por conveniência)

Para o EUR está correto; para o GBP, está um tick à frente (observe a hora e o preço)

Os ticks com a mesma hora não chegam simultaneamente. Todos são sequenciais. E se o tick do EURUSD com a hora mais avançada chegar primeiro, nesse momento não se sabe nada sobre o tick com a mesma hora do GBPUSD, que chegará em segundo lugar. Portanto, no momento em que o primeiro tick do EURUSD chega, o segundo tick do GBPUSD simplesmente não existe, mas há os dados do tick anterior do GBPUSD.
 
fxsaber #:
Os ticks com o mesmo tempo não chegam simultaneamente. Todos chegam sequencialmente. E se um tick do EURUSD com um tempo maior chegou primeiro, nesse momento não se sabe nada sobre o tick com o mesmo tempo do GBPUSD, que chegará em segundo lugar. Portanto, no momento em que o primeiro tick do EURUSD chega, o segundo tick do GBPUSD simplesmente não existe, mas há os dados do tick anterior do GBPUSD.

No simulador, isso é uma desvantagem; para a arbitragem, é preciso que haja sincronia.

E não apenas para a arbitragem. Se o sistema se baseia na correlação entre instrumentos, surge a possibilidade de “previsão do futuro”.

 
Rorschach #:

No testador, isso é uma desvantagem; para arbitragem, é preciso que seja sincronizado.

E não apenas para a arbitragem. Se o sistema se baseia na correlação entre instrumentos, surge a previsão do futuro

Para esses casos, existe um atraso de execução configurável no Tester.
 
fxsaber #:
Para esses casos, existe um atraso de execução configurável no Testador.
Ficou um pouco complicado para mim. No Inite, eu fazia a leitura com um testador personalizado e gravava as entradas em um array; depois, no OnTick do testador, lia as entradas e sincronizava
 
Rorschach #:

No testador, isso é uma desvantagem; para a arbitragem, é preciso que seja sincronizado.

E não apenas para arbitragem. Se o sistema se baseia na correlação entre instrumentos, surge a previsão do futuro

Não há previsão do futuro, porque, se para o momento X houver ticks em vários símbolos, então, junto com o primeiro evento em um dos instrumentos, nos demais símbolos (para os quais os eventos ainda estão na fila) haverá o tick anterior, e não o tick seguinte (como no exemplo, 00:04 foi antes de 00:05, e não depois).

Para a sincronização, é preciso garantí-la algoritmicamente no código; por exemplo, no manipulador OnTick, consultar a hora dos ticks em todos os símbolos envolvidos antes de iniciar uma operação. Mas, em princípio, se a arbitragem for baseada especificamente em ticks (e não em barras ou minutos), é difícil imaginar uma sincronização confiável, pois os ticks em certos símbolos podem realmente ficar ausentes por alguns segundos.