L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 754
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ho già postato esempi di neuronics qui, cercherò qualcosa di adatto e lo rifarò per i tuoi dati (e con una commissione). Non scriverò lezioni introduttive, ma aggiungerò più commenti al codice.
Scusa, non capisco il significato della variabile con(F,T) Nel ciclo
Cioè, questo ciclo va sulle righe pari della tabella, ma come si fa su quelle dispari?
F e T sono abbreviazioni per i valori booleani FALSO e VERO, in linea di principio non importa se scrivere c(T,F) o c(VERO,FALSO), la prima variante è semplicemente più breve.
Se la tabella ha 10 righe, allora c(1:nrow(table)) è solo un vettore di c(1,2,3,4,5,6,7,8,9,10).
E gli array con valori booleani in questo caso andranno in loop fino alla lunghezza richiesta, si ottiene c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE).
cioè c(1:nrow(table))[c(F,T)] R capirà come
c(1,2,3,4,5,6,7,8,9,10)[c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)]
e prende gli elementi del vettore che corrispondono a TRUE in ordine.
Per esempio, se vogliamo prendere ogni terzo elemento, possiamo scriverlo come
c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,TRUE,FALSE]
o abbreviato
c(1:10)[c(F,F,T)]
Per gli elementi dispari basta scambiare T e F: c(1:nrow(table))[c(T,F)].
F e T sono abbreviazioni per i valori booleani FALSO e VERO, in linea di principio non importa se scrivere c(T,F) o c(VERO,FALSO), la prima variante è semplicemente più breve.
Se avete 10 righe nella tabella, allora c(1:nrow(table)) è solo il vettore c(1,2,3,4,5,6,7,8,9,10).
E gli array con valori booleani in questo caso andranno in loop fino alla lunghezza richiesta, si ottiene c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE).
cioè c(1:nrow(table))[c(F,T)] R capirà come
c(1,2,3,4,5,6,7,8,9,10)[c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE]
e prende gli elementi del vettore che corrispondono a TRUE in ordine.
Per esempio, se vogliamo prendere ogni terzo elemento, possiamo scriverlo come
c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,TRUE,FALSE]
o abbreviato
c(1:10)[c(F,F,T)]
per gli elementi dispari basta scambiare T e F: c(1:nrow(table))[c(T,F)]
Grazie per non esserti preoccupato di scrivere descrizioni così dettagliate. Infatti molte cose diventano chiare. Mi imbarazza anche solo chiederlo, ma mi deciderò. L'essenza del problema è la seguente.....
Il file di allenamento consiste nello stesso numero di classi per obiettivo. In altre parole, ho 24 uno e 24 zeri nell'obiettivo. Di nuovo, voglio fare come Reshetov.....
Ho diviso la tabella di allenamento in due tabelle, una con tutti i vettori dove il target è 1 e l'altra dove il target è 0.
Prendo la tabella con l'obiettivo 1 e poi ho bisogno di creare due sottotabelle, dove i vettori pari scrivono su Train1, e quelli dispari su Train2.
Prima lo facciamo per i numeri pari.
Ma allora la tabella Train1 conterrà righe c NA, e ho bisogno che Train1 abbia 12 righe, perché solo 12 di 24 righe sono pari. Non ho idea di come farlo....
Per favore.
Per R avete bisogno di un modo diverso di pensare, dovete operare mentalmente sui vettori, poi il codice è abbastanza semplice da scrivere. I professionisti scrivono certe cose in una riga, che non capisco nemmeno, e io stesso scriverei cicli in più righe.
Train1 <- rbind(Qwe[che(Qwe[, "target"]==1)[c(T,F)], ], Qwe[che(Qwe[, "target"]==0)[c(T,F)], ])
Train2 <- rbind(Qwe[che(Qwe[, "target"]==1)[c(F,T)], ], Qwe[che(Qwe[, "target"]==0)[c(F,T)], ])
in passi -
che(Qwe[, "target"]==1) - il numero di linee con target 1
che(Qwe[, "target"]==1)[c(T,F)] - numero di linee con target1, saltando 1
Qwe[which(Qwe[, "target"]==1)[c(T,F)], ] - la tabella ottenuta da Qwe, con un target 1 con uno spazio in 1
rbind(... , ...) - unisce due tabelle (con obiettivo 1 e con obiettivo 0)
Per favore.
Per R avete bisogno di un modo diverso di pensare, dovete operare mentalmente sui vettori, poi il codice è abbastanza semplice da scrivere. I professionisti scrivono cose in una riga che non capisco nemmeno, e io stesso scriverei cicli di più righe.
Train1 <- rbind(Qwe[che(Qwe[, "target"]==1)[c(T,F)], ], Qwe[che(Qwe[, "target"]==0)[c(T,F)], ])
Train2 <- rbind(Qwe[che(Qwe[, "target"]==1)[c(F,T)], ], Qwe[che(Qwe[, "target"]==0)[c(F,T)], ])
Sei solo un mostro. Due righe, è un peso in meno. Va bene, continuerò a lavorarci... Grazie!
Altri due campioni devono essere aggiunti a questi due.
MLP1=Train1+Test(Train2)
MPL2=Train2+Test(Train1)
Se sommiamo Test(Train2)+Test(Train1), otteniamo il risultato di tutta la sezione di allenamento, e questa sezione sarà un test, per ognuno dei polinomi.
Magari prenditi del tempo, se non è possibile in questo momento. Ma è mezz'ora e ti sei assicurato. Voglio solo fare uno specchio. Prendo lo stesso file e lo insegno in due modi. Poi butteremo tutto sul sito di controllo e vedremo tutto. Che ne dici?
è possibile combinare le tabelle usando la funzione rbind()
MLP1 <- rbind(Train1, Test)
Cos'è Test(Train2)? E perché la tabella di allenamento e la tabella di test dovrebbero essere combinate? Il test dovrebbe essere separato, al fine di testare il modello già addestrato su di esso.
Non tutto verrà fuori così facilmente e velocemente come vuoi tu. Questo è nel modello di Reshetov che si possono semplicemente alimentare i dati, e il modello stesso setaccerà i predittori, determinerà i pesi, il numero di neuroni, e così via. Ma non si può fare con un neurone regolare, è necessario selezionare i parametri per il neurone tramite crossvalidation, per esempio come nell'esempio che ho scritto qui oggi, o come negli articoli di Vladimir Perervenko.
Guarda di nuovo quello che ho scritto lì -https://www.mql5.com/ru/forum/86386/page753#comment_6821981
Basta incollare in quel codice i vostri dati come descritto ed eseguire. Se tutti i predittori sono presi uno per uno e non filtrati, allora sarà probabilmente troppo male dalla prima volta. Dopo aver eseguito il codice, eseguite anche il comandomax(gaResult@fitness), questo mostrerà il punteggio R2 del miglior modello trovato dalla genetica. Se la stima è vicina a 1 o inferiore è buona, se è vicina a 0 o addirittura negativa è cattiva.
Poi inPREDICTOR_COLUMNS specificate il numero esatto di colonne che avete identificato come buone, e ancora una volta eseguite il codice, il modello sarà addestrato solo su questi predittori. Idealmente il miglior punteggio del modello trovato dalla genetica dovrebbe essere vicino a 1 e l'accuratezza sulla tabella di allenamento e di test dovrebbe essere 1.00.
La tabella di test dovrebbe essere temporizzata rigorosamente dopo i dati di addestramento, come se questo modello stesse già facendo trading sul mercato.
Se non succede niente di buono con quel codice (anche conKFOLDS=10) - allora non va bene. Se funziona, allora c'è una buona alternativa al modello di Reshetov e possiamo sistemare ulteriormente il codice ed esportare il modello in mql.
Il mio punto è che se si fa qualcosa come nel modello di Reshetov, si aggiunge qualcosa in più, poi si prende un neurone ordinario e in qualche modo lo si mescola con i passi precedenti, e si aspetta che tutto funzioni come quello di Reshetov - si rivelerà un processo lungo e inutile, cosa che non condivido assolutamente.
Se voglio lo stesso risultato di Reshetov, ma in R, allora devo riscrivere tutto il codice java del modello in R.
Ma ci sono molte alternative. Se funzionano anche meglio di quelli di Reshetov, allora è perfetto, non hai bisogno di altro, tutto è pronto.