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
Und noch eine Frage, wie lange dauert es, die Daten für die Videokarte zu übertragen/vorzubereiten, ich habe die Meinung gehört, dass OpenCL für die Videokarte nicht sinnvoll für den realen Handel zu verwenden ist, weil es Zeitverluste bei der Datenübertragung zur Verarbeitung gibt, ist das wirklich so?
Abbildung 8 zeigt die Ausgabe der Zeitintervalle zwischen den Kontrollpunkten im Programmcode auf der Terminalkonsole. Ich werde sie hier duplizieren:
Wo:
Das Laden von Daten in das Array (Buffering in der Abbildung) dauerte 26,6 ms (vielleicht musste ich etwas laden oder synchronisieren), das Laden der gleichen Daten in den Speicher der Grafikkarte dauerte 8,7 ms.
Ja, wenn man große Daten viele Male hin- und herschiebt, kann man viel Zeit verlieren. Daher müssen wir den Algorithmus so aufbauen, dass das Kopieren in den/aus dem GPU-Speicher minimiert wird. Ich möchte den Code in naher Zukunft für Tests mit der Tick-Historie modifizieren. Das Volumen wird dann größer sein. Es wird interessant sein, die Kopierzeit dort zu sehen.
Bislang ist der teuerste Prozess die Initialisierung. Sie dauert 316 ms. Aber das kann einmal gemacht werden, wenn wir von nun an die gleichen Kernel verwenden.
Abbildung 8 zeigt die Ausgabe der Zeitintervalle zwischen den Kontrollpunkten im Programmcode auf der Terminalkonsole. Ich werde sie hier duplizieren:
Wo:
Das Laden von Daten in das Array (Buffering in der Abbildung) dauerte 26,6 ms (vielleicht musste ich etwas laden oder synchronisieren), das Laden der gleichen Daten in den Speicher der Grafikkarte dauerte 8,7 ms.
Ja, wenn man große Daten viele Male hin- und herschiebt, kann man viel Zeit verlieren. Daher müssen wir den Algorithmus so aufbauen, dass das Kopieren in den/aus dem GPU-Speicher minimiert wird. Ich möchte den Code in naher Zukunft für Tests mit der Tick-Historie modifizieren. Das Volumen wird dann größer sein. Es wird interessant sein, die Kopierzeit dort zu sehen.
Bislang ist der teuerste Prozess die Initialisierung. Sie dauert 316 ms. Aber er kann einmal durchgeführt werden, wenn wir die gleichen Kernel verwenden.
Danke, sehr informativ! Aber wie ist das im Vergleich zu einem Prozessor?
Auf jeden Fall kann es für viele Strategien, die nach Taktöffnung arbeiten, nützlich sein, wenn Sie komplexe Berechnungen durchführen müssen, zum Beispiel die automatische Anpassung an den Markt, sowohl bei der Initialisierung als auch einmal am Tag.
Danke, sehr informativ! Aber wie ist das im Vergleich zu einem Prozessor?
Wie auch immer, für viele Strategien, die auf der Bar-Eröffnung arbeiten, kann es nützlich sein, wenn Sie komplexe Berechnungen machen müssen, zum Beispiel automatische Anpassung an den Markt, sowohl bei der Initialisierung und einmal am Tag.
Am Ende des Artikels finden Sie Tabellen mit Leistungsvergleichen. Der EA wird im Strategietester optimiert, dann werden die erzielten Ergebnisse und die aufgewendete Zeit mit den Ergebnissen des OpenCL-Testers verglichen. Punkt 3, "Leistungsvergleich".
Bei einer Testtiefe von 9 Monaten im Modus "OHLC on M1" schafft der OpenCL-Tester höchstens 1 Sekunde bei der Optimierung von zwei Parametern mit je 100 Schritten (10000 Durchläufe).
Eine solche Optimierung kann mindestens jede Minute für 60 Paare durchgeführt werden, was bereits als automatische Anpassung an den Markt bezeichnet werden kann, wenn ich richtig verstehe, was Sie meinen.
Am Ende des Artikels finden Sie Tabellen mit Leistungsvergleichen. Der EA wird im Strategietester optimiert, dann werden die erzielten Ergebnisse und die benötigte Zeit mit den Ergebnissen des OpenCL-Testers verglichen. Punkt 3, "Leistungsvergleich".
Bei einer Testtiefe von 9 Monaten im Modus "OHLC on M1" schafft der OpenCL-Tester höchstens 1 Sekunde bei der Optimierung von zwei Parametern mit je 100 Schritten (10000 Durchläufe).
Eine solche Optimierung kann mindestens jede Minute für 60 Paare durchgeführt werden, was bereits als automatische Anpassung an den Markt bezeichnet werden kann, wenn ich richtig verstehe, was Sie meinen.
Ich habe die Tabelle gesehen, die Frage ist in einer Iteration (das Ergebnis eines Durchlaufs) sowohl für die CPU als auch für die GPU, da es eine Datenaufbereitung und -übertragung gibt. Allerdings ist dies offensichtlich ein nützliches Thema, es ist schade, dass nicht jeder kann es aufgrund seiner Einfachheit zu verwenden.
Liege ich richtig, dass bei einer GPU-Farm mit mehreren Karten die Berechnungen auf allen Karten durchgeführt werden?
MT5 unterstützt leider nur ein GPU-Gerät.
MT5 unterstützt leider nur ein GPU-Gerät.
Es können mehrere Geräte verwendet werden.
Es ist Sache des Entwicklers zu entscheiden, welche Geräte zu verwenden und wie sie zu verwenden.
Es können mehrere Geräte verwendet werden.
Es ist Sache des Entwicklers zu entscheiden, welche Geräte zu verwenden und wie sie zu verwenden.
Wenn ich mich nicht irre, haben Sie früher geschrieben, dass immer nur ein Gerät verwendet werden kann - welches, das können Sie wählen, ja, hat sich etwas geändert?
Wir sprechen nicht über Agenten, sie, wie ich verstehe, kann jeder ein Gerät verwenden, nur wieder ist es nicht klar, wie man einen Agenten an ein bestimmtes Gerät zu binden ...Sehr interessanter Artikel!
Cluster-AnalyseLeider bietet Ihre Lösung keine "genetische Optimierung".
Aber diese könnte leicht hinzugefügt werden, sogar eine, die die Möglichkeiten und Vorteile des Benutzers im Vergleich zu MQ5 übersteigt. Mq5 hat nur eine Option - genetisch oder alles oder langsam.
Alles, was Sie tun müssen, ist
1) eine Tabelle der Ergebnisse mit ihren Parameterkombinationen erstellen,
2) sie nach den Ergebnissen sortieren,
3) in z.B. 5 oder (benutzerdefinierte n) Abschnitte,
4) wählen Sie dann zufällig Parameterkombinationen aus jedem Abschnitt aus,
5) ändern Sie einen Wert für diese ausgewählten Parameterkombinationen,
6) prüfen Sie, ob diese Kombination bereits getestet wurde (dann kehren Sie zu 4 zurück)
7) testen Sie.
8) Erneut bei 1) beginnen, es sei denn, ein Abbruchkriterium wurde erreicht.
Aus dem schlechtesten Abschnitt wird nur eine Kombination ausgewählt, aus dem nächstbesten zwei, dann drei usw.
Die Dichte der Optimierungen ist also im besten Abschnitt am höchsten, und da alle Abschnitte im Verhältnis zueinander immer etwa gleich groß sind (1/5 oder 1/n), verschieben sich die Abschnittsgrenzen, was zu einer zusätzlichen Erhöhung der Dichte bei den besten Ergebnissen führt.
Sie könnten auch den Benutzer bestimmen lassen: Soll eine andere Kombination von Abschnitt zu Abschnitt getestet werden - z. B. 1, 2, 3, 4, 5 im 5. oberen Abschnitt - oder zwei - 1, 3, 5, 7, 9 - oder noch mehr, um die Dichte im besten Abschnitt weiter zu erhöhen?
Vielleicht könnten Sie etwas sehr Interessantes und Nützliches einführen?
Wenn Sie eine Clusteranalyse der Parameterkombinationen in jedem Abschnitt der Tabelle durchführen, könnten Sie die Kombinationen nicht (nur) zufällig auswählen, sondern selektiv:
a) in der Mitte zwischen den besten Werten zweier Cluster - um das Tal dazwischen zu ergründen
b) in der Mitte zwischen zwei möglichst unterschiedlichen Kombinationen ein und desselben Clusters - um einen neuen besten Wert, eine neue Spitze zu finden.
Dies wird wahrscheinlich die Qualität der Ergebnisse der genetischen Optimierung erheblich verbessern. Man müsste es ausprobieren!
Sehr interessanter Artikel!
Cluster-AnalyseLeider bietet Ihre Lösung keine "genetische Optimierung".
Aber Sie können sie leicht hinzufügen, auch wenn sie die Möglichkeiten und Vorteile des Benutzers im Vergleich zu MQ5 übersteigen. Mq5 hat nur eine Option, genetisch, voll oder langsam.
Alles, was Sie tun müssen, ist.
1) Erstellen Sie eine Ergebnistabelle mit den Parameterkombinationen,
2) Sortieren Sie sie nach Ergebnissen,
3) Teilen Sie sie in z.B. 5 oder (benutzerdefinierte n) Abschnitte,
4) Wählen Sie dann zufällig Parameterkombinationen aus jedem Abschnitt aus,
5) Ändern Sie den Wert für diese ausgewählten Parameterkombinationen,
6) Prüfen Sie, ob diese Kombination bereits getestet wurde (dann gehen Sie zurück zu 4)
7) Testen Sie.
8) Von 1) neu beginnen, wenn das Abbruchkriterium nicht erreicht wird.
Aus dem schlechtesten Abschnitt wird nur eine Kombination ausgewählt, aus dem besten zwei, dann drei usw.
Die Dichte der Optimierungen ist also im besten Abschnitt am höchsten, und da alle Abschnitte im Verhältnis zueinander immer gleich groß sind (1/5 oder 1/n), verschieben sich die Abschnittsgrenzen, was zu einer zusätzlichen Erhöhung der Dichte in den besten Ergebnissen führt.
Darüber hinaus könnte auch der Benutzer ermittelt werden: ob eine weitere Schnitt-zu-Schnitt-Kombination - d.h. 1, 2, 3, 4, 5 im oberen 5. Schnitt - oder zwei - 1, 3, 5, 7, 9 - oder noch mehr, getestet werden würden, um die Dichte im besten Schnitt weiter zu erhöhen.
Vielleicht könntest du etwas sehr Interessantes und Nützliches präsentieren?
Wenn du auch eine Clusteranalyse der Parameterkombinationen in jedem Abschnitt der Tabelle durchführst, kannst du nicht nur (nur) zufällige Kombinationen auswählen, sondern auch gezielt:
a) in der Mitte zwischen den besten Werten zweier Cluster - das Tal dazwischen erfassen
b) in der Mitte zwischen zwei maximal unterschiedlichen Kombinationen desselben Clusters - einen neuen besten Wert, eine neue Spitze, finden.
Dies würde wahrscheinlich eine deutliche Verbesserung der Probieren Sie es einfach mal aus!
PS: Ergänzend zu meinem Vorschlag möchten Sie noch anmerken, dass Sie auch eine Darstellung der Ergebnisse in Form von Clustern entwickeln könnten?
Der Strategietester zeigt immer nur die Ergebnisse des gesamten Bereichs einer Variablen an, es wäre viel informativer, wenn man z.B. sieht, dass es drei Cluster gibt und für jedes Cluster den jeweiligen Bestwert (je größer, desto besser), deren Streuung (je größer, desto besser) und die Statistik der einzelnen Parameter (Max., Min., Mitte, Standardabweichung (je größer, desto besser). So lässt sich leichter erkennen, wo die robustesten Parameterkombinationen zu erwarten sind und wo die besten Werte eher zufällig sein könnten.
PS: Könnten Sie zusätzlich zu meinem Vorschlag hinzufügen, dass Sie auch eine Darstellung der Ergebnisse in Form von Clustern entwickeln könnten?
Strategy Tester zeigt immer nur die Ergebnisse des gesamten Bereichs der Variablen an, es wäre viel informativer, wenn man z. B. drei Cluster und für jeden Cluster den besten Wert (je größer, desto besser), seine Varianz (je größer, desto besser) und die Statistiken der einzelnen Parameter (Maximum, Minimum, Mittelwert, Standardabweichung (je größer, desto besser) sehen könnte. Dies erleichtert es, die zuverlässigsten Parameterkombinationen und die besten Zufallswerte zu finden.
PPS: Durch Zufall habe ich diesen Artikel gefunden: "Optimizing OpenCL Kernels
for Iterative Statistical Applications on GPUs", der zu meinem Vorschlag passen würde :)
Zufällig habe ich diesen Artikel gefunden: "Optimizing OpenCL Kernels
for Iterative Statistical Applications on GPUs", der zu meinem Vorschlag passen würde :).
Toller Artikel!!!
Herzlichen Glückwunsch, @decanium !