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

 
Anton Zverev:
Ich lese immer wieder solche Themen (nicht nur in diesem Forum), in denen versucht wird, komplexe Handelstheorien aufzustellen.
Genetische Algorithmen, neuronale Netze, verschlungene Formeln, die nur der Autor versteht, usw.

Und ich stelle immer wieder fest, dass solche Systeme auf dem Markt nicht funktionieren. Die Überwachung geht entweder auf Null oder auf Minus.
Aber im nächsten Thread verdient jemand mit einem Expert Advisor auf zwei Zetteln. Und sie verdienen gutes Geld.

Die Frage ist, ob das alles einen Sinn ergibt.
Denn meiner Erfahrung nach ist das System umso rentabler, je einfacher und klarer es ist.

Sind Sie zufällig ein Angestellter in einem Maklerhaus der alten Schule?

Ich denke, Ihre "geheime Methode" besteht darin, mashki (zufällig) zu handeln und zu verdoppeln, wenn Sie verlieren, richtig?)

Ich muss von der Provision leben, meine Herren...

 
Dr. Trader:

Einrichten eines Ausschusses und Testen:

Das Problem besteht darin, dass die ursprünglichen Klassen vom Typ Faktor sind und das Ergebnis in der Matrix in die entsprechenden Ordnungszahlen des Faktors umgewandelt wird. Am Ende läuft der Vergleich also über as.numberic().

Für alles, um richtig mit Faktoren zu arbeiten, müssen wir predictionMatrix als data.frame erstellen, aber nach, dass meine rbind-Funktion gab varnings, ich muss etwas anderes ändern, ich habe nicht verstanden, was dort falsch ist.

Ein paar Gedanken zum Code:

1. Sie müssen das for()-Konstrukt nur dann verwenden, wenn es absolut notwendig ist. Es gibt eine wunderbare Alternative zu foreach(), die neben einer hohen Ausführungsgeschwindigkeit auch die Parallelisierung von Berechnungen zwischen zugänglichen Kernen ermöglicht.

2) Ein Modell-Ensemble ist nur dann sinnvoll und liefert Ergebnisse, wenn die Modelle signifikante Unterschiede aufweisen. Zwei Varianten: ein Datensatz - verschiedene Modelle (RF, DT, SVM); ein Modell - verschiedene Datensätze. Nachfolgend ein Beispiel für den letzteren Fall

#----------------------------------------------------------------------
require(ranger)
require(foreach)
require(magrittr)
data("iris")
totalModels = 50
res <- list()
Acc <- c()
res <- foreach(i = seq_len(totalModels),
               .packages = c("ranger", "magrittr")) %do% {
          id <- rminer::holdout(y = iris$Species, ratio = 2/3)
          x.test <- iris[id$ts, -ncol(iris)]
          y.test <- iris[id$ts, ncol(iris)]
          model <- ranger(Species~., data = iris[id$tr, ], 
                          write.forest = TRUE)
          pred <- predict(model, x.test)$predictions
          acc <- sum(pred == y.test) / length(y.test)
          list(Acc = acc, mod = model) 
        }
for (i in 1:totalModels) {Acc[i] <- res[[i]]$Acc}
Acc
 [1] 0.9803922 0.9607843 0.9803922 0.9607843
 [5] 0.9607843 0.9215686 1.0000000 0.9411765
 [9] 0.9019608 0.9607843 0.9803922 0.9607843
[13] 0.9803922 0.9215686 0.9607843 0.9215686
[17] 0.9803922 0.8823529 0.9411765 0.9803922
[21] 0.9607843 0.9215686 0.9607843 0.9411765
[25] 0.9411765 0.9607843 0.9411765 0.9607843
[29] 0.8823529 0.9019608 1.0000000 0.9411765
[33] 0.9215686 0.9803922 1.0000000 0.9607843
[37] 0.9411765 0.9803922 0.9607843 0.9215686
[41] 0.9411765 0.9607843 0.9411765 1.0000000
[45] 0.9607843 0.9411765 0.9215686 0.9411765
[49] 0.9803922 0.9607843

Wählen Sie die Modelle mit der besten Leistung aus und arbeiten Sie von dort aus weiter.

Viel Glück!

 
Vladimir Perervenko:

Ein paar Gedanken zum Code:

1. Sie brauchen for() nur dann zu verwenden, wenn es absolut notwendig ist. Es gibt eine wunderbare Alternative zu foreach(), die neben einer hohen Ausführungsgeschwindigkeit auch die Parallelisierung von Berechnungen zwischen den verfügbaren Kernen ermöglicht.

2) Ein Modell-Ensemble ist nur dann sinnvoll und liefert Ergebnisse, wenn die Modelle signifikante Unterschiede aufweisen. Zwei Varianten: ein Datensatz - verschiedene Modelle (RF, DT, SVM); ein Modell - verschiedene Datensätze. Nachfolgend ein Beispiel für die letztgenannte Option

Wählen Sie Modelle mit besserer Leistung und arbeiten Sie mit ihnen.

Viel Glück!

Ich würde Sie gerne öfter sehen. Verschwinden Sie nicht.
 
Vladimir Perervenko:


Dann wählen wir das Modell mit den besten Indikatoren aus und arbeiten damit.


Genau hier liegt das Problem.

Was ist die beste Leistung auf der Grundlage welcher Daten?

Ich frage deshalb, weil Vkontas versucht herauszufinden, wie man ein Modell (aus vielen Modellen) anhand von Trainings- und Testdaten auswählen kann. Aber hier haben Sie es so einfach: Wir nehmen die besten Indikatoren und arbeiten mit ihnen.

 
Alexey Burnakov:

Genau hier liegt das Problem.

Was ist die beste Leistung auf der Grundlage welcher Daten?

Ich frage deshalb, weil Vkontas versucht herauszufinden, wie man ein Modell (aus vielen Modellen) anhand von Trainings- und Testdaten auswählen kann. Aber hier haben Sie es so einfach: Wir nehmen die besten Indikatoren und arbeiten mit ihnen.

Die Ausgangsmenge wird in Trainings- und Testschichten unterteilt. Im Zug trainieren wir und im Test testen wir. Geht das nicht aus dem Kodex hervor?

Viel Glück!

 
SanSanych Fomenko:
Ich würde Sie gerne öfter sehen. Verschwinden Sie nicht.
Leider habe ich nur ab und zu Zeit, die Website zu besuchen. Ich habe noch viel zu tun.
 
Vladimir Perervenko:

Die Ausgangsmenge wird in Trainings- und Testschichten unterteilt. Auf Zug trainieren wir auf Test bzw. wir testen. Geht das wirklich nicht aus dem Kodex hervor?

Viel Glück!

Ich werde rminer::holdout ausprobieren, danke für das Beispiel. Meiner Erfahrung nach ist es so, dass, wenn man ein Modell und seine Parameter so auswählt, dass man das beste Ergebnis für eine Testprobe erhält, das Modell schließlich ein wirklich gutes Ergebnis für die Testprobe liefern wird. Bei neuen Daten ist das Ergebnis jedoch meist sehr niedrig. Ich spreche hier speziell über Forex-Daten, in anderen Bereichen ist dies ein ganz normaler Ansatz. Ich hoffe nicht, dass rminer::holdout for forex irgendetwas dramatisch verändern wird.
 
Dr. Trader:
Ich werde rminer::holdout ausprobieren, danke für das Beispiel. Im Allgemeinen zeigt die Erfahrung, dass, wenn wir ein Modell und seine Parameter so wählen, dass wir das beste Ergebnis für eine Testprobe erhalten, das Modell schließlich ein wirklich gutes Ergebnis für die Testprobe liefert. Bei neuen Daten ist das Ergebnis jedoch meist sehr niedrig. Ich spreche hier speziell über Forex-Daten, in anderen Bereichen ist dies ein ganz normaler Ansatz. Ich hoffe nicht, dass rminer::holdout for forex irgendetwas dramatisch verändern wird.
Das ist es, was ich damit sagen will. Und er hat es nicht verstanden.

In Forex bedeutet ein guter Test nicht gleich eine gute Leistung außerhalb der Stichprobe. Das ist der Grund, warum die Menschen Probleme haben. Aber hier ist es genau so - wir nehmen die besten Ergebnisse (und die Meisteranfertigung). In guter Manier )
 
Dr. Trader:
dann wird das Modell am Ende ein wirklich gutes Ergebnis für das Testmuster zeigen. Bei neuen Daten ist das Ergebnis jedoch meist sehr niedrig. Ich spreche speziell über Forex-Daten,
Alexey Burnakov:
In Forex bedeutet ein guter Test nicht gleich eine gute Leistung außerhalb der Stichprobe. Das ist der Grund, warum die Menschen Probleme haben.

Der Markt läuft gegen seine eigenen Statistiken, das ist eine Theorie, die ich mit der Praxis bestätigt habe, es ist die einzige Theorie, die ich kenne, die alles beantwortet, von der Frage, warum das Modell bei neuen Daten nicht funktioniert, bis zu der Frage, warum jeder überhaupt Geld auf dem Markt verliert...

Warum fällt es Ihnen so schwer, dies zu akzeptieren?

Ist das alte Wissen und die alten Gewohnheiten so dämpfend auf die neuen Informationen?

Warum sollte man sich so sehr auf das Modell konzentrieren, wenn der Leistungsunterschied zwischen den Modellen zwischen 0,5 und 5 % liegt?

kein Modell kann helfen, denn es geht nur um die Daten

1

ich habe dieses Bild schon mehr als einmal gepostet, aber trotzdem.....

Schauen Sie genau hin: Dies ist der Unterschied zwischen den kumulativen Kauf- und Verkaufsprognosen von zwei Netzwerken cum(buy.signal) - cum(sell.signal), im Idealfall, wenn unser Modell gut ist, sollte das blaue Diagramm mit dem Preis korrelieren, es bedeutet, dass das Netzwerk die Daten gut versteht und angemessen darauf reagiert, in der Tat, was wir sehen????????

Man kann nicht sagen, dass das Modell die Daten nicht versteht, obwohl die Korrelation umgekehrt ist, aber die Struktur identisch ist, aber der Markt bewegt sich gegen die Vorhersagen und gegen die Statistiken, auf die das Netz in der Vergangenheit trainiert wurde...

Sagen Sie mir nun, welches Modell kann das schaffen? Welche Kreuzvalidierung kann hier helfen? Jede Modellschulung, die auf Out-of-Sample-Daten (neue Daten) folgt, wäre nichts anderes als die Anpassung eines Modells, das auf Out-of-Sample-Daten gut funktioniert , und nichts weiter... Und Sie sehen es immer wieder, wenn Sie selbst Modelle trainieren, dass das Modell bei brandneuen Daten immer versagt, sehen Sie das nicht? Ich gebe Ihnen die Antwort, warum das so ist!

 

Ist dies das Diagramm mit den Daten, auf denen das Training selbst stattfand, oder ist es nur ein Test mit den neuen Daten? Wenn Sie einen Graphen für beide Zeiträume gleichzeitig zeichnen, sowohl für Training als auch für Test, dann gibt es im ersten (Trainings-)Teil der Daten eine vollständige Überlappung von blauem und grauem Graphen, und wenn neue Daten beginnen, gibt es eine scharfe Verschiebung zur umgekehrten Korrelation?

Wenn es so einfach wäre, würde es ausreichen, ein beliebiges Modell zu trainieren und dessen Vorhersagen einfach umzukehren. Das funktioniert leider nicht.
Einem Modell, das bei neuen Daten eine Genauigkeit von 0 % aufweist, etwas beizubringen, ist genauso schwierig wie eine Genauigkeit von 100 % zu erreichen. Der Standardwert für das Werfen einer Münze liegt beispielsweise bei einer Genauigkeit von 50 %, und es ist ebenso schwierig, mit ein paar Zehntelprozent in die eine oder andere Richtung zu kommen. Das Problem besteht nicht darin, dass die Modelle entgegengesetzte Ergebnisse liefern, sondern darin, dass einige Balken richtige und andere falsche Ergebnisse liefern, und dies alles ist zufällig und es gibt keine Möglichkeit, nur die richtigen Ergebnisse herauszufiltern.

Und warum ziehen Sie die S-Prognose von der B-Prognose ab? Vielleicht sollten Sie das Gegenteil tun, S-B? Dann würde auch die Korrelation plötzlich stimmen.