L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 2642

 
Maxim Dmitrievsky #:
Combinato con altri metodi, potrebbe fare qualcosa.
In che modo?
 
mytarmailS #:
Cosa c'è?
Non l'ho ancora fatto. Ho una logica complicata, devo capire dove inserirla.
 

Questo è il tipo di segno che ho ottenuto. Correlare perché la base è costituita da incrementi di ordini di grandezza vicini


esempio di formula: prezzo - MA(n) * std(n) * coef, dove MA e std - media mobile e deviazione standard di ordine arbitrario e coefficiente di livellamento, più grande - più stazionaria è la serie. In questo caso, è 50000.

Per qualche motivo il mio MO mostra una stabilità migliore rispetto a quella degli incrementi

con coef 20.

Risulta essere qualcosa di simile alla differenza frazionaria, ma conta istantaneamente.

Forse qualcuno può pensare ad altre opzioni

 
Maxim Dmitrievsky #:

Questo è il tipo di segno che ho ottenuto. Correlato, perché la base è costituita da incrementi di ordini di grandezza vicini.

Cosa sono queste curve in generale?

Maxim Dmitrievsky #:

forse qualcuno troverà altre opzioni

Ecco, la regressione simbolica ci viene in soccorso

 
mytarmailS #:

Perché queste palle curve?

Beh, la regressione simbolica ci viene in soccorso.

La formula è scritta.
Suggerite una variante di come avvicinare le quotazioni alla serie stazionaria utilizzando cf
 
Maxim Dmitrievsky #:
La formula è scritta
Suggerite una variante di come avvicinare le quotazioni alla serie stazionaria per mezzo di cf

Ti propongo qualcosa, ti mostro un esempio più semplice senza SR.

 
mytarmailS #:

Metterò insieme qualcosa e vi mostrerò un esempio più semplice senza SR.

Non si può fare con una sola variante, bisogna costruire degli attributi, controllarli e allenarsi su di essi.

Ma i segni non sono stupidi, ma almeno in qualche modo significativi, altrimenti si può andare avanti all'infinito.
 
Maxim Dmitrievsky #:

Con SR ci vuole più tempo per codificare e pianificare, quindi per semplicità, velocità e chiarezza l'ho semplificato...

Invece di creare una formula in tempo reale, creo un "risultato della formula" - una curva - e lo utilizzo come obiettivo per il modello.


Creo una funzione di fitness che massimizza la correlazione tra il prezzo e l'output del modello, ma l'output del modello ha una limitazione: può essere compreso solo tra -1 e 1.

In altre parole, otteniamo una serie che dovrebbe essere correlata al prezzo, ma "bloccata" entro i limiti dei valori statsionari. Se si ha bisogno di una vera statsionarietà secondo Dickie Fuller e così via, è sufficiente modificare la funzione di fitness in base alle proprie esigenze.



creare i dati e addestrare il modello con la genetica

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,]

testare il modello.

#  Получаем нашу модель которая делает то что нужно
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))

Le linee verticali rappresentano la separazione tra addestramento, test e validazione.


Come si può vedere nell'immagine, il modello ha imparato a prendere in input il prezzo e l'output è una serie statistica correlata al prezzo.

Per maggiore chiarezza possiamo fare una somma cumulativa dell'output del modello.


come questo )))) Non è necessario inventare nulla, tutto può essere fatto automaticamente.

 
mytarmailS #:

Con SR è necessario più tempo per il codice e la pianificazione, quindi per semplicità, velocità e chiarezza l'ho reso più semplice.

Invece di creare una formula in tempo reale, creo un "risultato della formula", una curva, e poi la uso come obiettivo per il modello.


Creo una funzione di fitness che massimizza la correlazione tra il prezzo e l'output del modello, ma l'output del modello ha una limitazione: può essere solo compreso tra -1 e 1.

In altre parole, otteniamo una serie che dovrebbe essere correlata al prezzo, ma "bloccata" entro i limiti dei valori statsionari. Se abbiamo bisogno della vera statsionarietà secondo Dickie Fuller e così via, cambiamo semplicemente la funzione di fitness in base a ciò che ci serve.



creare dati e addestrare il modello con la genetica

convalidare il modello

Le linee verticali rappresentano la separazione tra addestramento, test e validazione.


Come si può vedere nell'immagine, il modello ha imparato a prendere in input il prezzo e l'output è una serie statistica correlata al prezzo.

Per una maggiore chiarezza possiamo fare una somma cumulativa dell'output del modello


come questo )))) E non è necessario pensare a nulla, tutto può essere fatto dalla macchina.

Interessante, proverò a pensarci più tardi, oggi è un bloody mary, è difficile pensare.
 
Maxim Dmitrievsky #:
Interessante, proverò a pensarci più tardi, oggi abbiamo un Bloody Mary, è difficile pensare.

Mi chiedo quante righe ci vogliano in python.....

probabilmente migliaia in µl))))))))))))))))))))))))))))