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

 
SanSanych Fomenko:
Die Sache mit den "Objekten" ist in R viel komplizierter als in vielen anderen Programmiersprachen.
Die Objekte unterscheiden sich nicht, nur die Funktionen str, plot, summary und ähnliche sind vielfach überladen, jeder Typ hat seine eigene Implementierung
 
Alexey Burnakov:
Ich verstehe nicht ganz, warum das so lange dauert. Wie lautete die optim_var_number? Sollte innerhalb von 10 liegen. Stellen Sie ihn auf 1200 Sekunden ein und es sollte etwas sein.

Ich habe sehr viele Prädiktoren (9602), deshalb dauert es so lange. Sie sind für 2015 von eurusd d1 genommen, alle Arten von Preisen, Zeiten und Indikatoren gibt. Ich bin noch nicht aus d1 herausgekommen, so dass die Anzahl der Trainingsbeispiele nur 250+ beträgt, gemessen an der Anzahl der Handelstage in einem Jahr. Keine Auslassungen.

optim_var_number = 0.8662363

Dateien:
trainData.zip  14378 kb
 
Dr. Trader:

Ich habe sehr viele Prädiktoren (9602), deshalb dauert es so lange. Sie sind für 2015 von eurusd d1 genommen, alle Arten von Preisen, Zeiten und Indikatoren gibt. Ich bin noch nicht aus d1 herausgekommen, so dass die Anzahl der Trainingsbeispiele nur 250+ beträgt, gemessen an der Anzahl der Handelstage in einem Jahr. Keine Auslassungen.

optim_var_number = 0.8662363

Ich werde mit deinem Set herumspielen. Alles sollte fliegen.
 
SanSanych Fomenko:

In der letzten Spalte steht in der ersten Spalte, dass, wenn man nur PC1 nimmt, 0,9761 der Variabilität erklärt wird (kumulativer Anteil), wenn man ZWEI Komponenten nimmt - PC1 und PC2 - dann wird 0,99996 erklärt, usw.

PC1 PC2 PC3 PC4 PC5

Standardabweichung 2,2092 0,34555 0,01057 0,008382 0,004236

Anteil der Varianz 0,9761 0,02388 0,00002 0,000010 0,000000

Kumulierter Anteil 0,9761 0,99996 0,99998 1,000000 1,000000

Es stellte sich heraus, dass es ein ziemliches Durcheinander war - diese Methode funktioniert nur, wenn man mit allen möglichen Komponenten arbeitet. Die Funktion prcomp hat einen Parameter "tol", der standardmäßig NULL ist. Es kann jedoch ein beliebiger Wert zwischen 0 und 1 zugewiesen werden, um die Anzahl der gefundenen Komponenten zu reduzieren. Es funktioniert folgendermaßen: Bei der Suche nach einer neuen Komponente wird sdev der ersten Komponente genommen und mit tol multipliziert. Wenn sdev der neuen Komponente unter dieses Produkt fällt, werden keine neuen Komponenten erzeugt. Wenn zum Beispiel tol = 0,1 ist, werden alle Komponenten mit sdev <0,22 verworfen, so dass nur die beiden Hauptkomponenten übrig bleiben. Wenn tol=0,003 ist, bleiben nur Komponenten mit sdev > 0,0066276 übrig, d.h. nur vier. Wenn tol=NULL (Standard) wird die Funktion eine maximale Anzahl von Komponenten erzeugen, aber das dauert zu lange, daher möchte ich diesen Prozess verkürzen. Wenn ich tol verwende, funktioniert alles schneller und es gibt weniger Komponenten, aber in diesem Fall geht es kaputt. Sie wird irgendwie nur auf der Grundlage der gefundenen Komponenten berechnet. Der kumulative Anteil der zuletzt gefundenen Komponente wird immer 1 sein. Selbst wenn statt Tausender nur 2 Komponenten gefunden werden, ändert sich die kumulative Ausbreitung der zweiten Komponente auf 1 (z. B. von 0,1, wenn alle Komponenten generiert werden) und folglich erhöht sich auch die kumulative Ausbreitung von PC1. Es ist möglich, dasssich der kumulative Anteil beim Herausfiltern der Prädiktorenebenfalls nicht korrekt verändert.

Wenn Sie also ernsthaft mit y-aware pca arbeiten, sollten Sie Ihre eigene Funktion schreiben, um die erklärte Variabilität zu berechnen.

 
Dr. Trader:

Es hat sich herausgestellt, dass diese Methode nur funktioniert, wenn man mit allen möglichen Komponenten arbeitet. Die Funktion prcomp hat einen Parameter "tol", der standardmäßig NULL ist. Sie können jedoch einen beliebigen Wert zwischen 0 und 1 einstellen, um die Anzahl der gefundenen Komponenten zu verringern. Es funktioniert wie folgt: Bei der Suche nach einer neuen Komponente wird sdev der ersten Komponente genommen und mit tol multipliziert. Sobald sdev der neuen Komponente unter dieses Produkt fällt, werden keine neuen Komponenten mehr erzeugt. Wenn zum Beispiel tol = 0,1 ist, werden alle Komponenten mit sdev <0,22 verworfen, so dass nur die beiden Hauptkomponenten übrig bleiben. Wenn tol=0,003 ist, bleiben nur Komponenten mit sdev > 0,0066276 übrig, d.h. nur vier. Wenn tol=NULL (Standard) wird die Funktion eine maximale Anzahl von Komponenten erzeugen, aber das dauert zu lange, daher möchte ich diesen Prozess verkürzen. Wenn ich tol verwende, funktioniert alles schneller und es gibt weniger Komponenten, aber in diesem Fall geht es kaputt. Sie wird nur auf der Grundlage der gefundenen Komponenten berechnet. Der kumulative Anteil der zuletzt gefundenen Komponente wird immer 1 sein. Selbst wenn statt Tausender nur 2 Komponenten gefunden werden, ändert sich die kumulative Ausbreitung der zweiten Komponente auf 1 (z. B. von 0,1, wenn alle Komponenten generiert werden) und folglich erhöht sich auch die kumulative Ausbreitung von PC1. Es ist möglich, dasssich der kumulative Anteil beim Herausfiltern der Prädiktorenebenfalls falsch verändert.

Man sollte sich also nicht auf den kumulativen Anteil verlassen. Wenn Sie ernsthaft mit y-fähigen pca arbeiten, sollten Sie eine eigene Funktion schreiben, um die erklärte Variabilität zu berechnen.

Das ist eine interessante Idee, nicht umsonst habe ich Sie dazu gedrängt, sich das mal anzusehen.
 
Dr. Trader:

Ich habe sehr viele Prädiktoren (9602), deshalb dauert es so lange. Sie sind für 2015 von eurusd d1 genommen, alle Arten von Preisen, Zeiten und Indikatoren gibt. Ich bin noch nicht aus d1 herausgekommen, so dass die Anzahl der Trainingsbeispiele nur 250+ beträgt, gemessen an der Anzahl der Handelstage in einem Jahr. Keine Auslassungen.

optim_var_number = 0.8662363

Ich habe mir Ihr Set angesehen. Entweder verstehe ich etwas nicht, z. B. dass nicht alle Variablen eingegeben werden, oder Sie haben einen großen Fehler gemacht. Sie haben eine Menge von Rohpreisen, zum Beispiel 1,1354 (MA und andere). Das ist nicht möglich, da es sich um völlig instationäre Daten handelt. Alle Daten sollten DIFFERENTE oder oszillierende Indikatoren und omnidirektional sein. Die Suche nach Abhängigkeiten in solchen Daten ist eine völlig sinnlose Aufgabe.
 

Richtig, ich vergaß, Sie sagten ja bereits, dass die Daten speziell aufbereitet werden müssen. Ich habe die Rohdaten übernommen. Es gibt auch Oszillatoren unter den Indikatoren, ich werde versuchen, nur sie zu nehmen.

Übrigens funktioniert das PCA-Modell auch mit solchen Daten, aber es erfordert viel Zentrierung, Skalierung und eine gewisse Drehung der Quelldaten. Für die Neuronik ist es einfacher, sie braucht nur eine Normalisierung der Daten in [0...1].

 
Dr. Trader:

Richtig, ich vergaß, Sie sagten ja bereits, dass die Daten speziell aufbereitet werden müssen. Ich habe die Rohdaten übernommen. Es gibt auch Oszillatoren unter den Indikatoren, ich werde versuchen, nur sie zu nehmen.

Übrigens funktioniert das PCA-Modell auch mit solchen Daten, aber es erfordert viel Zentrierung, Skalierung und eine gewisse Drehung der Quelldaten. Für die Neuronik ist es einfacher, sie braucht nur eine Normalisierung der Daten in [0...1].

Nein, Sie verstehen definitiv nicht die Bedeutung der Nicht-Stationarität. Es spielt keine Rolle, ob es sich um ein NS- oder lineares Modell oder um mein Modell handelt, wenn Ihre Daten nicht stationär sind, sind die gefundenen Abhängigkeiten garantiert nicht außerhalb der Stichprobe zu finden. Alle Daten, die Sie in Form von Rohpreis, MA(Rohpreis), Bar Opening(Rohpreis) usw. haben, müssen aus dem Modell entfernt werden. Sie müssen die Differenz zum letzten bekannten Preis nehmen.

Eine Skalierung in ein Intervall ist hier nicht möglich.

 
Alexey Burnakov:

Bei nicht-stationären Daten ist gewährleistet, dass die gefundenen Abhängigkeiten nicht außerhalb der Stichprobe auftreten.

Es gibt nur eine interessante Nuance, die Zweifel an der Angemessenheit der Wiedergabe solcher Daten (Abweichungen von früheren Werten) aufkommen lässt

1) wenn wir zum Beispiel einen Preis haben,

2) wir erzeugen seine Differenz

3) Wir nehmen zwei Segmente von Unterschieden, die von der Struktur her sehr nahe beieinander liegen (lassen Sie sie euklidisch sein)

4) diese Bereiche gehören zu fast 100 % zu einem Cluster in RF oder denselben Neuronen und werden als identische Situationen betrachtet

5) Diese beiden Abschnitte (Differenzen) werden dann wieder auf die Ausgangspreise reduziert, d. h. kumuliert

Und wir sehen, dass diese Abschnitte völlig unterschiedlich sind, oft tendiert ein Abschnitt nach oben und der andere nach unten, d.h. es gibt keine Ähnlichkeit, während der Algorithmus denkt, dass es sich um identische Abschnitte handelt...

Was denken Sie darüber, Alexey? Ihre Kommentare sind für einen Mann mit Erfahrung interessant.

 
mytarmailS:

Es gibt nur eine interessante Nuance, die Zweifel an der Angemessenheit der Wiedergabe solcher Daten aufkommen lässt (Unterschiede zum vorherigen Wert)

1) wenn wir zum Beispiel einen Preis haben,

2) wir erzeugen seine Differenz

3) Wir nehmen zwei Segmente von Unterschieden, die von der Struktur her sehr nahe beieinander liegen (lassen Sie es euklidisch sein)

4) diese Bereiche gehören zu fast 100 % zu einem Cluster in RF oder denselben Neuronen und werden als identische Situationen betrachtet

5) Diese beiden Abschnitte (Differenzen) werden dann wieder auf die Ausgangspreise reduziert, d. h. kumuliert

Und wir sehen, dass diese Abschnitte völlig unterschiedlich sind, oft tendiert der eine Abschnitt nach oben und der andere nach unten, d.h. es gibt keine Ähnlichkeit, während der Algorithmus denkt, dass es sich um identische Abschnitte handelt...

Was denken Sie darüber, Alexej? Es ist interessant, Ihre Kommentare als Mann mit Erfahrung zu hören.

Warum sollte das so sein? Wenn die Differenzen gleich sind, dann stimmen die Integralreihen vollständig überein. Wenn sie nur ähnlich sind, sind auch die Integralreihen ähnlich (im Trend).

Ich wollte Trader sagen, dass er die Grundlagen der Datenaufbereitung lesen sollte. Niemand reicht Rohpreise zur Eintragung ein. Das hat sich schon hunderttausendmal abgespielt. Instabile Daten führen zu instabilen Abhängigkeiten.