Bibliotheken: Die hochproduktive Bibliothek iTimeSeries

 

Die hochproduktive Bibliothek iTimeSeries:

Diese Bibliothek bietet einen blitzschnellen Zugang zu Timeserien für die Realisierung der gewöhnlichen Methoden MQL4 (zum Beispiel, iBarShift) bei den empfindlichen Anwendungen auf MQL5.

Autor: nicholishen

 

Gute Arbeit.

Allerdings ist Ihr Vergleich der iBarshift Leistung ein bisschen schwierig, der Zweck einer 100.000 Iterationen Schleife ist es, einen gemittelten und nutzbaren Zeitwert (in ms) zu erhalten. Ihr iBarShift() benötigt die Initialisierung eines Objekts und diese Initialisierung wird nicht in Ihrer Schleife gezählt, sondern außerhalb. Wie auch immer, es ist sicher schneller, alle Werte im Speicher zu halten, als sie jedes Mal zu berechnen.

 

BTW, iBarShiftFast, das in den Referenz-Benchmarks erwähnt wird, kann so verbessert werden, dass es so einfach ist wie iBarShiftFast:

(Bars(symbol, timeframe, time, D'2100.01.01') - 1)

Die Verbesserung besteht darin, SeriesInfoInteger komplett zu eliminieren und ein konstantes Datum in ferner Zukunft zu verwenden.

 
Alain Verleyen:

Gute Arbeit.

Allerdings ist Ihr Vergleich der iBarshift Leistung ein bisschen schwierig, der Zweck einer 100.000 Iterationen Schleife ist es, einen gemittelten und nutzbaren Zeitwert (in ms) zu erhalten. Ihr iBarShift() benötigt die Initialisierung eines Objekts und diese Initialisierung wird nicht in Ihrer Schleife gezählt, sondern außerhalb. Wie auch immer, es ist sicher schneller, alle Werte im Speicher zu halten, als sie jedes Mal zu berechnen.


Vielen Dank! :)


Das ist ein guter Punkt, und ja, die "Performance Mode"-Demo initialisiert außerhalb der Schleife, aber der direkte Aufruf von iBarShift im zweiten Benchmark instanziiert ein Objekt, weshalb es länger dauert, die 100.000 Zyklen abzuschließen... weil es ein statisches globales Objekt instanziieren und initialisieren muss, bevor es für Daten zurückgerufen wird - daher ist der zweite Test ein fairer Vergleich. Der "Leistungsmodus" ist ebenfalls ein fairer Vergleich, wenn man ihn als reinen Datenzugriff innerhalb einer Hot-Path-Operation betrachtet.

Übrigens habe ich gerade einige Tests durchgeführt und möchte dies für alle, die dies lesen, noch einmal präzisieren: Diese Methode ist nur dann schneller, wenn Sie die Datenaktualisierung und den Datenaufruf in getrennte Pfade aufteilen ODER wenn Sie eine beliebige Kombination von Zeitreihenfunktionsaufrufen mehr als insgesamt 300 Mal pro Balken aufrufen. Mit anderen Worten, die Marke von 300 Iterationen ist der Break-even-Punkt. Wenn Sie nicht mehr als 300 Mal pro Balken aufrufen und keinen "Hot-Path" verwenden, sind Sie wahrscheinlich besser dran, wenn Sie andere Methoden verwenden.

 
iBarShift benchmark based on 100000 runs.
=======================================================
iBarShift(Alain Verleyen) for 2017.04.11 19:56:37 is 45723 in 338.868 milliseconds.
-------------------------------------------------------------
iBarShift3 for 2017.04.11 19:56:37 is 45723 in 0.492 milliseconds.
-------------------------------------------------------------
iBarShift(direct function call) for 2017.04.11 19:56:37 is 45723 in 38.712 milliseconds.
-------------------------------------------------------------
iBar.Shift(performance mode) for 2017.04.11 19:56:37 is 45723 in 3.403 milliseconds.
-------------------------------------------------------------
Dateien:
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Высокопроизводительная библиотека iTimeSeries

fxsaber, 2017.05.25 13:23

iBarShift benchmark based on 100000 runs.
=======================================================
iBarShift(Alain Verleyen) for 2017.04.11 19:56:37 is 45723 in 338.868 milliseconds.
-------------------------------------------------------------
iBarShift3 for 2017.04.11 19:56:37 is 45723 in 0.492 milliseconds.
-------------------------------------------------------------
iBarShift(direct function call) for 2017.04.11 19:56:37 is 45723 in 38.712 milliseconds.
-------------------------------------------------------------
iBar.Shift(performance mode) for 2017.04.11 19:56:37 is 45723 in 3.403 milliseconds.
-------------------------------------------------------------
 
fxsaber:
Ernsthaft? Das ist nur ein Trick.
 
Alain Verleyen:
Ernsthaft? Das ist nur ein Trick.

Dieser Leistungstest wurde vom Autor der Bibliothek selbst geschrieben.

Das Beispiel mit ein wenig Humor zeigt, dass der Test ein wenig anders sein sollte. + eine andere Implementierung der Testfunktion.

 
fxsaber :

Dieser Leistungstest wurde vom Autor der Bibliothek geschrieben.

Beispiel mit ein wenig Humor zeigt, dass der Test etwas anders sein sollte. + Andere Funktionen zur Überprüfung der Implementierung.


Sie haben Recht. Der Test wurde entworfen, um den Benchmark Alain zu reflektieren. Hier ist ein Beispiel mit einer Zeitverschiebung, um die Verwendung in der realen Welt für diesen Algorithmus genauer zu simulieren.

https://i.imgtc.com/rhYzQFj.png

Dateien:
 
nicholishen:


Sie haben Recht. Der Test wurde so konzipiert, dass er den Benchmark Alain widerspiegelt. Hier ist ein Beispiel mit einer Zeitverschiebung, um den Einsatz dieses Algorithmus in der realen Welt genauer zu simulieren.

Eine hohe Leistung ist (nur) für einen Tester/Optimierer erforderlich.

Bitte zeigen Sie das vergleichende Ergebnis Ihrer Bibliothek im Tester/Optimierer.

 
fxsaber:

Eine hohe Leistung wird (nur) für Tester/Optimierer benötigt.

Bitte zeigen Sie das Vergleichsergebnis Ihrer Bibliothek im Tester/Optimierer.


...auch für komplexe Konstruktionen benötigt - aus vielen Objekten