PLO - Seite 2

 
Interesting:

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?

 
Integer:

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.

 
Integer:

Welche Arbeitsgeschwindigkeit meinen Sie, die Geschwindigkeit, mit der das Programm läuft, oder die Geschwindigkeit, mit der es geschrieben wird?

Beides. Die Details über die Entwicklungsgeschwindigkeit sind oben geschrieben (natürlich macht das alles Sinn, wenn Sie etwas Erfahrung in der Entwicklung und Verwendung von Klassen haben)...
 
Interesting:

Das tut es, das tut es, das tut es....

Wer hat Ihnen das gesagt? Das ist nicht wahr. Alles andere ist korrekt.

 
Integer:

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... Man muss es nur noch mit einer Glocke in der Hand und in eine Soutane gekleidet zur Melodie eines Mantras singen. MQL5 ist schneller als MQL4, nicht weil es Objekte unterstützt.
 
Integer:
Erhöht... erhöht... ...singen Sie es besser als Mantra mit einer Glocke in der Hand und ziehen Sie eine Kutte an.

Integer:
MQL5 ist schneller als MQL4, nicht weil es Objekte unterstützt.
Aber in den meisten Fällen ist es trotzdem schneller. Meiner Meinung nach ist es nicht angebracht, MQL5 mit MQL4 (oder einer anderen Programmiersprache) in Bezug auf die Geschwindigkeit der Arbeit mit Objekten zu vergleichen.
 

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:

MQL5 Analysis of Moving Averages Performance ist veröffentlicht worden:

Seitdem der erste einfache gleitende Durchschnittsindikator entwickelt wurde, sind viele verschiedene Indikatoren erschienen. Viele von ihnen beruhen auf einem ähnlichen Prinzip oder verwenden bei ihren Berechnungen bestimmte Methoden der Preisreihenverarbeitung. Die Frage nach der Berechnungsgeschwindigkeit solcher Indikatoren und der Optimalität der dabei verwendeten Algorithmen bleibt jedoch häufig unbeantwortet. In diesem Artikel werden alle möglichen Optionen für die Verwendung gleitender Durchschnitte beschrieben und eine vergleichende Analyse der einzelnen Optionen vorgenommen.

Autor: Sergej

 


Eine Funktion mit einem weiteren Parameter ist deutlich langsamer. Liegt es wirklich nur an den Parametern?

Dateien:
test.mq5  2 kb