Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Bei einem normalen Ansatz führt das in MQL5 implementierte OOP (zusammen mit den Ressourcen des Terminals selbst) zu einer erheblichen Geschwindigkeitssteigerung.
Auf welche Arbeitsgeschwindigkeit beziehen Sie sich, die Geschwindigkeit des Programms oder die Geschwindigkeit des Schreibvorgangs?
OOP steigert die Leistung nicht. Das hat einige Vorteile - wenn zum Beispiel eine Funktion mit einigen Parametern aufgerufen wird (z.B. EMA-Berechnung), wird eine statische Variable in der Funktion verwendet, um den vorherigen EMA-Wert zu speichern. Da die Funktion den letzten Wert speichert, auf dessen Grundlage die Berechnungen durchgeführt werden, kann sie beim nächsten Aufruf nicht mit anderen Parametern (Symbol, Zeitrahmen, Glättungsperiode) aufgerufen werden. Wenn die Funktion also mit anderen Parametern aufgerufen werden muss, sollte sie mit einem anderen Namen kopiert oder eine globale Variable, die als Referenz übergeben wird, anstelle einer statischen Variable verwendet werden. Dies ist der einzige Fall, in dem es bequemer ist, ein Objekt zu verwenden - Sie laden eine Objektinstanz, setzen ihre Parameter und rufen dann die Methode ohne Parameter auf. Wenn das Objekt Methoden enthält, deren Ausführung nicht von früheren Ausführungen oder allgemein von irgendwelchen Parametern abhängt, mit denen das Objekt geladen wird, führt es zu nichts anderem als zum Verbrauch von Ressourcen.
Das tut es, das tut es, das tut es wirklich. Aber das hängt alles von der Erfahrung, der Phantasie und der Krummheit der Hände des Programmierers ab (in dieser Reihenfolge)... :)
Und selbst wenn man davon ausgeht, dass OOP (mit dem schrecklichsten Ansatz) die Laufzeit nicht oder nur unwesentlich verlängert (obwohl ich persönlich bezweifle, dass eine 10-fache Verlängerung als unbedeutend angesehen werden kann), ist es für das VERSTEHEN von Entwicklern immer noch nützlicher als alle möglichen Nachteile von OOP.
Die Sache ist die, dass MQL5, wenn es OOP enthält, irgendwie zur Entwicklung eines modularen (Unit) Ansatzes zur Programmierung beitragen wird, der in MQL4 nicht zu sehen ist (außer für Bibliotheken). Das liegt daran, dass es bequem ist, Strukturen, Klassen oder Gruppen von ihnen in separaten Dateien (Modulen) unterzubringen und sie bei Bedarf zu verwenden.
Aufgrund von Abstraktion, Kapselung, Vererbung und Polymorphismus ermöglicht die Verwendung von Klassen außerdem, die fertigen Blöcke (Module) zu debuggen und nicht über ihren Inhalt nachzudenken, um sie in der eigenen Arbeit zu verwenden.
Außerdem sollte die Verwendung von OOP den Umfang und die Bequemlichkeit der Verwendung externer DLLs und anderer Software-Tuning in Handelssystemen erhöhen.
In Verbindung mit der Verwendung von Bibliotheken wird dies das Leben der Entwickler um ein Dutzend Mal einfacher machen und auch die Entwicklung ziemlich komplexer EAs erheblich beschleunigen.
Welche Arbeitsgeschwindigkeit meinen Sie, die Geschwindigkeit, mit der das Programm läuft, oder die Geschwindigkeit, mit der es geschrieben wird?
Das tut es, das tut es, das tut es....
Wer hat Ihnen das gesagt? Das ist nicht wahr. Alles andere ist korrekt.
Wer hat Ihnen das gesagt? Das ist nicht wahr. Alles andere ist korrekt.
Ich wiederhole: Es nimmt zu, es nimmt zu, wie sehr es zunimmt. Aber das hängt alles von der Erfahrung, der Phantasie und der Krummheit der Hände des Programmierers ab (in dieser Reihenfolge)...
Vor einiger Zeit verglich ich die Initialisierungsgeschwindigkeit meines EAs. Bis auf einige kleine Details war der Programmcode derselbe (in MQL5 wurde die Migrationsbibliothek verwendet). Und es stellte sich heraus, dass die MQL5-Initialisierung im Durchschnitt 2,5 Mal schneller war.
Natürlich weiß ich, dass es kein Indikator ist, aber ich bin immer noch zuversichtlich, dass die Geschwindigkeit von MQL5 auch jetzt noch 10 Mal schneller ist, wenn man den richtigen Ansatz verwendet.
Sie können ewig streiten, aber versuchen Sie, OnTrade() oderOnChartEvent zu implementieren, und alles wird klar. Aber neben diesen Dingen gibt es noch eine Menge anderer "Goodies"...
PS
Natürlich gibt es Geschwindigkeitsprobleme mit dem Strategietester und den Indikatoren. Aber mit der Zeit werden diese Mängel von den Entwicklern des Terminals oder den Autoren der Expert Advisors beseitigt werden.
Darüber hinaus hat MQ mehr als einmal erklärt, dass die maximale Geschwindigkeit der Programmcodeausführung noch nicht verfügbar ist (soweit ich weiß)...
Erhöht... erhöht... ...singen Sie es besser als Mantra mit einer Glocke in der Hand und ziehen Sie eine Kutte an.
MQL5 ist schneller als MQL4, nicht weil es Objekte unterstützt.
Mit der Funktion GetTickCount() habe ich ähnliche Expert Advisors mit und ohne OOP getestet:
Test my_oop_ea ( mit OOP )
RJ 0 Kern 1 15:12:15 Testzeit = 115203
EO 0 Core 1 15:12:15 EURUSD,H1: 6124935 Ticks (3052 Balken) generiert innerhalb von 115203 ms (Gesamtbalken in der Historie 9199)
RP 0 Kern 1 15:12:15 Abgeschaltet
My_First_EA test ( ohne OOP )
RH 0 Kern 1 15:18:54 Testzeit = 90578
CR 0 Core 1 15:18:54 EURUSD,H1: 6124935 Ticks (3052 Balken) generiert innerhalb von 90578 ms (Gesamtbalken in der Historie 9199)
OR 0 Kern 1 15:18:54 Abgeschaltet
Der Unterschied ist gering, aber nicht zu Gunsten von OOP. Und im Falle einer Optimierung wird diese Differenz mit der Anzahl der Durchläufe multipliziert, wenn ich das richtig verstehe.
Ich habe für mich selbst Schlussfolgerungen gezogen.
Außerdem habe ich den Standard MACD Sample EA für MT5 (mit OOP) und für MT4 verglichen:
Macd Muster MT5
FO 0 Kern 1 18:03:21 Testzeit = 126016
FD 0 Core 1 18:03:21 EURUSD,M1: 6124935 Ticks (181129 Balken) erzeugt innerhalb von 126016 ms (Gesamtbalken in der Historie 545615)
Macd Muster MT4
18:12:52 2010.06.30 23:59 MACD Beispiel EURUSD,M1: Zeittests = 64406
Die Ergebnisse sind verblüffend - MT5 und MQL mit OOP sind nicht nur Ressourcenfresser, sondern auch Zeitfresser.
Wenn Sie verschiedene MT4- und MT5-Plattformen testen, können Sie keine spezifischen Schlussfolgerungen über OOP ziehen. Die Unterschiede in den Ergebnissen sind zu 90 % auf die unterschiedliche Systemarchitektur zurückzuführen.
Dieser Artikel wurde unter Verwendung der oben genannten Methode vervollständigt. Außerdem wurde der Code-Optimierer in MQL5 vorerst deaktiviert - wir arbeiten an der Feinabstimmung. Wenn sie aktiviert ist, werden die Ergebnisse sofort um ein Vielfaches besser.
Gestern wurde ein Artikel veröffentlicht, der die Geschwindigkeit von MQL4 und MQL5 vergleicht - ich empfehle Ihnen, ihn zu lesen:
Eine Funktion mit einem weiteren Parameter ist deutlich langsamer. Liegt es wirklich nur an den Parametern?