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

 
Maxim Dmitrievsky #:
In Kombination mit anderen Methoden könnte es etwas bewirken.
Wie ist das?
 
mytarmailS #:
Was gibt's?
Ich habe es noch nicht getan. Ich habe eine komplizierte Logik, ich muss herausfinden, wo ich sie einbauen kann.
 

Das ist die Art von Zeichen, die ich erhalten habe. Korrelieren Sie, denn die Basis sind Inkremente von engen Größenordnungen


Beispielformel: Preis - MA(n) * std(n) * coef, wobei MA und std - gleitender Durchschnitt und Standardabweichung beliebiger Ordnung und Nivellierungskoeffizient, je größer - desto stationärer die Reihe. In diesem Fall ist es 50000.

Aus irgendeinem Grund zeigt mein MO eine bessere Stabilität als nur bei Inkrementen

mit Koeffizient 20.

Es stellt sich heraus, dass es sich um etwas ähnliches wie eine gebrochene Differenz handelt, aber es zählt sofort.

Vielleicht fallen jemandem andere Möglichkeiten ein

 
Maxim Dmitrievsky #:

Das ist die Art von Zeichen, die ich erhalten habe. Korreliert, weil die Basis in Schritten von engen Größenordnungen liegt

Was sind diese Kurven im Allgemeinen?

Maxim Dmitrievsky #:

Vielleicht fällt jemandem noch eine andere Möglichkeit ein

Hier ist sie, die symbolische Regression zur Rettung

 
mytarmailS #:

Was hat es mit den Curveballs auf sich?

Nun, symbolische Regression ist die Rettung.

Die Formel ist geschrieben.
Schlagen Sie eine Variante vor, wie man die Zitate näher an die stationäre Reihe bringen kann, indem man cf
 
Maxim Dmitrievsky #:
Die Formel lautet
Schlagen Sie eine Variante vor, wie man die Zitate mit Hilfe von cf näher an die stationäre Reihe bringen kann

Ich werde etwas vorschlagen, ich zeige Ihnen ein einfacheres Beispiel ohne SR.

 
mytarmailS #:

Ich werde einfach etwas zusammenwürfeln und Ihnen ein einfacheres Beispiel ohne SR zeigen.

Man kann hier nicht mit nur einer Variante arbeiten, man muss Attribute konstruieren und diese überprüfen und trainieren.

Aber die Zeichen sind nicht dumm, sondern zumindest irgendwie sinnvoll, sonst kann man ewig weitermachen.
 
Maxim Dmitrievsky #:

Mit SR braucht man mehr Zeit zum Programmieren und Planen, also habe ich es der Einfachheit, Geschwindigkeit und Klarheit halber einfach gemacht...

Anstatt eine Formel in Echtzeit zu erstellen, erstelle ich ein "Formelergebnis" - eine Kurve - und verwende sie dann als Ziel für das Modell.


Ich erstelle eine Fitnessfunktion, die die Korrelation zwischen dem Preis und der Modellausgabe maximiert, aber die Modellausgabe hat eine Einschränkung: Sie kann nur zwischen -1 und 1 liegen.

Das heißt, wir erhalten eine Reihe, die mit dem Preis korrelieren sollte, aber innerhalb der Grenzen der Statsionarität "geklammert" ist. Wenn Sie echte Statsionarität nach Dickie Fuller usw. benötigen, ändern Sie einfach die Fitnessfunktion so, wie Sie sie brauchen.



Erstellen Sie Daten und trainieren Sie das Modell mit Genetik

par(mar=c(2,2,2,2))
#  для простоты Создаю цену 
P <- cumsum(rnorm(300))
plot(P,t="l")

hankel <- function(x,n) embed(x, n)[ ,n:1]
#  Создаю данные для обучения Х ,скользящее окно виде матрицы
X <- t(apply(hankel(P,11),1,function(x) cumsum(diff(x))))
P <- tail(P,nrow(X))

#  Делаю разметку индексов для трейн и тест и валидации
tr <- 1:100
ts <- 1:200
al <- 1:nrow(X)

library(randomForest)
#  Создаю фитнес сункцию , подбираем генетикой для фореста такой таргет чтобы 
#  на выходе был максимально коррелированый с ценой ряд
fit <- function(Y){
set.seed(123)
rf <- predict(  randomForest(Y~.,X[tr,],ntree=100) ,   X[ts,])
return( cor(rf, P[ts]) )}

library(GA)
GA <- ga(type = "real-valued", 
         fitness =  fit,
         lower = rep(-1,100), 
         upper = rep(1,100), 
         popSize = 100,
         maxiter = 100,
         run = 40)
plot(GA)
GA_Y <- tail(GA@solution,1)[1,]

Testen Sie das Modell.

#  Получаем нашу модель которая делает то что нужно
set.seed(123)
rf <- predict(  randomForest(GA_Y~.,X[tr,],ntree=100) ,   X[al,])

layout(1:2)
plot(P,t="l",main="original price") ; abline(v=c(100,200),lty=2,col=c(3,4))
plot(rf,t="l",main="model out") ; abline(v=c(100,200),lty=2,col=c(3,4))
abline(h=0,col=3,lty=3)

layout(1:2)
plot(P,t="l",main="original price") ; abline(v=c(100,200),lty=2,col=c(3,4))
plot(cumsum(rf),t="l",main="model out cumsum") ; abline(v=c(100,200),lty=2,col=c(3,4))

Die vertikalen Linien zeigen die Trennung von Training, Test und Validierung.


Wie Sie auf dem Bild sehen können, hat das Modell gelernt, den Preis als Eingabe zu nehmen, und die Ausgabe ist eine statistische Reihe, die mit dem Preis korreliert.

Zur besseren Übersichtlichkeit können wir eine kumulative Summe der Modellausgabe erstellen.


wie diese )))) Und Sie brauchen nichts zu erfinden, alles kann automatisch erfolgen.

 
mytarmailS #:

Bei der SR braucht man mehr Zeit für den Code und die Planung, deshalb habe ich sie der Einfachheit, Schnelligkeit und Klarheit halber vereinfacht.

Anstatt eine Formel in Echtzeit zu erstellen, erstelle ich ein "Formelergebnis" - eine Kurve - und verwende sie dann als Ziel für das Modell.


Ich erstelle eine Fitnessfunktion, die die Korrelation zwischen Preis und Modellausgabe maximiert, aber die Modellausgabe hat eine Einschränkung: Sie kann nur zwischen -1 und 1 liegen.

Das heißt, wir erhalten eine Reihe, die mit dem Preis korrelieren sollte, aber innerhalb der Grenzen der statistischen Werte "geklammert" ist. Wenn wir die wirkliche Statsionarität nach Dickie Fuller usw. benötigen, ändern wir einfach die Fitnessfunktion so, wie wir sie brauchen.



Daten erstellen und das Modell mit Genetik trainieren

das Modell validieren

Vertikale Linien zeigen die Trennung von Training, Test und Validierung.


Wie Sie in der Abbildung sehen können, hat das Modell gelernt, den Preis als Eingabe zu nehmen, und die Ausgabe ist eine statistische Reihe, die mit dem Preis korreliert

Zur besseren Übersichtlichkeit können wir aus der Modellausgabe eine kumulierte Summe bilden


wie hier )))) Und man muss sich nichts einfallen lassen, alles kann von der Maschine erledigt werden.

Interessant, ich werde versuchen, später darüber nachzudenken, es ist heute ein blutiger Tag, es ist schwer zu denken.
 
Maxim Dmitrievsky #:
Interessant, ich werde versuchen, später darüber nachzudenken, wir haben heute eine Bloody Mary, es ist schwer zu denken.

Ich frage mich, wie viele Zeilen es in Python..... benötigen würde.

wahrscheinlich Tausende in µl))))))))))))))))))))))))))))