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

 
Anton Zverev:
Leggo sempre argomenti del genere (non solo su questo forum) dove si cerca di costruire teorie di trading complesse.
Algoritmi genetici, reti neurali, formule contorte che solo l'autore capisce, ecc.

E vedo sempre che tali sistemi non funzionano sul mercato. Il monitoraggio va a zero o a meno.
Ma nel prossimo thread qualcuno guadagna usando un Expert Advisor su due slittamenti. E guadagnano bene.

La domanda è: tutto questo ha un senso?
Perché nella mia esperienza, più il sistema è semplice e chiaro, più è redditizio.

Sei per caso un impiegato in una casa di intermediazione vecchio stile?

Penso che il tuo "metodo segreto" sia quello di scambiare mashki (casuale) e di raddoppiare quando perdi, giusto?)

Signori, dovrete vivere su commissione...

 
Dr.Trader:

Creazione di un comitato e test:

C'è un problema nel fatto che le classi originali sono di tipo fattore, e il risultato nella matrice è convertito nei numeri ordinali corrispondenti al fattore. Così alla fine il confronto passa attraverso as.numberic().

Affinché tutto funzioni correttamente con i fattori, abbiamo bisogno di creare predictionMatrix come data.frame, ma dopo che la mia funzione rbind ha dato fuori dei varnings, ho bisogno di cambiare qualcos'altro, non ho capito cosa c'è di sbagliato lì.

Alcuni pensieri sul codice:

1. Non dovete usare il costrutto for() a meno che non sia assolutamente necessario. C'è una meravigliosa alternativa a foreach() che, oltre all'alta velocità di esecuzione, permette di parallelizzare i calcoli tra core accessibili.

2) L'ensemble di modelli ha senso e dà risultati solo se i modelli hanno differenze significative. Due varianti: un set di dati - diversi modelli (RF, DT, SVM); un modello - diversi set di dati. Un esempio di quest'ultimo caso è il seguente

#----------------------------------------------------------------------
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

Scegliete i modelli con le migliori prestazioni e lavorate con loro da lì.

Buona fortuna

 
Vladimir Perervenko:

Alcuni pensieri sul codice:

1. Non è necessario usare for() a meno che non sia assolutamente necessario. C'è una meravigliosa alternativa a foreach() che, oltre all'alta velocità di esecuzione, permette di parallelizzare i calcoli tra i core disponibili.

2) L'ensemble di modelli ha senso e dà risultati solo se i modelli hanno differenze significative. Due varianti: un set di dati - diversi modelli (RF, DT, SVM); un modello - diversi set di dati. Un esempio per quest'ultima opzione è il seguente

Scegliete i modelli con prestazioni migliori e lavorate con loro.

Buona fortuna

Vorrei vederti più spesso. Non sparire.
 
Vladimir Perervenko:


Poi scegliamo il modello con i migliori indicatori e lavoriamo con loro.


È qui che si trova il problema.

Qual è la migliore performance in base a quali dati?

Perché lo chiedo, perché Vkontas sta cercando di capire come scegliere un modello (tra molti modelli) usando dati di allenamento e di test. Ma qui è così semplice: prendiamo i migliori indicatori e lavoriamo con loro.

 
Alexey Burnakov:

È qui che si trova il problema.

Qual è la migliore performance in base a quali dati?

Perché lo chiedo, perché Vkontas sta cercando di capire come scegliere un modello (tra molti modelli) usando dati di allenamento e di test. Ma qui è così semplice: prendiamo i migliori indicatori e lavoriamo con loro.

L'insieme iniziale è diviso in stratificato in treno/test. Sul treno ci si allena e sul test rispettivamente si testa. Non è chiaro dal codice?

Buona fortuna

 
SanSanych Fomenko:
Vorrei vederti più spesso. Non sparire.
Purtroppo ho solo il tempo di sfogliare il sito di tanto in tanto. Ho molto lavoro da fare.
 
Vladimir Perervenko:

L'insieme iniziale è diviso in stratificato in treno/test. Su treno ci alleniamo su test rispettivamente testiamo. Davvero non è chiaro dal codice?

Buona fortuna,

Proverò rminer::holdout, grazie per l'esempio. Beh, dalla mia esperienza, se scegliete un modello e i suoi parametri per ottenere il miglior risultato su un campione di prova, allora il modello alla fine vi darà un ottimo risultato sul campione di prova. Ma il risultato è di solito molto basso sui nuovi dati. Sto parlando specificamente di dati forex, in altri settori questo è un approccio abbastanza normale. Non spero che rminer::holdout per il forex cambi qualcosa di drammatico.
 
Dr.Trader:
Proverò rminer::holdout, grazie per l'esempio. In generale, per esperienza, se scegliamo un modello e i suoi parametri in modo da ottenere il miglior risultato su un campione di prova - allora il modello darà alla fine un ottimo risultato sul campione di prova. Ma il risultato è di solito molto basso sui nuovi dati. Sto parlando specificamente di dati forex, in altri settori questo è un approccio abbastanza normale. Non spero che rminer::holdout per il forex cambi qualcosa di drammatico.
Questo è quello che sto dicendo. E non l'ha capito.

In forex, un buon test non significa una buona performance al di fuori del campione. Ecco perché la gente sta lottando. E qui è proprio così: prendiamo i migliori risultati (e il master fitting). In buona maniera )
 
Dr.Trader:
allora il modello finirà per mostrare un ottimo risultato sul campione di prova. Ma il risultato è di solito molto basso sui nuovi dati. Sto parlando specificamente di dati forex,
Alexey Burnakov:
In forex, un buon test non significa una buona performance al di fuori del campione. Ecco perché la gente sta lottando.

Il mercato cammina contro le sue stesse statistiche, questa è una teoria che ho confermato con la pratica, è l'unica teoria che conosco che risponde a tutto, dal perché il modello non funziona sui nuovi dati al perché tutti perdono soldi nel mercato in primo luogo...

perché è così difficile da accettare per te?

le vecchie conoscenze e abitudini sono così smorzate dalle nuove informazioni?

perché concentrarsi così tanto sul modello quando la differenza di performance tra i modelli è tra lo 0,5% e il 5%?

nessun modello può aiutare perché è tutto sui dati

1

Ho postato questa foto più di una volta ma tuttavia.....

Questa è la differenza tra le previsioni cumulative di acquisto e vendita di due reti cum(buy.signal) - cum(sell.signal), idealmente se il nostro modello è buono allora il grafico blu dovrebbe correlarsi con il prezzo, significa che la rete capisce bene i dati e reagisce adeguatamente ad essi, infatti quello che vediamo????????

Non si può dire che il modello non capisce i dati, anche se la correlazione è inversa ma la struttura è identica, ma il mercato si muove contro le previsioni, quelle contro le statistiche che la rete aveva imparato in passato...

Ora ditemi, quale modello può gestirlo? Quale convalida incrociata può aiutare in questo caso? qualsiasi addestramento del modello seguito da out of sample (nuovi dati) non sarebbe altro che un adattamento di un modello che funziona bene su out of sample e niente di più... E lo si vede sempre quando si addestrano i modelli da soli, che su dati nuovi di zecca il modello fallisce sempre, non vedi? Vi do la risposta perché succede!

 

Questo è il grafico con i dati su cui ha avuto luogo l'addestramento stesso, o è solo un test sui nuovi dati? Se si disegna un grafico per entrambi i periodi di tempo contemporaneamente, sia per l'allenamento che per il test, allora sulla prima parte (allenamento) dei dati ci sarà una completa sovrapposizione del grafico blu e grigio, e quando iniziano i nuovi dati ci sarà un netto passaggio alla correlazione inversa?

Se fosse così semplice, basterebbe addestrare qualsiasi modello e invertire le sue previsioni. Questo non funziona purtroppo.
Insegnare un modello che dà lo 0% di precisione su nuovi dati è altrettanto difficile che raggiungere il 100% di precisione. Il lancio predefinito di una moneta, per esempio, ha una precisione del 50%, e andare da una parte o dall'altra di un paio di dozzine di punti percentuali è ugualmente difficile. Il problema non è che i modelli danno risultati opposti, ma che alcune barre daranno risultati corretti, altre daranno risultati sbagliati, e tutto questo è casuale e non c'è modo di filtrare solo i risultati corretti.

E perché si sottrae la previsione S dalla previsione B? Forse dovresti fare il contrario, S-B? Allora anche la correlazione diventerebbe improvvisamente corretta.

Motivazione: