MT5 und Geschwindigkeit in Aktion - Seite 86

 
fxsaber:

@Anton, in vielen Standardfunktionen können Sie NULL anstelle eines Zeichens angeben. Beeinträchtigt sie die Geschwindigkeit der Ausführung?

Oder macht es für Terminal/Tester keinen Unterschied?

Symbol(), _Symbol-Einträge sind äquivalent zu NULL (wobei NULL anstelle eines Symbolnamens erlaubt ist).

In diesem Fall gibt es keine zusätzliche Prüfung auf das Vorhandensein des aktuellen Symbols, das Vorhandensein des aktuellen Symbols in der Marktbeobachtung und unnötige Aufrufe von Eigenschaften des aktuellen Symbols, da die Eigenschaften des aktuellen Zeichens zwischengespeichert werden

Das heißt, wenn Sie einen einfachen String-Parameter anstelle von Symbol(), _Symbol oder NULL angeben, dann prüft für das vollständige Programm und noch Eigenschaften anfordern

 
Slava:

Symbol(), _Symbol-Einträge sind äquivalent zu NULL (wobei NULL anstelle des Symbolnamens erlaubt ist).

In diesem Fall gibt es keine unnötige Prüfung auf das Vorhandensein des aktuellen Symbols, auf das Vorhandensein des aktuellen Symbols in Market Watch und keinen unnötigen Aufruf der Eigenschaften des aktuellen Symbols, da die Eigenschaften des aktuellen Symbols zwischengespeichert werden

Slava, können Sie Folgendes erläutern: Bei Aktien ist der Tickpreis in der Symbolangabe auf "0" gesetzt. Und das ist es, was die Unterstützung sagt:

"Ich habe eine Bestätigung von der technischen Abteilung erhalten. Bitte beachten Sie, dass es nicht möglich ist, den Parameter "Tick-Preis" für die Aktie einzugeben. Der Wert wird standardmäßig auf 0 gesetzt.
Vielen Dank, dass Sie uns kontaktiert haben!"


Ist dies wirklich der Fall? Steht in den Symbolspezifikationen, dass der Tickpreis nur für Aktien auf Null gesetzt ist?

 
Vladimir Karputov:

Slava, können Sie Folgendes erläutern: Bei der Aktie ist der Tickpreis in der Symbolangabe auf "0" gesetzt. Und das ist es, was die Unterstützung sagt:

"Ich habe eine Bestätigung von der technischen Abteilung erhalten. Bitte beachten Sie, dass es nicht möglich ist, den Parameter "Tick price" für die Aktie einzugeben. Der Wert wird standardmäßig auf 0 gesetzt.
Vielen Dank, dass Sie uns kontaktiert haben!"


Ist dies wirklich der Fall? Steht in den Symbolspezifikationen, dass der Tickpreis nur für Aktien Null ist?

Ja, es gibt Nuancen.

Wenn die Null ausgestellt wird, müssen Sie selbst rechnen. Fragen Sie Ihren Makler nach der Formel

 
fxsaber:

Das Problem, LATE Ticks ohne Skips zu erhalten, wird jetzt nur noch über CopyTicks* gelöst. Dies ist ein sehr schwerfälliger Mechanismus für dieses weit verbreitete Problem.

Übrigens, aus den heutigen frischen Logs der neuesten Version von MT5:

Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 704931 mcs.
Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 704684 mcs.
Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 704425 mcs.

Es hingen 3 EAs an 1 Symbol, jedes in seinem eigenen Chart. Und die Aufforderung wird immer wieder erne uert. Solche Ausschläge sind natürlich selten, aber eine Anfrage nach neuen Ticks, die vom letzten Tick stammt, dauerte 700 ms.

 
Renat Fatkhullin:

Das ist sie nicht.

In jeder Sendung werden Sie immer wieder zufällige Verzögerungen feststellen. Wenn Sie anfangen, den Überblick zu behalten, werden Sie über die Realität von Windows entsetzt sein. Ich habe dies bereits mehrfach ausführlich erläutert.

Auch wir waren einmal erstaunt, als wir bei System-WinAPI-Funktionen zufällige Bursts von 60-80 ms anstelle von 0 ms feststellten.


Wir migrieren jetzt die meisten unserer Windows-Lösungen massenhaft auf speziell entfettete Windows Server 2019 Core-Versionen und .NET Core-Webprojekte auf Linux. Dies bringt enorme Einsparungen bei den Systemressourcen mit sich und verringert die Latenzzeit des Systems erheblich.

Der erste Schritt beim Abschöpfen der MataTrader 5-Terminals bestand darin, einen Task-Manager zu implementieren, um den Ressourcenverbrauch im Auge zu behalten. Für uns selbst sammeln wir mehr Informationen.

Es ist bereits deutlich geworden, dass wir das tun:

  • übermäßig lange Zurückhaltung unnötiger Ströme
  • Überskalierung
  • Caches überstrapazieren.
In der nächsten Version werden wir einige Ressourcenprobleme Schritt für Schritt beheben.

Wäre es nicht schön, auch ein Linux-Terminal zu haben )))

 
Slava:

Ja, es gibt Nuancen.

Wenn Sie Null haben, müssen Sie selbst nachrechnen. Fragen Sie Ihren Makler nach der Formel.

Bei SymbolInfoXXXX ist alles richtig. Die Frage war, warum in der Spezifikation für Aktien die Zahl "0" angegeben ist. Sie sagen, es ist klar - ein Häkchen entspricht einem Cent. Aber das ist nicht der Grund, in der Spezifikation '0' zu setzen?

 
fxsaber:

Innerhalb der Funktion müssen Sie noch zu dem entsprechenden Häkchen springen. Jetzt ist es an der Zeit, die String-Variable zu analysieren. Bei NULL ist dies nicht erforderlich.

Ich habe das damals überprüft und konnte keinen signifikanten Geschwindigkeitsunterschied feststellen. Sie können es selbst überprüfen

 
Slava:

Wird anstelle von Symbol(), _Symbol oder NULL ein normaler String-Parameter angegeben, so wird das gesamte Programm geprüft und die Eigenschaften werden ebenfalls abgefragt

Vielen Dank für die Informationen! Es hat sich herausgestellt, dass es besser ist, es auf diese Weise zu tun:

// Быстрый SymbolInfoTick.
bool SymbolInfoTickFast( const string &Symb, MqlTick &Tick )
{
  return((Symb == _Symbol) ? SymbolInfoTick(_Symbol, Tick)
                           : SymbolInfoTick(Symb, Tick));
}
 
fxsaber:

Vielen Dank für die Informationen! Es hat sich herausgestellt, dass es besser ist, es auf diese Weise zu tun:

Auch ohne technische Details könnte ich mir nicht vorstellen, wie Sie es in Ihren Funktionen anders machen könnten...

Inwiefern sollte diese Konstruktion schneller sein als die Standardfunktion SymbolInfoTick()?

 
Artyom Trishkin:

Wie soll diese Konstruktion schneller sein als das Standard-SymbolInfoTick()?

Schneller.