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

 
Vizard_:
Yur, fare una versione normale del programma (o aggiornata) per la gente)))

1.Lasciate che legga i file standard di questo tipo - intestazione (con virgolette e senza), dati, delimitatori lasciate che mangi zpt, point.zpt, tabulazione. Esempio -

"Date";"V1";"A77";"V23A";"Целевая"
01.01.2000;4.999995E-03;1.499891E-03;-2.000213E-03;-5.000234E-03;1

2. lasciare che solo 10 ingressi siano utilizzati per il modello, ma rendere possibile caricarne molti, quindi
in una scheda separata, o impostare tappi (si selezionano gli ingressi), o altro.

3. senza normalizzazione (o disattivata), perché se i dati sono inizialmente centrati su 0, dopo la conversione
x-x.min/....(o qualsiasi cosa tu abbia) - vola via))

4.Butta fuori la casualità (o commutabile), lascia solo dividere i dati in due parti, conta in ordine e produce la % di previsioni di successo per 1 (per 0 non)

5.Fatto l'importanza degli input - bene!

6.Lasciate che oltre alla formula che è uscita, esca l'intero!, cioè ora

doppio x2 = 2,0 * (v5 + 1,0) / 2,0 - 1,0;
doppia decisione = -0.2632437547312642 -0.2634178652535958 * x2
+ 0.05267978803936412

dobbiamo -

Nome obiettivo = -0.2632437547312642 -0.2634178652535958 * inserimento costruzione x2= (2.0 * (v5 + 1.0) / 2.0 - 1.0)
+ 0.05267978803936412

otteniamo -

Nome obiettivo = -0.2632437547312642 -0.2634178652535958 * (2.0 * (v5 + 1.0) / 2.0 - 1.0)
+ 0.05267978803936412

Otterrete un dispositivo in qualche modo utilizzabile per test rapidi. Poi si può ancora inserire ecc, semplice (non avido)
algoritmi, con una scelta... Altrimenti lo strumento è inutile. Mentre il file viene modificato, questo e quello... È più facile usare qualcos'altro...
Dov'è la versione 7?
No... Mi piace, è abbastanza robusto. Quindi 100 punti, Yura.
 
SanSanych Fomenko:

Così così - solo non abbastanza cervello e tempo.

Bisogna iniziare con la variabile obiettivo, e poi bisogna abbinarla ai predittori, e poi ricontrollarli con la matematica, per così dire. Comunque, il processo è noioso e non so come formalizzarlo.

L'ha presa al volo. Lo so. Sono stato sveglio tutta la notte a pensare. Vedi, costruiamo modelli basati su predicati per l'output di IDEAL. Abbiamo una generalizzazione del 50-60% in rare occasioni. Selezionare gli ingressi per l'uscita IDEAL è difficile, se non impossibile. Che importa se l'OUTPUT è UNIDEALE. E se ci permettiamo degli errori che porteranno a una generalizzazione al 100%? Così facendo, sapremo di cosa è capace l'input e se questo output NECESSARIO guadagna (anche se con errori) allora ha diritto a vivere anche in futuro. All'inizio ho pensato che abbiamo bisogno di una doppia ottimizzazione, del modello stesso e della variabile di uscita. TUTTAVIA, poi mi ha colpito. Se il modello è addestrato fino al 60% di generalizzazione, allora sostituendo le formule nell'indicatore e ottenendo segnali sui campioni di addestramento e di test, otteniamo il risultato che permette al sistema di raggiungere il 100%. Significa che se riceviamo segnali sui campioni di addestramento e di test e cambiamo la variabile di uscita in accordo con questi segnali, otteniamo proprio il 100% di apprendimento. Da qui la conclusione. Avendo ottenuto diversi modelli con il 50-60% di generalizzazione, selezioniamo il modello che ha guadagnato (guadagnato) sull'area di allenamento e di test. Questo suggerisce che in generale i segnali di base ha guadagnato (quelli che hanno portato un profitto sufficiente), mentre i segnali dove ha perso non erano troppo non redditizio (condividere il tuo sorriso e tornerà a voi più di una volta), soprattutto, abbiamo guadagnato alla fine del periodo. Quindi è così.......
 
Vizard_:
4.Butta fuori la casualità (o disabilitata), lascia solo dividere i dati in due parti, contare in ordine e produrre la % di previsioni di successo per 1 (non c'è bisogno di 0)

Se si cerca di usare jPrediction per il forex, questa è probabilmente la cosa principale da aggiungere. Ci sono molti modelli che possono dividere i dati in modo casuale in due parti, poi allenarsi sulla prima e mostrare buoni risultati anche sulla seconda parte. Ma la maggior parte di questi modelli sarà inefficace sui nuovi dati. Non ci sono dipendenze costanti in Forex, buoni risultati su un campione di prova casuale non garantiscono buoni risultati su nuovi dati. L'unico modo per assicurarsi che un modello sia adatto al forex è il test di roll forward:

Il modello dovrebbe mostrare una buona capacità predittiva sui dati segnati in rosso. Ora in jPrediction tale test deve essere fatto manualmente reinserendo i dati per ogni caso di test, non è buono per un lavoro serio.
E sono d'accordo che è meglio mostrare un punteggio solo per i dati di test che un totale per training+test.
Tutti i voti che jPrediction produce ora sono inadeguati per il forex, e solo fuorvianti.

Ecco a proposito come viene fatto il roll forward nel pacchetto caret per R:

http://topepo.github.io/caret/splitting.html(sezione Divisione dei dati per le serie temporali)

library(caret)
caretObj <- train(x = trainData[,1:(ncol(trainData)-1)],
                  y = trainData[,ncol(trainData)],
                  trControl = trainControl(method = "timeslice", initialWindow=1000, horizon=300, fixedWindow=TRUE),
                  verbose = TRUE)

Il modello sarà addestrato sui primi 1000 campioni, poi testato sui campioni 1001-1300. Poi passa a 300, allena 301-1300, testa 1301-1600, ecc. fino a quando non si esauriscono gli esempi di allenamento

 
Vizard_:
Yur, fai una versione normale del prog (o aggiornata) per la gente))))

1.Lasciate che legga i file standard di questo tipo - intestazione (con o senza virgolette), dati, delimitatori lasciate che affretti zpt, point.zpt, tabulazione. Esempio -


2.Può usare solo 10 input per il modello, ma rendere possibile caricarne molti, quindi
In una scheda separata, si possono mettere dei marcatori (si selezionano gli ingressi) o qualcos'altro.

3. senza normalizzazione (o disattivata), perché se i dati sono inizialmente centrati su 0, dopo la conversione
x-x.min/....(o qualsiasi cosa tu abbia) - vola via))

4.Butta fuori la casualità (o commutabile), lascia solo dividere i dati in due parti, conta in ordine e produce la % di previsioni di successo per 1 (per 0 non)

5.Fatto l'importanza degli input - bene!

6.Lasciate che oltre alla formula che viene emessa, venga emessa la formula completa!


7. Dov'è la versione 7?
  1. Il punto è che la virgola in Excel è usata per separare la parte intera di un numero dalla parte frazionaria. Se aggiungo altri delimitatori, coloro che modificano le selezioni in diverse applicazioni non saranno in grado di modificarle senza ulteriori balletti in jPrediction. Cioè al momento tutto è reso più o meno compatibile con i fogli di calcolo. Al momento il parser è implementato solo per i file CSV ed è fatto su misura per i fogli di calcolo. Ma jPrediction è costruito in OOP ed è possibile estendere l'interfaccia per altri formati.
  2. Il secondo punto è che jPrediction non ha e non avrà mai impostazioni aggiuntive. Il lavoro dell'utente in jPrediction è quello di prendere un campione pronto e premere F8 per ottenere un modello o un messaggio "Garbage in, Garbage out" in un tempo ragionevole. Se ti piace pasticciare con gli algoritmi di apprendimento, sintonizzare i programmi, progettare l'architettura di rete, ma non l'attività di ricerca in termini di selezione di buoni dati per il compito, lascia che usino altri pacchetti ML. Ci sono molti pacchetti di questo tipo ora, e potresti passare il resto della tua vita a scavare in essi. Il punto principale del machine learning è che la generalizzabilità del modello dipende solo dalla qualità dei dati del campione, non dagli algoritmi e dalle loro impostazioni. Quindi, dovreste cercare i problemi nel campione, non provare a modificare qualcosa in jPrediction.
  3. Vedi punto 2. 2.
  4. Vedi par. 2
  5. -
  6. L'output non è una formula, ma un codice per portare il modello ad altre applicazioni. Al momento il codice per il porting alle applicazioni Java è implementato. Più tardi si prevede di portare il codice del modello a MQL. Questo codice dovrebbe essere il più conciso possibile, e non un lungo sprawl. Perciò, tutte le cose inutili sono state rimosse, e tutto ciò che si ripete spesso viene messo separatamente.
  7. Il sito del progetto è all'indirizzo jprediction.com e c'è anche una voce di menu "Download" per scaricare le ultime versioni.

Se a qualcuno non piace molto qualcosa in jPrediction, il progetto è aperto con Open Source sotto licenza GNU GPL e fare dei fork da esso, cambiando e modificando qualcosa lì, non solo non è proibito, ma in qualche misura anche benvenuto.

 
Dr.Trader:

Se si cerca di usare jPrediction per il forex, questa è probabilmente la cosa principale da aggiungere. Ci sono molti modelli che possono dividere i dati in modo casuale in due parti, poi allenarsi sulla prima e mostrare buoni risultati anche sulla seconda parte. Ma la maggior parte di questi modelli sarà inefficace sui nuovi dati. Non ci sono dipendenze costanti in Forex, buoni risultati su un campione di prova casuale non garantiscono buoni risultati su nuovi dati. L'unico modo per assicurarsi che un modello sia adatto al forex è il test di roll forward:

Il modello dovrebbe mostrare una buona capacità predittiva sui dati segnati in rosso. Ora in jPrediction tale test deve essere fatto manualmente reinserendo i dati per ogni caso di test, non è buono per un lavoro serio.
E sono d'accordo che è meglio mostrare un punteggio solo per i dati di test che un totale per training+test.
Tutti i voti che jPrediction dà ora sono inadeguati per il forex, e solo fuorvianti.

Ecco a proposito come viene fatto il roll forward nel pacchetto caret per R:

http://topepo.github.io/caret/splitting.html(sezione Divisione dei dati per le serie temporali)

Il modello sarà addestrato sui primi 1000 campioni, poi testato sui campioni 1001-1300. Poi passa a 300, allena a 301-1300, testa a 1301-1600, ecc. fino all'esaurimento degli esempi di allenamento.

Informazioni super. Grazie!
 
Dr.Trader:

Tutte le stime che jPrediction sta dando ora sono inadeguate per il forex, e solo fuorvianti.

Si tratta di accuse infondate, vale a dire ciò che viene comunemente chiamato "stronzata". Per dimostrare l'efficacia di Walk Forward, si prega di fornire risultati comparativi da modelli derivati in jPrediction e modelli derivati dopo Walk Forward, in modo tale che possano essere sottoposti a controlli incrociati per "lousiness". Se tali risultati confermano le tue parole, allora avrebbe senso sostituire l'algoritmo di test attualmente implementato in jPrediction con Walk Forward.

Mi è capitato più volte che idee apparentemente "ovvie", dopo l'implementazione e la prova con l'esperienza, si rivelino "vuote". Solo una piccolissima parte delle idee è efficace e spesso solo dopo un ulteriore editing con un "file". Questo perché mancano i dettagli delle idee. E il diavolo è proprio in questi dettagli.

Linus Torvald (creatore del kernel Linux) non si stanca di ripetere: "Prima o poi la teoria incontra la pratica. E la pratica è sempre il criterio della verità. Sempre!".

Un ulteriore problema di Walk Forward è che riceviamo molti modelli in ogni fase. Quale di questi modelli dovrebbe essere mantenuto come modello di lavoro e secondo quali criteri dovrebbe essere selezionato?

 
Yury Reshetov:

Si tratta di affermazioni non comprovate non comprovate, cioè ciò che è comunemente noto come stronzate. Per dimostrare l'efficacia del Walk Forward, si prega di fornire studi comparativi dei modelli jPrediction e dei modelli post-Walk Forward, in modo che possano essere sottoposti a un controllo incrociato per "lousiness". Se tali risultati confermano le tue parole, allora avrebbe senso sostituire l'algoritmo di test attualmente implementato in jPrediction con Walk Forward.

Ho incontrato più volte che idee apparentemente "ovvie", una volta implementate e testate dall'esperienza, si rivelano "vuote". Solo una piccolissima parte delle idee è efficace, e spesso solo dopo un'ulteriore revisione "di file". Questo perché mancano i dettagli delle idee. E il diavolo è proprio in questi dettagli.

Linus Torvald (creatore del kernel Linux) non si stanca di ripetere: "La teoria incontra la pratica prima o poi. E la pratica si rivela sempre il criterio della verità. Sempre!".

Un ulteriore problema di Walk Forward è che riceviamo molti modelli in ogni fase. Quale di questi modelli dovrebbe essere mantenuto come modello di lavoro e secondo quale criterio dovrebbe essere selezionato?

Non c'è bisogno di litigare. Stiamo lavorando su un tema di ricerca molto complesso. Ci sono molte supposizioni. E questi presupposti portano all'apprendimento eccessivo e all'out-sampling.

Due semplici regole: inganna il mercato, non ingannare te stesso.

Camminare in avanti è ovviamente un buon metodo. Ma i parametri principali sono la profondità di apprendimento e la lunghezza del test. Allo stesso tempo (!!!) se questi parametri sono regolati in modo tale che il risultato sulla posizione in avanti diventi migliore, si sovrallenerà Walk Forward! Cioè, su un grande pezzo facciamo ripetutamente l'ottimizzazione Walk Forward. Su un altro chunk non sovrapposto proviamo i migliori parametri di Walk Forward su "training" ed eseguiamo un altro full wolf forward, ma lo facciamo una volta sola. Se il risultato è buono, allora il modello sta raccogliendo le dipendenze. Se il risultato è cattivo, allora abbiamo semplicemente riqualificato Walk Forward su un modello non così buono.

C'è lo stesso problema con i test una tantum su un campione in ritardo. Ci sto lavorando ora: liberare i miei risultati dal sovrallenamento. I risultati della convalida incrociata dovrebbero essere correlati al campione differito per il test finale. Detto questo, selezionando il miglior modello tramite crossvalidazione si otterranno approssimativamente i migliori risultati fuori campione. Altrimenti - se non c'è correlazione o correlazione negativa - abbiamo un modello inadeguato per il forex che deve essere cambiato.

 
Yury Reshetov:

Si tratta di accuse infondate, cioè di quelle che nel linguaggio comune si chiamano stronzate. Per dimostrare l'efficacia di Walk Forward, si prega di presentare i risultati degli studi comparativi dei modelli jPrediction e dei modelli post-Walk Forward in una forma che possa essere sottoposta a un controllo incrociato per "lousiness". Se tali risultati confermano le tue parole, allora avrebbe senso sostituire l'algoritmo di test attualmente implementato in jPrediction con Walk Forward.

Ho incontrato più volte che idee apparentemente "ovvie", una volta implementate e testate dall'esperienza, si rivelano "vuote". Solo una piccolissima parte delle idee è efficace, e spesso solo dopo un'ulteriore revisione "di file". Questo perché mancano i dettagli delle idee. E il diavolo è proprio in questi dettagli.

Linus Torvald (creatore del kernel Linux) non si stanca di ripetere: "La teoria incontra la pratica prima o poi. E la pratica si rivela sempre il criterio della verità. Sempre!".

Un ulteriore problema di Walk Forward è che riceviamo molti modelli in ogni fase. Quale di questi modelli dovrebbe essere mantenuto come modello di lavoro e secondo quale criterio dovrebbe essere selezionato?

Con tutto il mio rispetto per te, Reshetov, spetta agli autori di biciclette dimostrare il loro posto sotto il sole, compresa la loro terminologia come "generalizzabilità". La convenienza della posizionedel Dr.Trader sta proprio nel fatto che tutte le prove necessarie sia di teoria che di verifica pratica da parte di milioni di utenti delle idee che esprime sono state fatte prima di lui, spesso molti anni fa. Lui, invece, si limita a dare esempi concreti di utilizzo. E la correttezza del post in discussione è evidente sia intuitivamente che teoricamente.
 
Alexey Burnakov:

Non vale la pena di litigare.

Sono d'accordo. Ma questo richiede di ridurre al minimo il numero di accuse infondate nel thread. L'opzione migliore è dare i risultati di studi comparativi con la possibilità di un doppio controllo.

Alexey Burnakov:

Stiamo lavorando su una ricerca molto complessa.

Alcuni lavorano e altri si girano i pollici senza prove (non puntiamo il dito).

Alexey Burnakov:

Non vale la pena combattere.

Sono d'accordo.

AlexeyBurnakov:

Ci sono molte supposizioni qui. E questi presupposti portano a una sovra-educazione e a un crollo fuori dal campione.

Non si possono mettere ipotesi sul pane e metterle in tasca. Quindi tutto dovrebbe essere controllato empiricamente, piuttosto che fare ipotesi non provate, per non calpestare il rastrello del sovrallenamento e del precipitare fuori campione.


AlexeyBurnakov:

Camminare in avanti è ovviamente un buon metodo. Ma i parametri principali sono la profondità di apprendimento e la lunghezza del test. Allo stesso tempo (!!!) se affrontiamo questi parametri in modo tale che il risultato sulla traccia in avanti diventi migliore, sovralleneremo Walk Forward! Cioè, su un grande pezzo facciamo ripetutamente l'ottimizzazione Walk Forward. Su un altro chunk non sovrapposto, proviamo i migliori parametri Walk Forward su "training" ed eseguiamolo ancora una volta. Se il risultato è buono, allora il modello raccoglie le dipendenze. Se il risultato è cattivo, allora abbiamo semplicemente riaddestrato Walk Forward su un modello non così buono.

C'è lo stesso problema con i test una tantum su un campione in ritardo. Ci sto lavorando ora: liberare i miei risultati dal sovrallenamento. I risultati della convalida incrociata dovrebbero essere correlati al campione differito per il test finale. Detto questo, selezionando il miglior modello tramite crossvalidazione si otterranno approssimativamente i migliori risultati fuori campione. Altrimenti - se non c'è correlazione o è negativa - abbiamo un modello inadeguato per il forex che deve essere cambiato.

La linea di fondo è che tutti i metodi hanno vantaggi e svantaggi. Le supposizioni esagerano i meriti e non tengono conto degli svantaggi.

Un punto ancora più grande è che nessun metodo permette di selezionare i modelli secondo il criterio della migliore qualità, e tutti i metodi selezionano secondo il principio del rifiuto - filtrando solo quelli consapevolmente inadatti. Nessun metodo in ML può calcolare l'idoneità potenziale di ciò che rimane dopo il rifiuto.

Soprattutto in ambienti non stazionari. È possibile selezionare apparentemente i modelli più adatti in termini di generalizzabilità, ma domani qualche capo della Banca Centrale in una riunione scorreggerà qualcosa e tutti i modelli andranno in malora.

 
Yury Reshetov:


Il punto è che tutti i metodi hanno vantaggi e svantaggi. Le supposizioni esagerano i meriti e non tengono conto dei demeriti.

Un punto ancora più importante è che nessun metodo seleziona i modelli secondo il miglior criterio di qualità, e tutti i metodi selezionano secondo il principio del rifiuto - filtrando solo ciò che è noto per essere inadatto. Nessun metodo in ML può calcolare il valore potenziale di ciò che rimane dopo il rifiuto.

Tanto più in ambienti non stazionari. Sembrerebbe possibile selezionare i modelli più adatti in termini di generalizzabilità, ma domani qualche capo della Banca Centrale farà una pernacchia e tutti i modelli andranno in malora.

Così è. Solo sperimentalmente. Si può capire se la selezione di un modello (in allenamento + test) è stata migliore o meno applicando questo modello fuori dal campione. Puoi farlo per diversi modelli. Quando la selezione di un buon modello nel campione dà un buon risultato fuori dal campione - significa che il modello è adatto al problema scelto.