MT5 e velocidade em ação - página 8

 
Colocar muitos cheques em... Surpreendido por isso.
2020.06.03 14:09:21.604 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 182 ms.

Nenhuma transação foi feita neste momento.


ZS Não é raro.

2020.06.03 14:31:39.484 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 65 ms.
 
fxsaber:

PS No modo de combate, quando as transações são feitas, há quase sempre atrasos (eu só produzo casos maiores que 5 milissegundos).

Caso contrário, parece ser muito melhor do que 2470.

Estatísticas acumuladas. HistóricoSelecionar só se atrasa ao fazer transações.


ZS Mentiras. Sem transações, também há atrasos.

2020.06.03 14:35:26.999 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 24 ms.
 
fxsaber:
Colocar um monte de controles... Surpreendido por isso.

Acontece com freqüência. As funções comerciais não foram chamadas.

2020.06.03 15:23:21.428 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 5 ms.
2020.06.03 15:26:09.433 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 8 ms.
2020.06.03 15:26:24.435 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 10 ms.
2020.06.03 15:26:31.417 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.06.03 15:26:33.429 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 8 ms.
2020.06.03 15:26:34.428 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 3 ms.
2020.06.03 15:26:55.655 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 18 ms.
2020.06.03 15:27:05.578 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 14 ms.
2020.06.03 15:29:27.613 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 3 ms.
2020.06.03 15:31:29.426 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 4 ms.
2020.06.03 15:31:46.430 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 11 ms.
2020.06.03 15:33:12.441 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 14 ms.
2020.06.03 15:33:21.437 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 12 ms.
2020.06.03 15:33:35.430 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 5 ms.
2020.06.03 15:34:55.424 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 2 ms.
2020.06.03 15:35:09.426 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 2 ms.
2020.06.03 15:35:34.428 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 4 ms.
2020.06.03 15:41:48.423 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 3 ms.
2020.06.03 15:41:54.439 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 13 ms.
2020.06.03 15:42:28.440 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 15 ms.
2020.06.03 15:42:48.845 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 14 ms.
2020.06.03 15:43:08.429 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 5 ms.
2020.06.03 15:43:25.428 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 7 ms.
2020.06.03 15:43:27.428 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 4 ms.
2020.06.03 15:43:48.436 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 9 ms.
2020.06.03 15:47:05.424 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 3 ms.
2020.06.03 15:47:46.426 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 8 ms.
2020.06.03 15:47:58.845 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 4 ms.
2020.06.03 15:48:47.140 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 12 ms.
2020.06.03 15:49:03.430 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 5 ms.
2020.06.03 15:49:52.684 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 3 ms.
2020.06.03 15:53:39.429 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 4 ms.
2020.06.03 15:54:17.424 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 5 ms.
2020.06.03 15:54:47.425 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.06.03 15:57:28.425 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 5 ms.
2020.06.03 15:57:47.425 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 2 ms.
2020.06.03 15:58:27.425 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.06.03 15:59:08.445 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 23 ms.
2020.06.03 16:00:20.447 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 28 ms.
2020.06.03 16:01:50.430 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 7 ms.
2020.06.03 16:02:08.431 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 6 ms.

O SymbolInfoTick às vezes não é um mau atraso. O HFT pode ser muito experiente com tais atrasos inesperados.

Por favor, peça aos Desenvolvedores para encontrar as razões. Enquanto isso, é óbvio que em EAs de combate seu profiler é obrigatório.

 
fxsaber:

Acontece com freqüência. As funções comerciais não foram chamadas.

O SymbolInfoTick às vezes não é um mau atraso. O HFT pode ser muito experiente com tais atrasos inesperados.

Por favor, peça aos Desenvolvedores para encontrar as razões. Enquanto isso, é óbvio que em EAs de batalha seu profiler é obrigatório.

Como você mede milissegundos com tal precisão? Um relógio de hardware em seu processador?

 
Alexey Volchanskiy:

Como você mede milissegundos com tanta precisão? Um relógio de hardware no processador?

GetMicrosecondCount().

 
fxsaber:

Acontece com freqüência. As funções comerciais não foram chamadas.

O SymbolInfoTick às vezes não é um mau atraso. O HFT pode ser muito experiente com tais atrasos inesperados.

Por favor, peça aos Desenvolvedores para encontrar as razões. Enquanto isso, é óbvio que na batalha EAs o próprio profiler é uma obrigação.

o temporizador do sistema tem um passo de 20ms por padrão. você o reajustou para uma configuração mais baixa antes de medir?

você pode tentar com funções como esta:

#import "kernel32.dll"
   int timeBeginPeriod(uint TimerRes);
   int timeEndPeriod(uint TimerRes);
#import
 
Igor Zakharov:

o temporizador do sistema tem um passo padrão de 20ms. você o reajustou para um passo menor antes da medição?

Para os desenvolvedores.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

MT5 e velocidade na batalha

Anton, 2020.05.29 12:32

O código de teste deve ser parecido com este:

void OnStart()
  {
   MqlTick Tick;
   SymbolInfoTick(_Symbol, Tick);
   ulong start=GetMicrosecondCount();
   for(int i=0; i<100000; i++)
     {
      HistorySelect(Tick.time, INT_MAX);
     }
   ulong end=GetMicrosecondCount()-start;
   Print("100000 HistorySelect = ",DoubleToString(end/1000.0,2)," ms");
  }


Por favor, não teorize mais. Este é um ramo de aplicação prática.

 
fxsaber:

Para os desenvolvedores.

Portanto, esta é a resposta dos desenvolvedores de vários anos atrás.

 
Igor Zakharov:

Portanto, esta é a resposta dos desenvolvedores de alguns anos atrás.

Está tudo bem que a data seja 2020.05.29 12:32

 
Alexey Viktorov:

Está bem que a data seja 2020.05.29 12:32

Eu estava errado, fxsaber apontou: GetTickCount() pode estragar tudo como eu escrevi, mas GetMicrosecondCount() não pode.

https://www.mql5.com/ru/forum/189360#comment_4838735

A partir de agora vou ficar em silêncio :)