Vergleich von MQL5 und QLUA - warum sind Transaktionen in MQL5 bis zu 28 Mal schneller?

MetaQuotes | 8 November, 2016

Viele Trader machen sich keine Gedanken darüber, wie schnell ihre Order die Börse erreicht, wie schnell sie da ausgeführt wird und wie viel Zeit das Terminal braucht, um das Ergebnis zu erhalten.

Sie wissen einfach nicht, dass die Qualität der Ausführung ihrer Order durch eine schnellere Reaktion und Geschwindigkeit der Abwicklung von Transaktionen verbessert werden kann.

Am 12. September 2016 wurden drei Geschwindigkeitstests auf einem realen Konto des Otkrytie-Brokers in MetaTrader 5 Build 1415 und Quik 7.2.23 zur selben Zeit durchgeführt. Jeder Test war darauf ausgerichtet, eine konkrete Geschwindigkeitscharakteristik zu messen, die für algorithmischen Handel von großer Bedeutung ist:
  1. Testen synchroner Operationen  — eine Reihe von 10 synchronenaufeinanderfolgenden Kauf-Operationenmit der Bestätigung einer erfolgreichen Ausführung jeder Transaktion an der Börse. Keine weitere Transaktion wird ausgeführt, bis der Handelsserver es bestätigt, dass die vorherige Transaktion an der Börse ausgeführt/nicht ausgeführt wurde. Die Geschwindigkeit der Ausführung hängt mit der ganzen Kette Terminal — Handelsserver — Börse — Handelsserver — Terminal zusammen. Je kürzer die durchschnittliche Ausführungszeit einer synchronen Transaktion ist, desto besser.
  2. Testen asynchroner Operationen — eine Reihe von 10 asynchronenKauf-Operationenohne Bestätigung einer erfolgreichen Ausführung der Transaktion. Das ist ein Test auf die Schnelligkeit, der überprüft, wie schnell Orders an die Börse gesendet werden. Als bestes gilt das Terminal, das weniger Zeit für die Ausführung von 10 asynchronen Buy-Operationen braucht.
  3. Testen der Aktualisierung von Orders in der Markttiefe — Abmessen der Geschwindigkeit, mit welcher sich Orders in der Markttiefe ändern. Das ist eine einfache Zählung der Anzahl von Ticks (Aktualisierungen) der Markttiefe innerhalb einer Zeiteinheit. Je schneller Kurse von der Börse in das Handelsterminal eingehen, desto schneller wird die Markttiefe aktualisiert. Demzufolge je mehr Ticks innerhalb einer Sekunde in das automatisierte Handelsprogramm eingehen, desto schneller kann es auf die Änderungen im Angebot/Nachfrage auf dem Markt reagieren. Das beste Terminal ist das, in welchem die Markttiefe am schnellsten aktualisiert wird.


Testbedingungen

Die beiden Terminals sind auf einem gemieteten VPS in Moskau installiert, wie auch die Handelsserver des Otrkytie Brokerhauses. Es wurde auf einem und demselben realen Konto mit dem Symbol Si-9.6 am Terminmarkt der Moskauer Börse gehandelt.

Wir haben alle drei Tests in einem Video aufgenommen, damit man sieht, dass:

  1. die Transaktionen auf einem und demselben realen Konto,
  2. mit einem und demselben Symbol Si-9.16,
  3. auf einem und demselben PC,
  4. zur gleichen Zeit
  5. und zu den gleichen Marktbedingungen ausgeführt wurden;
  6. die Geschwindigkeit der Aktualisierung der Martktiefe wurde auf einem und demselben Symbol zur gleichen Zeit gemessen;
  7. die Netzlatenz bis zu Otkrytie-Servern betrug 2 ms.

Ergebnisse des Vergleichs der Geschwindigkeit von Transaktionen: MetaTrader 5 vs QUIK

Die Ergebnisse aller drei Tests sind in einer Tabelle zusammengefasst, detaillierte Ergebnisse zu jedem Test sind unten in einzelnen Abschnitten des Artikels beschrieben.

Test
MetaTrader 5
QUIK
Vorsprung von MT5
Durchschnittliche Zeit einer synchronen Operation
9.59 ms277.80 ms28.96 Mal
Durchschnittliche Zeit einer asynchronen Operation0.09 ms0.30 ms 3.33 Mal
Aktualisierungsgeschwindigkeit der Markttiefe
42.7 Mal pro Sekunde8.4 Mal innerhalb einer Sekunde5.08 Mal

Wie es aus der Tabelle ersichtlich ist, liegt MetaTrader 5 bei allen drei Tests mit deutlichem Abstand vorne. Sie können solche Test mithilfe angefügten Quellcodes selbst durchführen. Das Testen selbst ist auf dem Video unten zu sehen.


Vergleich der Transaktionsgeschwindigkeit im Video




Schlussfolgerung:  MetaTrader 5 führt Transaktionen bis zu 28 Mal schneller als QUIK aus

Die Messungen haben gezeigt, dass die Programmiersprache MQL5 die QLUA sowohl bei der Ausführung von Transaktionen an der Moskauer Börse, als auch bei der Untersuchung der Markttiefe überholt. Die auf MQL5 geschriebene Handelsroboter führen Berechnungen bis zu 50-600 Mal schneller durch sowie handeln bis zu 28 Mal schneller. Dabei brauchen Sie keine zusätzlichen Tools wie Connectors, DLL-Bibliotheken usw. Fertige Handelsklassen der Standardbibliothek und eine Menge von Artikeln über die Automatisierung des Tradings stehen Ihnen zur Verfügung.

Ein zuverlässiger Handelsroboter muss die Ergebnisse überprüfen, d.h. auf die Antwort vom Handelsserver warten. Die Tests haben es bewiesen, dass MetaTrader 5 viel schneller in synchronen Operationen ist. Wenn Sie asynchrone Operationen benötigen, ist das MetaTrader 5 Terminal dabei dreimal so schnell. Wenn Sie das Orderbuch analysieren möchten, können Sie wiederum vom MetaTrader 5 mit dem Vorteil eines fünfmal schnelleren Stroms von Kursen ohne Snapshots profitieren.

Die durchgeführten Tests haben gezeigt, dass die Programmiersprache MQL5 für die Erstellung schneller automatischer Handelssysteme perfekt geeignet ist. Weder Connectors noch Bibliotheken für die Beschleunigung der Berechnungen würden dem QUIK Terminal helfen, denn der Engpass ist die Ausführungszeit selbst.

Schauen wir uns langweilige, aber wichtige Testdetails an.


Detaillierte Berichte zum Vergleich der Terminals

Bei der Zeitmessung wendet sich das Programm in QLUA an den Systemtimer des Betriebssystems, der standardmäßig einen Messfehler von 10 bis 15.6 Millisekunden aufweist (am häufigsten — 15.6 ms). Deshalb haben wir die Genauigkeit der Zeitmessungen in QLUA durch die Erhöhungen der Genauigkeit des Systemtimers bis auf 1 ms verbessert. Dies wurde mithilfe des Skripts SpeedupSystemTimer.mq5 erreicht, das die Funktion timeBeginPeriod der Systembibliothek Winmm.dll aufruft.

#import "winmm.dll"
int timeBeginPeriod(uint per);
#import

void OnInit()
  {
   timeBeginPeriod(1);
  }

void OnTick()
  {
  }

Dieses Skript haben wir vor den Tests im MetaTrader 5 Terminal gestartet und DLL erlaubt, dadurch wurde der Messfehler im QUIK Terminal auf höchstens 1 Millisekunde beschränkt.

Die Programmiersprache MQL5 verfügt über die fertige Funktion GetMicrosecondCount(), aus diesem Grund sind die Messungen in MetaTrader 5 genau bis auf 1 Mikrosekunde (1 Millisekunde=1000 Mikrosekunden).

#1 Testen der Geschwindigkeit synchroner Operationen

Das Testen bestand darin, die Geschwindigkeit synchroner Operationen zu messen. D.h. jede weitere Transaktion wurde erst dann ausgeführt, als eine Bestätigung vom Handelsserver erhalten wurde, dass die vorherige Transaktion erfolgreich mit der vollen Bestätigung von der Börse durchgeführt wurde.

Zuerst wurde eine Reihe von Transaktionen im MetaTrader 5 Terminal abgewickelt, danach wurde die gleiche Reihe von Transaktionen im QUIK Terminal abgewickelt.

Der Sinn der Tests besteht darin, die durchschnittliche Zeit der 10 synchronen Buy-Operationen mit einem Lot zu messen:

  • SyncTradeTest.mq5
  • SyncTradeTest.lua

Die Zeit, die für eine synchrone Transaktion in Anspruch genommen wurde, wurde folgendermaßen gemessen:

  • In der Programmiersprache MQL5 ist die synchrone Funktion OrderSend vorhanden, und es ist einfach, die Zeit am Anfang und am Ende der Reihe zu messen.

  • Die Programmiersprache QLUA verfügt über keine synchrone Handelsfunktion, aus diesem Grund muss der Status der Transaktion separat überprüft werden. Die Anfangszeit wurde unmittelbar vor dem Aufruf von sendTransaction () mithifle der Funktion os.closck() gemessen. Die Ausführung der Transaktion wurde im integrierten Event-Handler OnOrder() bei dem ersten Aufruf in dem Moment verfolgt, als das Event über die Ausführung des Trades an der Börse eintraf. Der Unterschied zwischen diesen Events macht die Zeit aus, die für die Ausführung der Transaktion in Anspruch genommen wurde.
Die Messergebnisse zeigen, dass MetaTrader 5 bei synchronen Transaktionen bis zu 28 Mal schneller ist.


#2 Testen der Geschwindigkeit asynchroner Operationen

In diesem Test ist alles viel einfacher. Zehn Mal in Folge wird an die Börse eine Kauforderfür den Terminkontrakt Si-9.16 gesendet. Dadurch konnten wir die durchschnittliche Zeit einer asynchronen Übertragung in QLUA bis auf 1 ms / 10 = 0.10 ms messen. MetaTrader 5 weist keinen Messfehler auf, weil er einen Mikrosekunden-Timer verwendet.

Wir warten nicht auf die Ergebnisse der Transaktionen; nach dem Senden einer Order an den Handelsserver wird direkt eine weitere Order gesendet:

  • AsyncTradeTest.mq5
  • AsyncTradeTest.lua
Aus den Ergebnissen wird es ersichtlich, dass MetaTrader 5 bei der Ausführung asynchroner Transaktionen 3.33 Mal schneller ist.


#3 Testen der Aktualisierung der Markttiefe

Einige Handelsstrategien basieren auf der Analyse der Markttiefe. Die Programmiersprache MQL5 erlaubt es, Änderungen in der Markttiefe im Event-Handler OnBookEvent() zu verfolgen, und in QLUA - in OnQuote().

Die Geschwindigkeitstests für die Aktualisierung der Markttiefe wurden mithilfe der folgenden Programme durchgeführt (beigefügt als ZIP-Datei):

  • MarketUpdateTest.mq5
  • MarketUpdateTest.lua

Nach dem Start dieser Programme in zwei verschiedenen Terminals haben wir festgestellt, dass die Markttiefe im MetaTrader 5 ungefähr fünfmal häufiger aktualisiert wird. Sehr wahrscheinlich begrenzt QUIK die Frequenz der Aktualisierungen und zeigt nicht alle Veränderungen an.

Alle Quellcodes sind hier beigefügt, jeder kann diese Tests wiederholen und die Ergebnisse überprüfen.


Warum ist der Unterschied so groß?

Wir bemühen uns eifrig um die hohe Leistung und kämpfen um jedes Dutzend Mikrosekunden, indem wir die Handelsplattform Jahr für Jahr optimieren.

Dadurch ist es uns gelungen, eine überwältigende Leistung der integrierten algorithmischen Programmiersprache MQL5 sowie eine hohe Geschwindigkeit von Transaktionen zu erreichen.