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
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.
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.
In Kombination mit anderen Methoden könnte es etwas bewirken.
Was gibt's?
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
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
Was hat es mit den Curveballs auf sich?
Nun, symbolische Regression ist die Rettung.
Die Formel lautet
Ich werde etwas vorschlagen, ich zeige Ihnen ein einfacheres Beispiel ohne SR.
Ich werde einfach etwas zusammenwürfeln und Ihnen ein einfacheres Beispiel ohne SR zeigen.
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
Testen Sie das Modell.
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.
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, 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))))))))))))))))))))))))))))