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

 
Vladimir Perervenko:


PS. Und parallelisieren Sie die lm()-Berechnung. Jetzt ist genau der richtige Zeitpunkt dafür.

Danke.

Ich habe gesehen, wie man eine Operation in einer Schleife durch foreach %dopar% parallelisieren kann. Ich weiß nicht, wie ich ihn in eine versteckte Schleife im DT einhängen kann. Ich weiß nicht, ob es vielleicht schneller geht oder nicht.

 
Alexey Burnakov:

Ich danke Ihnen.

Ich habe gesehen, wie man eine Operation in einer Schleife durch foreach %dopar% parallelisieren kann. Ich weiß nicht, wie ich sie an einer versteckten Schleife in DT befestigen kann. Und ich weiß nicht, ob es schneller ginge.

Ich meinte diesen Teil des Codes.

lm_models <-    x[,
{
        lapply(c(1:20), function(x) summary(lm(data = .SD[, c(1:x, 21), with = F],    formula = V21 ~ . -1))$'fstatistic'[[1]])
}
, by = sampling
]

Foreach() anstelle von lapply

 

Mit Diagrammen, deren Erstellung mehrere Dutzend Sekunden dauert, ist etwas nicht in Ordnung.

Sehen Sie sich dieses Paket an ("nhstplot"). Es ist schnell zu zeichnen und ich finde es ziemlich gut.

> plotftest(f = 4, dfnum = 3, dfdenom = 5, title = "Fisher's F test")

 
Vladimir Perervenko:

Mit Diagrammen, deren Erstellung mehrere Dutzend Sekunden dauert, ist etwas nicht in Ordnung.

Sehen Sie sich dieses Paket an ("nhstplot"). Es ist schnell zu zeichnen und ich finde es ziemlich gut.

> plotftest(f = 4, dfnum = 3, dfdenom = 5, title = "Fisher's F test")

Ich werde es mir ansehen. Aber wo ist hier die Halbtransparenz, wo sind die Hunderte von übereinanderliegenden Objekten? Testen Sie es unter schwierigen Bedingungen, und dann werden wir verstehen, ob es schneller ist oder nicht.
 
Vladimir Perervenko:

Ahh. Ich werde es versuchen, danke. Es stellt sich heraus, dass die lapply-Schleife durch eine parallele Schleife ersetzt wird. Und das Ganze läuft in einer DT-Schleife mit 1000 Iterationen ab.

Oder es gibt eine andere Möglichkeit, diese 1000 Iterationen durch foreach zu überspringen.

 
Alexey Burnakov:
Ich werde natürlich einen Blick darauf werfen. Aber wo ist hier die Halbtransparenz, wo sind die Hunderte von übereinanderliegenden Objekten? Testen Sie es unter schwierigen Bedingungen, und dann werden wir verstehen, ob es schneller ist oder nicht.

Schnelles halbtransparentes Zeichnen kann mit einer OpenGL-Grafikkarte erreicht werden. In R gibt es dafür die Bibliothek rgl, die eher für 3D gedacht ist, aber wenn Sie orthogonale Projektion und das Zeichnen von Linien beherrschen, ist sie genau das Richtige für Sie. Ich konnte es nicht auf Anhieb herausfinden, man muss die Dokumentation lesen.

Ich hab's:

Es ist ziemlich einfach, halbtransparente Linien zu zeichnen, man braucht nur eine Tabelle mit X- und Y-Koordinaten. Sie könnten auch eine dritte Z-Spalte für mehr Dreidimensionalität hinzufügen.

library(rgl)
for(i in 1:1000){
    lines3d(cbind(1:1000, cumsum(rnorm(1000))), col="blue", alpha=0.1)
}

Aber es war trotzdem sehr langsam. Nach procesexplorer zu urteilen, wird Video nur zu 5% genutzt, während ein logischer Prozessor zu 100% genutzt wird. Ich denke, R ist zu langsam bei der Eingabe von Daten in OpenGL, viel langsamer als es empfangen kann. Irgendwie hat sich das so ergeben.

Nur um der Übersichtlichkeit willen :) tun Sie es, maximieren Sie das Fenster auf Vollbild, und drehen Sie die "Figur" mit der linken Maustaste.

library(rgl)
for(i in 1:100){
    lines3d(cbind(cumsum(rnorm(100)), cumsum(rnorm(100)), cumsum(rnorm(100))), alpha=0.2)
}
 
Sie könnten dies tun. Nehmen Sie wahllos hundert Zeilen heraus. Und die Ausschüttungen würden voll sein. Es ginge viel schneller
 

Ich habe endlich den ersten Versuch mit der Cluster-Idee gemacht, die ich vorhin angekündigt habe. Es ist ein Testlauf, nur um zu sehen, was geht.

gleitende Reihe von 5 OHLC-Werten + Volumen + Volatilität 6 Prädiktoren mit jeweils 5 Werten

Geschichte lernen 100 000 Takte

jeder Prädiktor wurde natürlich normalisiert) und dann in 100 Cluster geclustert Entschuldigung für den Unsinn

Das Ziel entstand aus heiterem Himmel (im Moment habe ich mich gerade erst hingesetzt), ich habe einfach die Umkehr in dieser Form genommen: Das Ziel ist ein Extremum, das höher ist als die 4 vorangegangenen Kerzen und höher als die 10 darauf folgenden Kerzen.

Ich begann, nach sich wiederholenden Mustern zu suchen...

Das beste Muster, das ich ohne Prädiktoren gefunden habe, ist das folgende

open high low close volum volat target_avg target_count
91      30  41    91    100   0.4        9

in(open high low close volum volum) sind die Anzahl der Cluster, die dieses Muster charakterisieren

target_avg - dies ist die Wahrscheinlichkeit, dass mein Reversal in diesem Muster ausgelöst wird. Ich konnte keine Muster mit einer Auslösewahrscheinlichkeit von 80-90% nach diesen Prädiktoren finden

target_count - dieAnzahl der Male, die das Muster in der Historie erfasst wurde. Ich habe keine signifikanten Muster gefunden, die 30-50 Mal mit diesen Prädiktorenerfasst wurden

Das Beste, was ich mit diesen Prädiktoren gefunden habe, ist ein Muster, bei dem die Umkehrung (Ziel) in 40% der Fälle ausgelöst wird und es nur 9 Beobachtungen gibt (Anzahl der Muster)

Es ist also vielleicht die einzige nützliche Information, der geforderte "NO BLOW", die aus der Menge der Prädiktoren extrahiert werden kann, und sie erklärt nur einen Grund für die Umkehr, und selbst das sind nur 40 % davon, und verschiedene Gründe für verschiedene Umkehrungen, und davon gibt es imho definitiv nicht 10 oder 30.

Und jetzt überlegen Sie mal, wie der MO-Algorithmus alle Marktbewegungen mit solchen Prädiktoren erklären kann. Das ist unmöglich, denn Prädiktoren können nur 2% erklären und der Rest ist Rauschen...

Außerdem gibt es keine Kontrolle der statistischen Wiederholung, d.h. das IR kann eine Entscheidung auf der Grundlage von ein oder zwei Beobachtungen treffen, und das ist in der Tat in der überwiegenden Mehrheit der Fälle, in weniger als 95 % der Fälle, der Fall.

Wie auch immer, ich schweife ab... setzen wir nach dem Muster fort, die Qualität der Eingänge auf dem neuen Muster geschätzt, so werde ich sagen, es weit nicht der Mercedes, aber wenn es ein getöteter Zaporozhets ist, dann dieses Herangehen eine Neun gerade von der Fabrik

Die Qualität der Eingaben ist viel besser, klarer, weniger Fehler...

und die andere Sache ist, das vollständige Muster ist...

open high low close volum volat
91   6    30  41    91    100

Als ich die Erkennung mit den neuen Daten von 50 000 Kerzenständern durchführte, konnte der Algorithmus kein solches Muster finden, es wurde einfach nicht angezeigt).

Ich musste das Muster verkleinern und habe nur die Preise übrig gelassen

open high low close volum volat
91   6    30  41    91    100

Ich habe bereits etwa 20 solcher Muster gefunden

hier sind die Einträge im Muster, ich habe nichts "ala beste Einträge" ausgewählt, sondern einfach Fotos in der Reihenfolge gemacht, in der die Deals gemacht wurden, natürlich nicht alle Deals, sondern nur die ersten paar, so dass Sie bewerten können

й

der eqiti ist gut, obwohl das Risiko größer ist als erwartet

к

Denken Sie daran, dass es sich nur um ein Muster und nur um kurze Hosen handelt.

Wenn jemand den Code braucht, werde ich ihn posten, obwohl ich das bezweifle, er ist schon sehr klar
 

214 Seiten sind eine Menge zum Studieren/Lernen. In jedem von ihnen geht es um etwas anderes und nicht immer leicht zu verstehen).

Ist es möglich, all diese Seiten in einem Beitrag zusammenzufassen, auch wenn dieser nicht sehr kurz ist? Typ: Zielsetzung, Lösungsmethoden, Ergebnisse, Schlussfolgerungen.

Ich möchte gleich vorwegnehmen, dass mein Marktmodell ein Zufallsprozess (Brownsche Bewegung) ist, oder vielmehr die Summe mehrerer (vielleicht sogar vieler) solcher Bewegungen mit Rückkopplungen. Und irgendetwas vorherzusagen oder nach anderen als statistischen Mustern zu suchen, ist eine absolut sinnlose Übung. Das heißt, es gibt einfach keine aussagekräftigen Prädiktoren, zumindest nicht für spekulative Zwecke.

 
code, natürlich. es ist interessant.