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

 
Maxim Kuznetsov #:

Funziona?

Se non si è mai parlato di uno scarafaggio (un cerchio con zampe e occhi), si inizierà con qualcosa di più semplice: un agente 2D che ha 9 occhi che puntano in diverse angolazioni davanti a sé e ogni occhio percepisce 3 valori lungo la sua direzione (fino a una certa distanza massima di visibilità): distanza da un muro, distanza da una cosa verde o distanza da una cosa rossa. L'agente naviga utilizzando una delle 5 azioni che lo fanno girare in diverse angolazioni. Le cose rosse sono mele e l'agente riceve una ricompensa per averle mangiate. Gli oggetti verdi sono veleni e l'agente riceve una ricompensa negativa per averli mangiati. L'addestramento richiede poche decine di minuti con le impostazioni attuali dei parametri".

è possibile fare clic su avvia l'apprendimento... e poi su arresta l'apprendimento.....

lo scarafaggio dovrebbe correre e preferire i punti rossi per evitare quelli verdi...

In realtà: dopo lo stop all'apprendimento segue più o meno l'ultimo schema di movimento e non distingue tra rosso e verde. Oppure ho uno scarafaggio insolitamente stupido :-)

perché non si dovrebbe premere stop learning prima che l' apprendimento sia completato .

 
mytarmailS #:

perché non si smette di imparare prima di aver completato l' apprendimento .

Evviva! Ha funzionato... 3 ore di apprendimento, me ne ero quasi dimenticato.

Ora lo scarafaggio corre come dovrebbe (quasi) cercando di evitare quelli verdi e mangiando quelli rossi.

A quanto pare è successo che un "tastatore" in meno si è allenato :-) Cioè, se un verde di rigore si trova su un certo lato, verrà mangiato immediatamente. Al contrario, i rossi su una certa traversa vengono evitati.

Ma questo è probabilmente un sistema ogrico.

 
Aleksey Nikolayev #:

Questo funziona solo nel caso di caratteristiche indipendenti, e dato che vengono conteggiate allo stesso prezzo, non è possibile. Nel caso della dipendenza è molto più complicato - possiamo prendere come esempio le copule, dove le distribuzioni univariate sono sempre la stessa uniforme, ma allo stesso tempo le distribuzioni bivariate possono essere molto diverse.

Forse esiste una soluzione sulla stessa R, ma basta cercarla?

Aleksey Nikolayev #:

Hai una predilezione per i calcoli enumerativi pesanti) Dovremo aggiungere (alla già considerevole quantità di enumerazioni) l'enumerazione per tipi di caratteristiche e, sicuramente, per parametri di caratteristiche.

Tuttavia, mi sembra che ci sia una venatura razionale nel vostro approccio, c'è qualcosa su cui riflettere.

Sì, a quanto pare non sono bravo a prevedere i risultati senza sperimentare, quindi è meglio fare dei test e spesso rimanere delusi piuttosto che costruire calcoli logici a più stadi in cui un errore può insinuarsi in uno dei passaggi.

Anche se si impara a dividere un campione in sottocampioni, la domanda successiva è come classificare correttamente il campione attuale e applicarvi il modello necessario.

 
mytarmailS #:
Forse, invece dei criteri statistici di omogeneità del campione, basterebbe osservare la variazione dell'importanza delle caratteristiche del modello nella dinamica (in una finestra scorrevole).

Se c'è una forte discrepanza tra lo stato attuale e quello precedente, significa che siamo già in un altro campione....

Pro:
1. Non è necessario programmare le statistiche. Test, tutto è pronto fuori dalla scatola
2. Tiene conto non solo della variazione del tempo di campionamento, ma anche della variazione dell'obiettivo, il che non è meno importante.

In quale momento osservare, al momento dell'allenamento? E come suggerisce di osservare la dinamica, come implementarla?

Ho uno script che mostra l'attivazione delle foglie del modello in dinamica, cioè è possibile vedere quali foglie vengono attivate. Forse dovremmo calcolare la frequenza media della loro attivazione sul segmento di addestramento, e poi guardare le deviazioni sui segmenti di test? In questo modo, possiamo almeno cercare di monitorare la diminuzione dell'efficienza del modello, in linea teorica.

 
Aleksey Vyazmikin #:

In quale momento osservare, al momento della formazione? E come proponete di osservare in dinamica, come realizzare?

Ho uno script che mostra dinamicamente l'attivazione delle foglie del modello, cioè è possibile vedere quali foglie sono attivate. Forse allora dovremmo calcolare la frequenza media della loro attivazione sul segmento di allenamento, e poi guardare le deviazioni sui segmenti di test? In questo modo, possiamo almeno cercare di monitorare la diminuzione dell'efficienza del modello, in linea teorica.

Non ha senso guardare al vecchio modello, non coglie i cambiamenti nel mercato....

Propongo di implementare come suggerito))))))
In una finestra scorrevole riqualificare il modello e osservare l'importanza dei segnali, o semplicemente prendere un determinatore di buoni segnali e osservarlo in una finestra scorrevole. finestra


Ecco un esempio su un campione generato casualmente di 5 caratteristiche e 1 target binario.

selettore forrest e fiche

X <- matrix(rnorm(1000),ncol = 5)
Y <- as.factor(sample(0:1,nrow(X),replace = T))

head(X)
head(Y)

#install.packages("randomForest")
library(randomForest)
rf_imp_mat <- matrix(ncol = ncol(X),nrow = nrow(X))
for(i in 30:nrow(X)){
  ii <- (i-29):i
  rf <- randomForest(Y[ii]~.,X[ii,],ntree=100)
  rf_imp_mat[i,] <- importance(rf)[,1]
}

#install.packages("FSelectorRcpp")
library(FSelectorRcpp)
fs_imp_mat <- matrix(ncol = ncol(X),nrow = nrow(X))
for(i in 30:nrow(X)){
  ii <- (i-29):i
  infg <- information_gain(y = Y[ii],x = as.data.frame(X[ii,]))
  fs_imp_mat[i,] <-  infg$importance
}

par(mfrow=c(1,2))
matplot(rf_imp_mat , t="l",lty=1,main="rf_var_imp")
matplot(fs_imp_mat , t="l",lty=1,main="fs_var_imp")


In R-ka naturalmente non è consuetudine scrivere in cicli se non è necessario, ma questo stile confonde i nuovi arrivati e confonde anche gli intermediari come me....

ma si può scrivere in questo modo, il codice è 3 volte inferiore e il risultato è lo stesso.

X <- matrix(rnorm(1000),ncol = 5)
Y <- as.factor(sample(0:1,nrow(X),replace = T))
idx <- embed(1:nrow(X),dimension = 30)[,30:1]

library(randomForest)
rf_imp_mat <- t(apply(idx,1,function(i) importance(randomForest(Y[i]~.,X[i,]))[,1]))
library(FSelectorRcpp)
fs_imp_mat <- t(apply(idx,1,function(i) information_gain(y=Y[i],x=as.data.frame(X[i,]))$importance))

par(mfrow=c(1,2))
matplot(rf_imp_mat , t="l",lty=1,main="rf_var_imp")
matplot(fs_imp_mat , t="l",lty=1,main="fs_var_imp")


Inoltre, diversi selettori per ogni gusto, probabilmente il 5% di quelli disponibili in R-ka.

GitHub - FrancisArgnR/R-FeatureSelection-Packages: Brief guide to feature selection packages in R
GitHub - FrancisArgnR/R-FeatureSelection-Packages: Brief guide to feature selection packages in R
  • FrancisArgnR
  • github.com
Feature selection or variable selection in machine learning is the process of selecting a subset of relevant features (variables or predictors) for use in model construction. Packages FSinR Boruta caret spFSR varSelRF CORElearn FSelector
 

oppure guardare alle finestre su due o tre valute e operare con un ritardo sulla terza.

Ad esempio, guardare alla seconda metà della giornata EUR, CHF e USD CAD e aprire la mattina presto JPY (AUD, NZD)... in modo che il sistema impari a determinare la tendenza dell'USD e abbia il tempo di acquistare prima che "non sia marcio".

Temo solo che in una singola quotazione "tutte le strade sono state percorse" ed è impossibile trarne dei pesci con i metodi disponibili.

 
Per inventare qualcosa è necessario definire l'oggetto della ricerca, poi determinarne le proprietà, quindi non sarà come una scimmia e degli occhiali.
 
Maxim Dmitrievsky #:
Per inventare qualcosa è necessario definire l'oggetto della ricerca, poi definire le sue proprietà, quindi non sarà come una scimmia e gli occhiali.

È troppo presto per definire l'oggetto della ricerca e le sue proprietà, il forum ha solo 6 anni. Non essere così cattivo!

 
Evgeny Dyuka #:

È troppo presto per definire l'oggetto della ricerca e le sue proprietà, il forum ha solo 6 anni. Non siate così cattivi!

Se si inizia a studiare le quotazioni come una serie temporale, si possono notare alcune peculiarità che non si trovano in altre serie temporali. Forse ci sono dei modelli in queste caratteristiche. E sì, non tutto può essere tirato fuori dall'autoregressione e dalla classificazione utilizzando direttamente le caratteristiche dei lag, ma con l'aggiunta di ingegno è possibile
 
Maxim Kuznetsov #:

(Spero che non ti sparino per il link a CodeBase : https://www.mql5.com/ru/code/36558

può essere utile per prevedere i segni - siete invitati a prevedere :-) l'indicatore mostra (e riassume) solo i segni "bianco/nero".

Mostrerò qui i segni delle barre, non è un peccato.

Scaverò nel mio modesto archivio di sviluppi e li posterò.

È interessante, certo, non discuto, ma anche lì c'è una non stazionarietà.

ecco perché è previsto con una probabilità di poco inferiore a uno.

ma in pratica, se ora è in rialzo, la prossima barra sarà in ribasso.

e questo tipo di movimento dei TFM più giovani si riflette in quelli più vecchi.

Quindi la tendenza non è una linea retta, ma con molti pullback, multipli per durata e dimensione delle barre dei più giovani.

Tuttavia, sembrerebbe che sia possibile applicare Fourier e trovare queste onde, ma non è così, perché

la scala temporale è modulata allo stesso modo, avanti e indietro.

Non è facile capire questo miracolo e, se lo si fa di petto, sorgono molte domande.

Ad esempio, possiamo considerare il movimento dei prezzi da sinistra a destra o da destra a sinistra, partendo non necessariamente dal bordo destro.

Così si va avanti e indietro, su e giù.