Testen des neuen MQL5-Compilers für x64-Plattformen - 2 bis 10 Mal schnellere Berechnungen! - Seite 2

 
Yury Kulikov:
Zum Beispiel die Kommunikation zwischen den Terminals.

Nun, wenn man es so dreht, dann ist die DLL natürlich eine nützliche Funktion...

Aber ich persönlich habe für diese Aufgabe entschieden, dass ich nicht wirklich eine DLL dafür brauche. Im Moment denke ich über einen EA nach, der Kurse von einem Maklerunternehmen nimmt und Signale an ein anderes sendet, und das hat nicht einmal MetaTrader. (DucaCopi, übrigens, ich frage mich, ob MetaQuotes mit diesem ehrwürdigen Broker einverstanden ist?)

Ich dachte in Richtung DLL. Aber ich habe beschlossen, dass gemeinsame Dateien viel sicherer und vernünftiger sind. Lassen Sie MetaTrader Signale in die Datei schreiben. Und lassen Sie sie von einem anderen MetaTrader (oder JForex oder jemand anderem) lesen und ausführen.

 

Übrigens, ich habe über Array-Referenzen nachgedacht...

Renat, ich möchte einen Vorschlag machen:

Da wir eine Standardbibliothek haben, sollten wir eine Variante der Funktion OnCalculate() mit dem folgenden Prototyp hinzufügen:

intOnCalculate(constint rates_total,//size of input timeseries
constint prev_calculated,// beim vorherigen Aufruf verarbeitete Balken
const CiTime* ptTime,// Zeit
const CiOpen* poOpen,// Öffnen
const CiHigh* phHigh,// Hoch
const CiLow* plLow,// Niedrig
const CiClose* pcClose,// Schließen
const CiTickVolume* ptvTickVolume,// Tick-Volumen
const CiRealVolume* prvRealVolume,// Reales Volumen
const CiSpread* psSpread// Spreizung
);

?

Meiner Meinung nach würde dies nur sehr kleine Änderungen in MetaTrader erfordern, aber auf der anderen Seite stellt es einfach Zeiger auf Arrays zur Verfügung, die ohne Kopieren an Handler-Klassen übergeben werden können. Und die Idee der Standardbibliothek selbst wird populär gemacht.

 

Erste Ergebnisse des Leistungsvergleichs zwischen dem alten und dem neuen Compiler am Beispiel eines wirklich großen Projekts (~20.000 Zeilen Quellcode).

Ergebnisse der Laufzeit des mit der alten Version des Compilers kompilierten Programms (4 Durchläufe):

2015.05.02 13:48:46.641 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.443 sec. 116 MB RAM used.
2015.05.02 13:48:27.879 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.427 sec. 116 MB RAM used.
2015.05.02 13:48:12.067 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.287 sec. 116 MB RAM used.
2015.05.02 13:47:49.719 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 8.751 sec. 116 MB RAM used.

Laufzeitergebnisse für ein mit der neuen Compiler-Version kompiliertes Programm (4 Durchläufe):

2015.05.02 13:54:18.638 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.475 sec. 116 MB RAM used.
2015.05.02 13:54:01.995 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.616 sec. 116 MB RAM used.
2015.05.02 13:53:43.853 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.444 sec. 116 MB RAM used.
2015.05.02 13:53:25.809 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.147 sec. 116 MB RAM used.

*Der zweite und der nächste Durchlauf des Programms wurden mit erwärmtem Cache durchgeführt - wie man sieht, erhöht der erwärmte Cache die Produktivität um 15-30%.

Wie Sie sehen können, sind die Ergebnisse mit dem neuen Compiler besser: Es dauerte ~6,4 Sekunden, um über 20000 Geschäfte und Aufträge im ersten Durchlauf zu parsen, und ~5,4 Sekunden im zweiten, d.h. ein Leistungsgewinn von 15-20%.

Die Leistungsverbesserung hätte noch größer sein können, aber die meiste Zeit wird durch Systemfunktionsaufrufe verbraucht.

 

Der neue Compiler fand keine Fehler in dem Projekt, das insgesamt mehr als 20.000 Zeilen Quellcode umfasst. Dies ist ein hervorragendes Ergebnis, wenn man bedenkt, dass dieses Projekt für die alte Version des Compilers erstellt wurde.

Der neue Compiler erzeugte jedoch mehrere Warnmeldungen im Zusammenhang mit der falschen Anzeige von Dateipfaden (Schrägstrich-Escaping-Vorschrift):

Dies ist eine berechtigte Forderung, die mit ein paar geringfügigen Änderungen leicht erfüllt werden kann.

Daraus können wir schließen, dass selbst große Projekte, die in MQL5 geschrieben wurden, für den neuen Compiler bereit sind und der Umstieg für professionelle Entwickler kein Problem darstellen wird.

 
Sergey Eremin:
...
Ich erhalte"Codegenerierungsfehler 1 1".

...

Ich erhalte auch diesen Fehler.
 
Der Hauptgewinn liegt in der Mathematik und in Ihren eigenen Berechnungen.

Wenn der Großteil der Arbeit in Systemaufrufen steckt, ist die Beschleunigung gering.
 
Renat Fatkhullin:
Der Hauptgewinn liegt in der Mathematik und den eigenen Berechnungen.

Wenn der Großteil der Arbeit in Systemaufrufen steckt, ist die Beschleunigung gering.

Es ist immer noch gut, weil Sie Ihre eigene Umgebung mit minimalen Systemfunktionsaufrufen erstellen können.

(Kopieren Sie die Umgebung einmal in Ihre Klassen und arbeiten Sie direkt mit ihr).

 
George Merts:

Nun, wenn man es so dreht, dann ist die DLL natürlich eine nützliche Funktion...

Aber ich persönlich habe für diese Aufgabe entschieden, dass ich nicht wirklich eine DLL dafür brauche. Im Moment denke ich über einen EA nach, der Kurse von einem Maklerunternehmen nimmt und Signale an ein anderes sendet, und das hat nicht einmal MetaTrader. (DucaCopi, übrigens, ich frage mich, ob MetaQuotes mit diesem ehrwürdigen Broker einverstanden ist?)

Gedanke an dll. Aber ich habe beschlossen, dass es sicherer und sinnvoller ist, gemeinsame Dateien zu verwenden. Lassen Sie MetaTrader Signale in die Datei schreiben. Und ein anderer MetaTrader (oder JForex, oder jemand anderes) - lassen Sie sie lesen und ausführen.

Es gibt eine Option mit benannten Kanälen, aber es ist ein Zwischenserver erforderlich,

Im Forum gibt es Beispiele dafür, wie man das macht.

 
Yury Kulikov:
Zum Beispiel die Kommunikation zwischen den Terminals.

Alexandr Bryzgalov:

Es gibt eine Option mit benannten Kanälen, aber Sie benötigen einen Zwischenserver,

Im Forum gibt es Beispiele dafür, wie das geht.

Sie brauchen keine benannten Kanäle! Wir warten darauf, dass die SQL-Unterstützung hinzugefügt wird. Austausch von Daten über eine Tabelle. SQL ist eine eingebaute Unterstützung für Multithreading-Systeme mit hoher Belastung.
 
Vasiliy Sokolov:

Keine Notwendigkeit für benannte Kanäle! Wartet darauf, SQL-Unterstützung hinzuzufügen. Daten über eine Tabelle austauschen. SQL ist eine integrierte Unterstützung für Multithreading-Systeme mit hoher Belastung.
Ich habe nur über das gesprochen, was wir haben, und wenn wir Sql hinzufügen, können wir auch darüber sprechen)
Grund der Beschwerde: