MT5 e la velocità in azione - pagina 8

 
Un sacco di controlli messi... Sorpreso da questo.
2020.06.03 14:09:21.604 Alert: Time[NewTicks.mqh 28: ::SymbolInfoTick(_Symbol,Tick)] = 182 ms.

Nessuna transazione è stata fatta a questo punto.


ZS Non è raro.

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

PS In modalità combattimento, quando si effettuano delle transazioni, ci sono quasi sempre dei ritardi (ho emesso solo casi maggiori di 5 millisecondi).

Altrimenti sembra essere molto meglio del 2470.

Statistiche accumulate. HistorySelect è in ritardo solo quando si fanno delle transazioni.


ZS Lies. Anche senza transazioni, ci sono dei ritardi.

2020.06.03 14:35:26.999 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 24 ms.
 
fxsaber:
Mettete un sacco di controlli... Sorpreso da questo.

Risulta essere un evento frequente. Le funzioni di trading non sono state chiamate.

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.

SymbolInfoTick non è un cattivo ritardo a volte. L'HFT può essere molto esperto con questi ritardi inaspettati.

Si prega di chiedere agli sviluppatori di trovare le ragioni. Nel frattempo, è ovvio che nel combattimento EAs il loro profiler è un must.

 
fxsaber:

Risulta essere un evento frequente. Le funzioni di trading non sono state chiamate.

SymbolInfoTick non è un cattivo ritardo a volte. L'HFT può essere molto esperto con questi ritardi inaspettati.

Si prega di chiedere agli sviluppatori di trovare le ragioni. Nel frattempo, è ovvio che negli EA da battaglia il loro profiler è un must.

Come si fa a misurare i millisecondi con tale precisione? Un orologio hardware nel suo processore?

 
Alexey Volchanskiy:

Come si fa a misurare i millisecondi con tale precisione? Un orologio hardware nel processore?

GetMicrosecondCount().

 
fxsaber:

Risulta essere un evento frequente. Le funzioni di trading non sono state chiamate.

SymbolInfoTick non è un cattivo ritardo a volte. L'HFT può essere molto esperto con questi ritardi inaspettati.

Si prega di chiedere agli sviluppatori di trovare le ragioni. Nel frattempo, è ovvio che in battaglia il profiler di EA è un must.

Il timer di sistema ha un passo di 20ms per impostazione predefinita. l'hai resettato ad un'impostazione più bassa prima della misurazione?

potete provare con funzioni come questa:

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

il timer di sistema ha un passo predefinito di 20ms. l'hai resettato ad un passo più piccolo prima di misurare?

Agli sviluppatori.

Forum sul trading, sistemi di trading automatico e test di strategia

MT5 e velocità in battaglia

Anton, 2020.05.29 12:32

Il codice di prova dovrebbe assomigliare a questo:

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");
  }


Per favore, non teorizzare più. Questo è un ramo di applicazione pratica.

 
fxsaber:

Agli sviluppatori.

quindi questa è la risposta degli sviluppatori di diversi anni fa.

 
Igor Zakharov:

quindi questa è la risposta degli sviluppatori di qualche anno fa.

Va bene che la data sia 2020.05.29 12:32

 
Alexey Viktorov:

Va bene che la data sia 2020.05.29 12:32

Ho sbagliato, fxsaber me l'ha fatto notare: GetTickCount() può incasinarsi come ho scritto, ma GetMicrosecondCount() no.

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

Starò in silenzio d'ora in poi :)