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.
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. -------------------------------------------------------------
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Высокопроизводительная библиотека 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. -------------------------------------------------------------
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.
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.
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.
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
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Die hochproduktive Bibliothek iTimeSeries:
Autor: nicholishen