Indicadores: Ping

 

Ping:

Indicador de lag de cotações dentro do terminal, em tempo real.


Autor: fxsaber

 

Por favor, compartilhe as estatísticas do indicador no VPS com ping de rede mínimo.


Tenho picos de até meio segundo no indicador na máquina local, para a qual não vou.


Não monitoro EAs há muito tempo, mas dez milissegundos é comum.


Em geral, uma colher de alcatrão em um barril de MT5(MT4 não é melhor).


ZЫ Aqueles que negociam por meio de ordens pendentes (ordens de limite na bolsa de valores, por exemplo) são muito menos afetados por essa doença do que a negociação no mercado (especialmente escalpelamento).

 

Símbolo da bolsa Si-12.17 MetaQuotes-Demo


O atraso chegou a dois segundos em um ping de rede < 0,1 segundo. Provavelmente, isso se deve à mistura retroativa dos fluxos de cotação e negociação. Em resumo, é ruim.

[Excluído]  

E, por algum motivo, o do meio é muito pequeno.

Foi o segundo que saiu.


 
Maxim Dmitrievsky:

E a média é muito pequena por algum motivo

Na verdade, não é pequena: ~5 ms. Isso é uma pedra no sapato para quem sofre de zero ping.

Aqui está uma explosão em um segundo.

Contra o pano de fundo de tais explosões, a média, é claro, é imperceptível.


O histórico do problema é que houve algumas confusões ao negociar no MT4 ECN, onde meus próprios limites afetam os preços e a pilha é visível. O histórico de ticks não pode ser visualizado no MT4, mas ainda bem que existe o MT5 com os mesmos dados. Por isso, estupidamente, gravei várias horas em vídeo do próprio terminal com todas as pilhas durante a negociação ativa. Comecei a analisar o vídeo, o MT5+ZoomPrice e os resultados do script MQL4 sobre as redações e as peculiaridades da execução.


Como resultado, descobri que o MT4 mostrava alguns absurdos - ou esses preços não estavam presentes no histórico (MT5+ZoomPrice e óculos no vídeo), ou estavam, mas alguns deles não foram vistos, e alguns deles duraram muito mais tempo do que no histórico. No final, percebi que o próprio MT4 está ficando mais lento. No histórico do MT5, tudo estava perfeito. Mas as dúvidas surgiram e o indicador confirmou isso.


Agora percebo que não posso confiar totalmente na relevância dos preços atuais no MT5. Aplicativos de terceiros (vintage, gravados em vídeo) mostram os preços em tempo real com muito mais precisão do que o MT4 e, aparentemente, o MT5. Ainda não sei como compará-los para confirmar, pois não consigo extrair dados diretamente de aplicativos de terceiros via MQL. Mas o resultado obtido é suficiente para ver um problema realmente sério de defasagem da plataforma. E todas as afirmações sobre alta velocidade simplesmente caem por terra quando se observa tal situação.


Sim, o OrderSendAsync é rápido, mas antes de enviá-lo, você precisa se orientar pelos preços atuais, e eles ficam mais lentos.

[Excluído]  
fxsaber:


Sim, o OrderSendAsync é rápido, mas antes de enviá-lo, você precisa se orientar para os preços atuais, e eles ficam mais lentos.


Talvez faça sentido remover todos os pares desnecessários da visão geral do mercado, embora eu não ache que nada mudará significativamente

Lembro que um corretor me recomendou isso :)))

 
Maxim Dmitrievsky:

Talvez faça sentido remover todos os pares desnecessários da visão geral do mercado, embora eu não ache que nada mudará significativamente

Deixei apenas os pares negociados e 5000 barras por gráfico. Agora podemos dizer com certeza que os Expert Advisors baseados em indicadores (padrão ou iCustom) são lentos, porque o fato de haver picos de atraso nos indicadores está comprovado. Portanto, é aconselhável abandonar o iCustom em favor de incorporá-lo a um Consultor Especializado via OOP.


E, de fato, foi afirmado inicialmente que os indicadores nos Expert Advisors são um gargalo, porque todos os indicadores são executados em um thread, ao contrário dos Expert Advisors. As defasagens nos Expert Advisors exigem um estudo separado. A função de obter defasagens está na descrição, portanto, não é difícil.

 

Para autoverificação, há uma linha no código (não comentada):

Print(TickToString(Tick) + TOSTRING(Ping));


Ela exibe o tique fresco recebido e seu ping. Vejamos um exemplo desse registro

2017.11.16 20:08:19.602 Ping (EURUSD,M1)         time = 2017.11.16 20:07:58.215 bid = 1.17711 ask = 1.17714 last = 0.0 volume = 0 TICK_FLAG_ASK
2017.11.16 20:08:19.602 Ping (EURUSD,M1)        Ping = 2.425000000000182
2017.11.16 20:08:23.142 Ping (EURUSD,M1)         time = 2017.11.16 20:08:01.212 bid = 1.17712 ask = 1.17714 last = 0.0 volume = 0 TICK_FLAG_BID
2017.11.16 20:08:23.142 Ping (EURUSD,M1)        Ping = 541.3899999999999
2017.11.16 20:08:23.603 Ping (EURUSD,M1)         time = 2017.11.16 20:08:02.215 bid = 1.17711 ask = 1.17714 last = 0.0 volume = 0 TICK_FLAG_BID
2017.11.16 20:08:23.603 Ping (EURUSD,M1)        Ping = 543.261

A coluna de hora do terminal, quando o tique foi recebido, está marcada emamarelo (o próprio terminal escreve, não o indicador). E vermelho é a hora de um novo tick.

É possível ver que a diferença entre os registros vermelhos vizinhos difere em ~540 ms em comparação com a diferença entre os registros amarelos vizinhos. Esse é um exemplo ao vivo de defasagens do terminal, quando você vê o preço supostamente real, mas ele não existe há meio segundo.

 
Se você comentar a seguinte linha
  if (SymbolInfoTick(_Symbol, Tick, Ping))// &&
// (!IsIndicator || (Count++ > 1))) // SymbolInfoTick em indicadores requer "aquecimento" na forma de vários primeiros eventos de cálculo


imediatamente após a inicialização, você obterá o seguinte resultado

2017.11.17 12:00:55.879 Ping (EURUSD,M1)         time = 2017.11.17 12:00:32.418 bid = 1.17925 ask = 1.17928 last = 0.0 volume = 0 TICK_FLAG_BID
2017.11.17 12:00:55.879 Ping (EURUSD,M1)        Ping = 0.0
2017.11.17 12:00:56.399 Ping (EURUSD,M1)         time = 2017.11.17 12:00:35.720 bid = 1.17923 ask = 1.17925 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
2017.11.17 12:00:56.399 Ping (EURUSD,M1)        Ping = 2781.549

Quase três segundos de "atraso"! O motivo é simples: ao iniciar qualquer indicador, a primeira chamada OnCalculate é forçada e o tick antigo é usado. Isso é o mesmo que pressionar "Update" (Atualizar) no gráfico.

Não há nenhum erro nesse comportamento dos indicadores, você só precisa estar ciente de qual é a primeira chamada OnCalculate. Nos Expert Advisors, não há chamada forçada do OnTick, portanto, tudo é inequívoco.

[Excluído]  

Parece-me que não devemos excluir o atraso da cotação pelo próprio corretor, aqueles notórios "filtros", e o histórico já é fornecido sem filtros

Mas nunca saberemos disso sem os comentários dos desenvolvedores ou sem possuir a parte do servidor.

Por outro lado, coloquei 2 EAs em janelas de terminais diferentes do mesmo símbolo, e comparei os valores através da RAM, os desvios também foram decentes, mais do que vários spreads em fortes flutuações. Não sei como interpretar esse fenômeno.

 
Maxim Dmitrievsky:

Parece-me que não devemos excluir o atraso da cotação pelo próprio corretor, esses "filtros" muito notórios, e o histórico já é fornecido sem filtro

Os símbolos de câmbio no MetaQuotes-Demo com um atraso de 15 minutos definitivamente não têm nenhum filtro.

Por outro lado, coloquei dois EAs em janelas de terminal diferentes de um símbolo e comparei os valores por meio da RAM; os desvios também eram decentes, mais do que vários spreads em flutuações fortes. Não sei como interpretar esse fenômeno.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

É verdade que algumas corretoras têm cotações defasadas?

fxsaber, 2017.11.17 11:20 AM.

No MT4/5, é preciso ter cuidado com o conceito de relevância de preço.

Dois terminais na mesma máquina conectados à mesma conta não estarão sincronizados em uma faixa bastante ampla.

Isso precisa ser tratado pelos desenvolvedores, pois qualquer característica de velocidade do MT5 pode ser razoavelmente, para dizer o mínimo, distorcida.