Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 321

 
Maxim Dmitrievsky:

https://www.mql5.com/ru/code/127

Es ist nur ein Fehler im Code, ich denke, der Indikator ist falsch normalisiert

Das ist richtig, es wird nur auf ein anderes Intervall als [0;1] normalisiert.


Der Einfachheit halber können Sie dieselbe CalcRegression-Funktion wie bisher verwenden (beachten Sie jedoch, dass b bereits mit umgekehrtem Vorzeichen* zurückgegeben wird, d. h. Sie brauchen das Vorzeichen nicht ein zweites Mal zu ändern). Ermitteln Sie experimentell, mit welchem Wert Sie das Ergebnis multiplizieren müssen, um es im Bereich [-0,5;0,5] zu erhalten. Dann addieren Sie +0,5, um die Mitte von 0 auf 0,5 zu verschieben.


*Diese Formel ergibt b mit dem richtigen Vorzeichen, wenn die ältesten Preise den höchsten Index in der Matrix haben.

 
Dr. Trader:

Alles ist richtig, es wird nur nicht in [0;1], sondern in einem anderen Intervall normalisiert.


Der Einfachheit halber können Sie dieselbe CalcRegression-Funktion wie bisher verwenden (beachten Sie jedoch, dass b bereits mit umgekehrtem Vorzeichen zurückgegeben wird, d. h. Sie brauchen das Vorzeichen nicht ein zweites Mal zu ändern). Ermitteln Sie experimentell, mit welchem Wert Sie das Ergebnis multiplizieren müssen, um es im Bereich [-0,5;0,5] zu erhalten. Und dann addieren Sie +0,5, um den Mittelwert von 0 auf 0,5 zu verschieben.


für verschiedene Zeitrahmen benötigen wir unterschiedliche Maximal- und Minimalwerte, das ist nicht sehr praktisch, es scheint mir, dass die Normalisierung auf ein größeres historisches Intervall das Beste ist
 
Dr. Trader:

*Diese Formel ergibt b mit dem richtigen Vorzeichen, wenn die ältesten Preise den höchsten Index in der Matrix haben.


Fügen Sie dem Indikator einfach einen weiteren normalisierten Puffer über dem bestehenden Puffer hinzu :)
 

Auch die Regressionssteigung könnte interessant sein. Backtest und Forward. Kurzum, es sieht so aus, als ob man mit dieser Logik arbeiten und mit verschiedenen Prädiktoren experimentieren kann.


Dateien:
 
Maxim Dmitrievsky:

Auch die Regressionssteigung könnte interessant sein. Backtest und Forward. Kurz gesagt, es sieht so aus, als ob man mit dieser Logik arbeiten und mit verschiedenen Prädiktoren experimentieren kann.


Danke für den Code, ich habe ihn getestet. Mir ging es schlechter. Aber ich habe nur 1 Monat für die Optimierung genommen statt eines Jahres, ich wollte es schnell überprüfen. Bei Fronttest habe ich gesehen, wie EA zunächst normal ist, dann langsam anfängt, das Gleichgewicht abzuflachen und dann langsamer wird. Es lebt noch ein wenig von neuen Daten, nicht schlecht.

Ich würde dies ändern

1) double a3 = regr[0]; - Null-Index ist die zeitlich älteste Angabe. Der letzte (neueste) Balken wäre hier 49 (da 50 genommen wurde), er ist besser. Letztere kann jedoch überzogen werden, so dass 48 besser ist. Es ist auch zu prüfen, ob der Indikator überzogen ist.
Das Gleiche gilt für den rsi: Sie haben die neuere Version entfernt. Es ist sinnvoll zu versuchen, diejenige mit dem Index Null zu entfernen, da diese am veraltetsten ist.

2) Die dritte Version von Yuri's Expert Advisor hat die RNN-Funktion mit vier Parametern, so dass sie auch 3 rx und einen Trend annehmen kann. Im Allgemeinen kann die Funktion durch neue Parameter ergänzt werden, wie im Artikel von Yuri beschrieben, aber jeder +1 Parameter verdoppelt die Anzahl der Koeffizienten.

3) Ich mag keine Stopps und Starts, ihre optimalen Werte ändern sich ständig bei neuen Bars. Um genau zu sein, gibt es keine optimalen Werte, sondern nur bestimmte "günstige" Werte für einen EA in einem bestimmten Zeitintervall. Außerdem können Makler Candlesticks vor Stopps zeichnen. Ich würde versuchen, bei jedem neuen Balken eine Vorhersage zu treffen und die Transaktion bis zum nächsten Balken und der nächsten Vorhersage einfach in dieser Richtung zu halten und dort gegebenenfalls umzukehren.

4)

   int handle=iRSI(_Symbol,0,9,PRICE_OPEN);
   double rsi[30];
   CopyBuffer(handle,0,0,28,rsi);

Handle sollte in OnInit initialisiert werden, und nicht jedes Mal bei der Erstellung eines EA. Außerdem hat das Array 30 Elemente, von denen nur 28 kopiert werden. D.h., auf die Indizes 28 und 29 kann nicht zugegriffen werden (niemand tut das jemals, aber man weiß ja nie), sie sind nicht gefüllt.

 
Dr. Trader:


Danke für den Code, ich habe ihn ausprobiert. Ich habe eine schlimmere. Aber ich habe nur 1 Monat für die Optimierung genommen statt eines Jahres, ich wollte es schnell überprüfen. Der Fronttest zeigt, dass mein Expert Advisor zunächst gut ist, dann beginnt er, den Saldo abzuflachen, und dann läuft er herunter. Es lebt noch ein wenig von neuen Daten, nicht schlecht.

Ich würde dies ändern

1) double a3 = regr[0]; - Null-Index ist die zeitlich älteste Angabe. Der jüngste (neue) Balken hier wäre 49 (da 50 genommen wurde), er ist besser. Letztere kann jedoch überzogen werden, so dass 48 besser ist. Es ist auch zu prüfen, ob der Indikator überzogen ist.
Das Gleiche gilt für rsi, Sie haben die neuere Version entfernt. Es ist sinnvoll zu versuchen, die älteste Datei mit dem Index Null zu entfernen.

2) In der dritten Version von Yuri's EA die RNN-Funktion enthält vier Parameter, können Sie sowohl 3 rsi und Trend mit ihm. Im Allgemeinen kann die Funktion mit neuen Parametern erweitert werden, wie in Yuris Artikel beschrieben, aber jeder +1 Parameter verdoppelt die Anzahl der Koeffizienten.

3) Ich mag keine Stopps und Starts, ihre optimalen Werte ändern sich ständig bei neuen Bars. Um genau zu sein, gibt es keine optimalen Werte, sondern nur bestimmte "günstige" Werte für einen EA in einem bestimmten Zeitintervall. Außerdem können Makler Candlesticks vor Stopps zeichnen. Ich würde versuchen, bei jedem neuen Balken eine Vorhersage zu treffen und die Transaktion bis zum nächsten Balken und der nächsten Vorhersage einfach in dieser Richtung zu halten und dort gegebenenfalls umzukehren.

4)

Handle sollte in OnInit initialisiert werden, und nicht jedes Mal bei der Erstellung eines EA. Außerdem hat das Array 30 Elemente, von denen nur 28 kopiert werden. D.h., auf die Indizes 28 und 29 kann nicht zugegriffen werden (niemand wird es tun, aber er wird es vielleicht wollen), sie sind nicht gefüllt.


Hmm, ja? Ich dachte, die Null beim Kopieren des Puffers gibt den allerersten Wert zurück.

https://www.mql5.com/ru/docs/series/copybuffer

Ich fügte Trailing anstelle von sl und so weiter hinzu, die Ergebnisse sind nicht viel besser

was den Griff angeht, ja, für die Regression habe ich ihn in das Init eingebaut, für Radsy habe ich es vergessen

Dort muss ich den Forward mit dem höchsten Gewinnfaktor auswählen, und der Backtest sollte ungefähr gleich sein, so dass das Raster mit diesen Parametern in der Lage ist, eine anständige Vorhersage zu machen. Wenn ich mir die Statistiken ansehe, sehe ich nicht, warum ich es verpasst habe, ich sehe nicht, warum ich es verpasst habe, und ich sehe nicht, warum.

Und RNN3 liefert aus irgendeinem Grund viel weniger Signale.

Ich verstehe immer noch nicht ganz, ob es besser für die Normalisierungsfunktion ist, 5000 Bars Array statt 50 zu nehmen, so dass es mehr korrekte Max und Min von Anfang an finden würde und nicht aktualisieren sie im Laufe der Zeit, weil am Anfang der Prüfung werden wir nicht ganz korrekt normalisierte Werte für die Eingabe erhalten, aber später mehr und mehr genau

Außerdem würde ich die Diagramme noch detrendieren und verdaulichere Werte für das Raster einspeisen. Ich bin mir noch nicht sicher, wie man z. B. die Regressionssteigung und die Autokorrelation bei einer stationären Reihe verbessern kann, da ich mich mit Ökonometrie nicht besonders gut auskenne, ich schaue mir jetzt Videoclips an

Und ich möchte später auch dieses RNN mit einem regulären MLP vergleichen, aber der Vergleich wird nicht ganz korrekt sein, da der MLP etwas in die Ausgabe einspeisen muss. Eine andere Möglichkeit ist, ein Komitee von 3 RNN zu bilden und deren Ergebnisse in ein RNN :D oder in ein Faltungs-NS einzuspeisen. Es wird sehr lange dauern, bis die Optimierung selbst durch Claud abgeschlossen ist. Noch besser wäre es, 3 RNN in den MLP einzuspeisen und ihn mit Preisinkrementen auszugeben, wodurch theoretisch ein Übertraining vermieden werden könnte. D.h. RNN wird die Rolle eines Autoencoders spielen http://cyberleninka.ru/article/n/avtoenkoder-podhod-k-ponizheniyu-razmernosti-vektornogo-prostranstva-s-kontroliruemoy-poterey-informatsii


 
Maxim Dmitrievsky:




Ein Zitat zu finden, das sich auf ARIMA anwenden lässt, ist fast unmöglich. Aber das war das Ende des Vortrags.

WAS IST MIT GARCH? Sie ist vielversprechender und wird in einem Zeitrahmen von weniger als einem Tag sehr häufig eingesetzt, selbst beim Hochfrequenzhandel.

 
SanSanych Fomenko:


Ein Angebot zu finden, auf das ARIMA angewendet werden kann, ist fast unmöglich. Aber das war das Ende des Vortrags.

WAS IST MIT GARCH? Sie ist vielversprechender und wird in einem Zeitrahmen von weniger als einem Tag sehr häufig eingesetzt, selbst beim Hochfrequenzhandel.


Ich habe gerade erst angefangen, mich mit diesen Dingen vertraut zu machen, ich habe noch nicht einmal experimentiert. Ich habe nur von Müll gehört :)

Was halten Sie von der Verwendung von RNN als Autoencoder für MLP?

Soweit ich verstanden habe, ist das rekurrente Netz ein Autoencoder des Typs mit einer Reihe logischer Regeln:


 
Maxim Dmitrievsky:

Wie wäre es mit der Subtraktion von Trends und der anschließenden Anwendung der Autoregression auf diese Werte, um sie dann zusammen mit der Regressionssteigung in den NS zu übertragen? Ich habe gerade erst begonnen, mich mit diesen Dingen vertraut zu machen, ich habe noch nicht einmal experimentiert

experimentieren Sie am besten gleich los!

Sie werden viel Zeit und unnötiges Wissen sparen.

 
SanSanych Fomenko:


Ein Zitat zu finden, das sich auf ARIMA anwenden lässt, ist fast unmöglich. Aber das war das Ende des Vortrags.

WAS IST MIT GARCH? Sie ist viel vielversprechender und wird in einem Zeitrahmen von weniger als einem Tag weithin verwendet, sogar für den Hochfrequenzhandel.

Ich habe es auch gesehen. Imho ist das nicht unser Fachgebiet.