> 100 ms für die Ausführung von SymbolInfoTick. Es ist klar, dass der Code ein Selbstläufer ist. Aber es zeigt den Grund für die Verlangsamung bei den üblichen Expert Advisors.
Dies sollte bei der Bewertung der Messung von einmaligen Maßnahmen anhand dieser Benchmark berücksichtigt werden.
Eine genauere Art der Messung:
voidOnTick()
{
MqlTick Tick;
ulong gstart=GetMicrosecondCount();
int count=10000;
for(int i=0; i<count; i++)
{
SymbolInfoTick(_Symbol, Tick);
}
ulong gend=GetMicrosecondCount()-gstart;
Print(count," iterations, total time ", DoubleToString(gend/1000.0,3)," ms; avr time: ",DoubleToString(gend/1000.0/count,3)," ms");
}
20 Karten.
Build 2656.
2020.10.2010:55:12.725SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 10.031 ms; avr time: 0.001 ms
2020.10.2010:55:12.726SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 10.799 ms; avr time: 0.001 ms
2020.10.2010:55:12.726SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 11.080 ms; avr time: 0.001 ms
2020.10.2010:55:12.727SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 11.181 ms; avr time: 0.001 ms
2020.10.2010:55:12.727SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 11.158 ms; avr time: 0.001 ms
2020.10.2010:55:12.727SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 11.202 ms; avr time: 0.001 ms
2020.10.2010:55:12.727SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 11.206 ms; avr time: 0.001 ms
2020.10.2010:55:13.030SymbolInfoTick (GBPCHF,H1) 10000 iterations, total time 0.433 ms; avr time: 0.000 ms
2020.10.2010:55:13.528SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 6.344 ms; avr time: 0.001 ms
2020.10.2010:55:13.530SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 8.253 ms; avr time: 0.001 ms
2020.10.2010:55:13.532SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 9.745 ms; avr time: 0.001 ms
2020.10.2010:55:13.532SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 9.873 ms; avr time: 0.001 ms
2020.10.2010:55:13.532SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 10.392 ms; avr time: 0.001 ms
2020.10.2010:55:13.532SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 10.201 ms; avr time: 0.001 ms
2020.10.2010:55:13.532SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 10.020 ms; avr time: 0.001 ms
2020.10.2010:55:13.532SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 10.388 ms; avr time: 0.001 ms
2020.10.2010:55:14.439SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 11.488 ms; avr time: 0.001 ms
2020.10.2010:55:14.439SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 12.251 ms; avr time: 0.001 ms
2020.10.2010:55:14.439SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 12.257 ms; avr time: 0.001 ms
2020.10.2010:55:14.440SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 12.495 ms; avr time: 0.001 ms
2020.10.2010:55:14.440SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 12.624 ms; avr time: 0.001 ms
2020.10.2010:55:14.440SymbolInfoTick (AUDUSD,M15) 10000 iterations, total time 12.592 ms; avr time: 0.001 ms
Manchmal ist die Messung selbst langsam, d.h. ::GetMicrosecondCount().
Ein einfaches Beispiel:
20 Karten.
GetLastError() liest lediglich eine Speicherzelle in der nat. Eigentlich zum Nulltarif.
Danke, ich verstehe. Aber vielleicht sollte man trotzdem in Erwägung ziehen, vordefinierte Variablen einzuführen? Das Lesen einer Variablen wäre wahrscheinlich schneller als der Aufruf einer Funktion und das Füllen einer Struktur.
Der Grund für das Abbremsen von SymbolInfoTick scheint die Parallelverarbeitung zu sein.
Ergebnis (inAmount = 15).
> 100 ms für die Ausführung von SymbolInfoTick. Es ist klar, dass der Code ein Selbstläufer ist. Aber es zeigt den Grund für die Verlangsamung bei den üblichen Expert Advisors.
Forum für Handel, automatisierte Handelssysteme und Strategietests
MT5 und Geschwindigkeit in Aktion
Roman, 2020.10.14 04:54
Vordefinierte Variablen für den aktuellen Tick wären besser.
Das Ergebnis (inAmount = 15).
Die HFT kann nicht mit solchen Verzögerungen aufgebaut werden.
Wäre es nicht besser, das Tiki aus dem Glas zu nehmen?
Sie haben es nicht gemessen?
Z.u.s. oder besser noch FIX it ))
Es ist besser, einen neuen Tick nicht durch die Balken zu erkennen.
Ergebnis.
Die Balken hinken dem aktuellen Stand um Sekunden hinterher! Hallo Balken- und Indikatorliebhaber.
Es ist sehr schwer, das als Selbstschuss zu bezeichnen.
Ergebnis (inAmount = 15).
Wie machen Sie das?
20 Karten.
Build 2656.
Ahh, gab es dort 1000 Anfragen?
Ich bin nur nicht am Computer, um das zu überprüfen.
fxsaber, und warum sollte es 1000 Abfragen für den aktuellen Tick geben?
Anton, aber er ist immer noch um 19 Mio. zurückgegangen.
Im Verhältnis zum Rest sind es 850%.
Roman:
Anton, aber es sind immer noch 19 Mio. Euro verloren gegangen.
Als Prozentsatz des Restes sind es 850%.
Manchmal ist die Messung selbst langsam, d.h. ::GetMicrosecondCount().
Ein einfaches Beispiel:
20 Karten.
GetLastError() liest lediglich eine Speicherzelle in der nat. Eigentlich zum Nulltarif.
Wenn Sie noch Zweifel haben, können Sie es so machen:
Dies sollte bei der Bewertung der Messung von einmaligen Maßnahmen anhand dieser Benchmark berücksichtigt werden.
Eine genauere Art der Messung:
20 Karten.
Build 2656.
Manchmal ist die Messung selbst langsam, d.h. ::GetMicrosecondCount().
Ein einfaches Beispiel:
20 Karten.
GetLastError() liest lediglich eine Speicherzelle in der nat. Eigentlich zum Nulltarif.
Danke, ich verstehe.
Aber vielleicht sollte man trotzdem in Erwägung ziehen, vordefinierte Variablen einzuführen?
Das Lesen einer Variablen wäre wahrscheinlich schneller als der Aufruf einer Funktion und das Füllen einer Struktur.
Eine genauere Art der Messung:
Durchschnittliche Temperatur im Krankenhaus.