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

 
Alexander_K2:

Ja! Ich vergaß zu sagen.

Zustände werden als eine Reihe von Daten betrachtet, die ein Teilchen nahezu vollständig charakterisieren. D.h. es handelt sich um einen Datensatz, einfach ausgedrückt - ein Stichprobenvolumen, mit seinen Merkmalen - Kurtosis, Asymmetrie, Nicht-Entropie, usw.

D.h. mit der Zuversicht von R.Feynman kann man behaupten, dass, den Umfang der Probe fÃ?r das konkrete Paar richtig bestimmt habend, die charakteristischen mittleren Werte dieser Koeffizienten fÃ?r diese Probe auf die Geschichte berechnet, kann man voraussagen, dass, den bestimmten Satz der Parameter zur Zeit habend, in einem bestimmten Zeitintervall, das System zum Zustand mit seinen stationÃ?ren Parametern Ã?bergehen wird.

Das ist es, was ich von diesem Thema erwarte. Wenn Sie Hilfe bei der Bestimmung der richtigen Stichprobengröße benötigen, schreiben Sie mir, ich werde versuchen zu helfen.

Angenommen, es gibt einen autoregressiven Prozess, d. h. die Abhängigkeit der gegenwärtigen Zustände von den vergangenen Zuständen.

Wie wählt man die richtige Kombination von Inkrementen mit unterschiedlichen Verzögerungen aus, um das System vorherzusagen? Sollen die Verzögerungen konstant sein oder im Laufe der Zeit variieren, und wenn ja, wie kann man dies bestimmen (abgesehen von der banalen Aufzählung)?

denn wenn es eine solche Kombination von Inkrementen gibt, die das Ziel zuverlässig vorhersagt, dann sollte man keine Probleme haben, NS darauf zu trainieren.

 
Maxim Dmitrievsky:

dann diese Frage - nehmen wir an, es gibt einen Prozess der Autoregression, d.h. die Abhängigkeit der gegenwärtigen Zustände von den vergangenen Zuständen

Wie kann eine Reihe von Inkrementen mit unterschiedlichen Verzögerungen korrekt ausgewählt werden, um das System vorherzusagen? Sollen die Verzögerungen konstant sein oder sich mit der Zeit ändern, und wenn sie sich ändern sollten, wie kann dies bestimmt werden (außer durch eine triviale Aufzählung)?

Hier gibt es einen Punkt, der offensichtlich Schwierigkeiten bereitet.

Der Datensatz ist nicht zeitlich begrenzt.

Dies ist ein entscheidender Punkt!

Wenn wir also mit der Zeit arbeiten, sollten wir verstehen, dass wir es in einem streng definierten Zeitintervall mit einem anderen Datensatz zu tun haben. Dies ist der Grundstein des Stolpersteins. Der Versuch, mit der gleichen Stichprobe spezifischer Werte zu arbeiten, führt zu einem "fließenden" Fenster von Beobachtungen im Laufe der Zeit.

Ich kann dieses Problem auf 2 Arten umgehen:

1. ausschließlich mit einem bestimmten Satz von Ticks (Stichprobenvolumen) zu arbeiten - es ist für ein bestimmtes Paar ein für allemal dasselbe. Aber diese Menge ist durch unterschiedliche Zeitpunkte ihrer Entstehung gekennzeichnet, und man kann keine Vorhersagen machen.

2. ausschließlich mit einem konstanten Zeitfenster zu arbeiten. In diesem Fall handelt es sich im Gegenteil um ein fließendes Volumen, in dem Zeckenproben genommen werden. Wie lässt sich diese Schwierigkeit vermeiden? Die Antwort ist die Eingabe von "Pseudo-Zuständen", d. h. die Auffüllung der Datenmenge im Beobachtungsfenster auf den erforderlichen Stichprobenumfang. Ich tue dies, indem ich die Arbeit in exponentieller Zeitskala erzwinge. D.h. ich lese Daten in einem streng definierten Zeitfenster durch den Exponenten und es ist nicht wichtig, ob es ein wirklich angekommener Tick war oder nicht. In diesem Fall ist es möglich, Prognosen zu erstellen . Ich bezweifle nur, dass exponentielle Intervalle die richtige Lösung sind. Feynman arbeitete mit einheitlichen Intervallen.

Wenn Sie sich für einen Weg entscheiden, ist das Vorhersageproblem im Prinzip nicht lösbar.

Weg 2 ist lösbar, aber es gibt keine solchen Archive.

In dieser Sache stecke ich fest und tippe bisher dummerweise meine eigenen Archive. Ich sehe leider keinen anderen Weg...

 
Alexander_K2:

2. ausschließlich mit einem festen Zeitfenster zu arbeiten. In diesem Fall hingegen haben wir es mit einem schwebenden Probenvolumen zu tun. Wie können wir diese Schwierigkeit umgehen? Die Antwort ist die Einführung so genannter "Pseudo-Zustände", d. h. die Anzahl der Daten im Beobachtungsfenster wird auf den erforderlichen Stichprobenumfang erhöht. Ich tue dies, indem ich die Arbeit in exponentieller Zeitskala erzwinge. D.h. ich lese Daten in einem streng definierten Zeitfenster durch den Exponenten und es ist nicht wichtig, ob es ein wirklich angekommener Tick war oder nicht. In diesem Fall ist es möglich, Prognosen zu erstellen . Ich bezweifle nur, dass exponentielle Intervalle die richtige Lösung sind. Feynman arbeitete mit einheitlichen Intervallen.

In der Tat sind exponentielle Intervalle genau die richtige Lösung für das Problem des konstanten Fensters, soweit ich es verstehe (sollte). Sagen wir, die Trainingsstichprobe besteht aus 1000 Balken (Ticks), was auch immer. Natürlich ändern sich bei einem gleitenden Fenster die Muster und der NS muss neu trainiert werden. Aber wenn unsere Stichprobe eine Kombination von Inkrementen enthält, deren Verzögerung exponentiell zunimmt... dann frage ich mich, wie viele verschiedene Verzögerungen das System insgesamt benötigt, um nicht nur aus dem Fenster herauszugehen (sagen wir, Verzögerung 1500), sondern auch, um alle möglichen Zustände für das gleiche Fenster zu beschreiben, das jetzt nur noch gleitet.

Vielleicht bin ich ja dumm :D, aber es ist nicht schwer, es zu versuchen. Die Frage ist jedoch, wann man aufhören sollte.

 
Maxim Dmitrievsky:

Das sind eigentlich die exponentiellen Intervalle als Lösung für das Problem des konstanten Fensters, und soweit ich es verstehe, ist es die richtige Lösung (sollte es sein). Nehmen wir an, die Trainingsstichprobe besteht aus 1000 Balken (Ticks), was auch immer. Natürlich ändern sich bei einem gleitenden Fenster die Muster und der NS muss neu trainiert werden. Aber wenn unsere Stichprobe eine Kombination von Inkrementen enthält, deren Verzögerung exponentiell zunimmt... dann frage ich mich, wie viele verschiedene Verzögerungen das System insgesamt benötigt, um nicht nur aus dem Fenster herauszugehen (sagen wir, Verzögerung 1500), sondern auch, um alle möglichen Zustände für das gleiche Fenster zu beschreiben, das jetzt nur noch gleitet.

Vielleicht bin ich dumm :D, aber es ist nicht schwer, es zu versuchen. Die Frage ist jedoch, wann man aufhören sollte.

Und man muss aufhören, wenn das System von einem instabilen in einen stabilen Zustand übergeht.

Wenn zum Beispiel zu einem bestimmten Zeitpunkt ein Anstieg der Nichtentropie zu beobachten ist (ein Trend hat begonnen), dann wird die Nichtentropie in einem bestimmten Zeitintervall zu ihrem charakteristischen Mittelwert zurückkehren, der aus der Geschichte berechnet wurde.

Wie lässt sich diese Übergangszeitspanne bestimmen? Das ist die eigentliche Vorhersage, da gibt es nichts zu beschönigen. Das ist es, was ich von neuronalen Netzen erwarte und ich lese diesen Thread :)

 
Alexander_K2:

Und es ist notwendig, anzuhalten, wenn das System von einem instabilen in einen stabilen Zustand übergeht.

D.h. wenn zu einem bestimmten Zeitpunkt ein Anstieg der Nicht-Entropie zu verzeichnen ist (ein Trend hat begonnen), dann wird die Nicht-Entropie nach einem bestimmten Zeitintervall zu ihrem charakteristischen Mittelwert zurückkehren, der aus der Geschichte berechnet wurde.

Wie lässt sich diese Übergangszeitspanne bestimmen? Das ist die eigentliche Vorhersage, da gibt es nichts zu beschönigen. Das ist es, was ich von neuronalen Netzen erwarte und diesen Thread lese :)

Ah, das Problem war ganz trivial - das Modell in exponentiellen Schritten zu trainieren und ein Spread-Diagramm zwischen vorhergesagten und aktuellen Preisen zu erstellen, um zu sehen, wie die Abweichungen vom Mittelwert (Residuen) verteilt sind

ich werde es nächste Woche tun :) ersetzen Sie einfach das Wort Inentropie durch das Wort Varianz

 
Maxim Dmitrievsky:

Die Aufgabe war recht trivial - das Modell auf exponentiellen Inkrementen zu trainieren und die Spanne zwischen vorhergesagten und aktuellen Preisen aufzuzeichnen, um zu sehen, wie die Abweichungen vom Durchschnitt (Residuen) verteilt sind

Ich werde es nächste Woche tun :)

Ich freue mich darauf, Maxim. Im Ernst - ich bin sicher, dass es möglich ist. Vergessen Sie nur nicht, das Signal zu öffnen - ich werde der erste sein, der sich anmeldet.

Nur 2 Dinge können auf dem Markt wirklich funktionieren - neuronale Netze und Theoretiker. Alle anderen sind Abschaum, Betrüger und leere Taschen als Ergebnis.

 
Alexander_K2:

Ich freue mich darauf, Maxim. Im Ernst - ich bin sicher, dass es möglich ist. Vergessen Sie nur nicht, das Signal zu öffnen - ich werde der erste sein, der sich anmeldet.

Nur 2 Dinge können auf dem Markt wirklich funktionieren - neuronale Netze und ein Theoretiker. Alles andere ist Schrott, Flickschusterei und leere Taschen als Ergebnis.

Ich werde Ihnen zeigen, Bot als ein Beispiel, können Sie es später optimieren :D Ich werde es als ein Indikator auf den ersten für Klarheit zu machen

 

Fortsetzung folgt -https://www.mql5.com/ru/forum/86386/page643#comment_6472393

Dr. Trader:

Ich habe ein weiteres interessantes Paket zum Herausfiltern von Prädiktoren gefunden. Er wird FSelector genannt. Es bietet etwa ein Dutzend Methoden zur Sichtung von Prädiktoren, einschließlich Entropie.


Die Funktion zur Sichtung von Prädiktoren random.forest.importance() zeigte bei einigen Tests recht gute Ergebnisse. Es ist ungünstig, dass seiner Meinung nach alle Prädiktoren zumindest ein wenig wichtig sind. Aber wenn man z. B. die durchschnittliche Wichtigkeit berechnet und nur die Prädiktoren nimmt, die über dem Durchschnitt liegen, erhält man sehr gute Ergebnisse.

library(FSelector)

load("ALL_cod.RData")
trainTable <- Rat_DF1
PREDICTOR_COLUMNS_SEQ <- 1:27
TARGET_COLUMN_ID      <- 29

targetFormula <- as.simple.formula(colnames(trainTable)[PREDICTOR_COLUMNS_SEQ], colnames(trainTable)[TARGET_COLUMN_ID])

rfImportance <- random.forest.importance(targetFormula, trainTable)
colnames(trainTable)[PREDICTOR_COLUMNS_SEQ][rfImportance[[1]] > mean(rfImportance[[1]])]
 
Dr. Trader:

Nahm nur eurusd m1 für etwa Januar dieses Jahres, und ein 1 Tag Schiebefenster.

Wenn die Entropie ansteigt, sollte man logischerweise den Handel aussetzen und bei niedriger Entropie weiter handeln. Aber hier haben wir einen Trend bei niedriger Entropie aus irgendeinem Grund, obwohl es einfacher ist, bei flachen handeln, ist es ungewöhnlich.

(der Tippfehler im angehängten Code wurde korrigiert, laden Sie ihn erneut herunter, wenn Sie bereits Zeit hatten, den alten Code herunterzuladen)

Es macht keinen Sinn, Tests mit dem Anfangskurs durchzuführen, denn es ist offensichtlich, dass die Reihe nicht stationär ist.

Interessant (nicht für mich - ich verwende es immer) sind auch Diagramme für Zeitreihen log(p/p-1).

Was ist da drin? Und natürlich wird eine Skala auf der Ordinatenachse benötigt.

 
Dr. Trader:

Ich habe ein weiteres interessantes Paket zum Herausfiltern von Prädiktoren gefunden. Er wird FSelector genannt. Es bietet etwa ein Dutzend Methoden zur Sichtung von Prädiktoren, einschließlich Entropie.


Das CORElearn-Paket enthält auch ein sehr interessantes, umfangreiches Paket von Relief-Tools.

In meinen langen Übungen zu diesem Thema habe ich nichts Besseres gefunden als die Prädiktorenauswahlfunktionen in caret, insbesondere saf.

All dies wird jedoch nur funktionieren, wenn die Vorauswahl der Prädiktoren für die Zielvariable auf einer "Muss-Basis" erfolgt.

Ich wiederhole dies noch einmal am Beispiel von zwei Klassen:

  • Ein Teil des Prädiktors muss sich auf eine Klasse und der andere Teil auf eine andere Klasse beziehen. Die Schnittmenge dieser beiden Teile der Prädiktoren ergibt den Klassifizierungsfehler, der nicht überwunden werden kann.



PS.

Sie haben die Hauptkomponenten besprochen und den Fehler gesehen, dass der Algorithmus ohne Lehrer ist.

Hier ist mit einem Lehrer:

sgpls( x, y, K, eta, scale.x=TRUE,
        eps=1 e-5, denom.eps=1 e-20, zero.eps=1 e-5, maxstep=100,
        br=TRUE, ftype='iden' )
Arguments

x       Matrix of predictors.
y       Vector of class indices.
K       Number of hidden components.
eta     Thresholding parameter. eta should be between 0 and 1.
scale.x Scale predictors by dividing each predictor variable by its sample standard deviation?
eps     An effective zero for change in estimates. Default is 1 e-5.
denom.eps       An effective zero for denominators. Default is 1 e-20.
zero.eps        An effective zero for success probabilities. Default is 1 e-5.
maxstep Maximum number of Newton-Raphson iterations. Default is 100.
br      Apply Firth's bias reduction procedure?
ftype   Type of Firth's bias reduction procedure. Alternatives are "iden" (the approximated version) or "hat" (the original version). Default is "iden".

Das spls-Paket

Grund der Beschwerde: