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
Sehr interessanter Artikel. Der Hauptvorteil besteht darin, ein echtes Beispiel für OpenCL-Code in Aktion zu sehen. Es ist sehr nützlich, wenn man anfängt, OpenCL selbst zu verwenden, um solche Beispiele zu haben. Danke dafür.
Der Vergleich bestätigt zwar den erwarteten enormen Gewinn durch den Einsatz von GPUs, aber es handelt sich um eine sehr spezifische Strategie, bei der es überhaupt keinen Zusammenhang zwischen den Geschäften gibt. Es ist wahrscheinlich selten, eine solche Strategie im realen Handel zu sehen. Ich befürchte, wenn Sie anfangen, Beziehungen zwischen den Trades einzuführen (ein Maximum an offenen Trades, nur 1 Trade zu einer Zeit, Lot Erhöhung oder Verringerung nach einem Gewinner/Looser, etc...), wird die Komplexität des OpenCL-Codes schnell dazu führen, dass die Geschwindigkeitsvorteile verloren gehen. (Ich habe es nicht selbst ausprobiert, ich könnte mich also irren).
Weniger wichtig ist, dass für einen angemessenen Vergleich der "virtuelle" Algorithmus, der mit GPUs verwendet wird, auch ohne GPUs verwendet werden sollte, um den Nettogewinn durch die GPUs zu messen. Wie im Artikel beschrieben, vergleichen Sie nicht nur CPU und GPU (seriell und parallel), sondern auch den"Strategy Tester" mit dem "virtuellen".
Guten Tag.
Können Sie mir eine ungefähre Möglichkeit nennen, wie man in Ihrem Code die Eröffnung von jeweils nur einer Transaktion zum Kauf und auch nur einer zum Verkauf erreichen kann.
Guten Tag.
Können Sie mir eine ungefähre Möglichkeit nennen, wie man in Ihrem Code die Eröffnung von jeweils nur einer Transaktion zum Kauf und auch nur einer zum Verkauf erreichen kann.
Erstens müssen Sie im Kernel tester_step ein weiteres Argument hinzufügen, das es Ihnen ermöglicht, den Zeitpunkt des Geschäftsabschlusses (es kann der Index des M1-Balkens sein, an dem das Geschäft abgeschlossen wurde, oder der Zeitpunkt des Haltens der Position, ausgedrückt in der Anzahl der M1-Balken ) mit Indexierung zu erhalten, wie im Ergebnispuffer __global double *Res.
Je nachdem, ob sich Ihre Frage auf einen einzelnen Test oder eine Optimierung bezieht:
1. Testen. In der Schleife, in der der Gesamtgewinn zusammengefasst wird, müssen Sie Bedingungen hinzufügen, die eine Überschneidung der offenen Positionen anhand der Schlusszeiten ausschließen (die von dem abgeschlossenen tester_step zurückgegeben werden).
2. Optimierung. Hier muss anstelle des Kerns find_patterns_opt, der die Gewinne zusammenfasst, find_patterns verwendet werden, der einfach die Einstiegspunkte zurückgibt. Unter Berücksichtigung der Bedingungen, dass es nicht zulässig ist, mehr als einen Handel gleichzeitig zu eröffnen, müssen wir den Gewinn im mql5-Code zusammenfassen. Dies kann jedoch einige Zeit in Anspruch nehmen (Sie sollten es ausprobieren), denn in diesem Fall wird das, was parallel ausgeführt wurde, sequentiell ausgeführt (die Anzahl der Optimierungsdurchläufe wird mit der Optimierungstiefe multipliziert). Eine weitere mögliche Kompromissoption ist das Hinzufügen eines Kerns, der den Gewinn für einen Durchgang zählt (unter Berücksichtigung der Bedingung der Anzahl der gleichzeitig geöffneten Positionen), aber aus meiner eigenen Praxis kann ich sagen, dass es eine schlechte Idee ist, "schwere" Kernel laufen zu lassen. Idealerweise sollte man sich bemühen, den Kernel-Code so einfach wie möglich zu halten und so viele Kernel wie möglich einzusetzen.
Zunächst müssen wir im Kernel tester_step ein weiteres Argument hinzufügen, das es uns ermöglicht, den Zeitpunkt der Schließung eines Geschäfts (es kann der Index von Takt M1 sein, an dem das Geschäft geschlossen wurde, oder der Zeitpunkt des Haltens einer Position, ausgedrückt in der Anzahl der Takte von M1) mit Indexierung zu erhalten, wie im Ergebnispuffer __global double *Res.
Je nachdem, ob sich Ihre Frage auf einen einzelnen Test oder eine Optimierung bezieht:
1. Testen. In der Schleife, in der der Gesamtgewinn zusammengefasst wird, müssen Sie Bedingungen hinzufügen, die eine Überschneidung der offenen Positionen anhand der Schlusszeiten ausschließen (die von dem abgeschlossenen tester_step zurückgegeben werden).
2. Optimierung. Hier muss anstelle des Kerns find_patterns_opt, der die Gewinne zusammenfasst, find_patterns verwendet werden, der einfach die Einstiegspunkte zurückgibt. Unter Berücksichtigung der Bedingungen, dass es nicht zulässig ist, mehr als einen Handel gleichzeitig zu eröffnen, müssen wir den Gewinn im mql5-Code zusammenfassen. Dies kann jedoch einige Zeit in Anspruch nehmen (Sie sollten es ausprobieren), denn in diesem Fall wird das, was parallel ausgeführt wurde, sequentiell ausgeführt (die Anzahl der Optimierungsdurchläufe wird mit der Optimierungstiefe multipliziert). Eine weitere mögliche Kompromissoption ist das Hinzufügen eines Kerns, der den Gewinn für einen Durchgang zählt (unter Berücksichtigung der Bedingung der Anzahl der gleichzeitig geöffneten Positionen), aber aus meiner eigenen Praxis kann ich sagen, dass es eine schlechte Idee ist, "schwere" Kernel laufen zu lassen. Idealerweise sollte man sich bemühen, den Kernel-Code so einfach wie möglich zu halten und so viele Kernel wie möglich einzusetzen.
Schönen guten Tag.
Vielen Dank für Ihre schnelle Antwort. Ich war vor allem an der Antwort zur Optimierung interessiert, da ich dachte, dass ich den Code teilweise in mql schreiben muss, um ihn in der Praxis anzuwenden. Vielen Dank für den Artikel, denn es gibt nichts Vergleichbares! Auch wenn wir tester_step (und tester_step_opt) ein wenig modifizieren, indem wir die Zeitbedingung p>open to buy hinzufügen (dh. if(j>=maxbar || (TimeM1[j]>=tclose && p>open)) und für den Verkauf if(j>=maxbar || (TimeM1[j]>=tclose && p<open))), erhalten Sie eine Strategie für den Optionshandel.
...Ich werde auch ein paar Worte zu meinem vorherigen Kommentar über die Optionsstrategie hinzufügen. Hier müssen wir die Variable Option Expiration Time hinzufügen (gleichzeitig werden StopLoss und TakeProfit für Optionen während der Optimierung nicht benötigt), also ändern wir den Code in tester_opt_step wie folgt:
Guten Tag! Beim Ausführen der OpenCL-Optimierung für USDRUB gemäß Ihrem Artikel bin ich auf ein solches Problem gestoßen - die Ergebnisse der Optimierung sind immer positiv, immer ein Gewinn, d.h. es scheint, dass es einen Überlauf für eine Variable vom Typ int gibt, in die das Ergebnis generiert wird, während für EURUSD die Optimierung korrekt funktioniert. Vielleicht handelt es sich auch um fünf Ziffern für USDRUB. Könnten Sie mir bitte sagen, wie ich dieses Problem beheben kann?
In dem Artikel schreiben Sie:
В нашем случае функция atomic_inc() для начала запрещает доступ другим задачам к ячейке Count[0], затем увеличивает её значение на единицу, а предыдущее возвращает в виде результата.
So wie ich es verstehe, funktioniert diese Funktion nur mit einem Array des Typs int, aber wenn ich ein Array eines anderen Typs habe, zum Beispiel ushort, was soll ich tun?