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

 
Dr.Trader:

Una piccola aggiunta al post precedente. No, non ci sono delta. Dovrò fare una prova.

Comunque, ho provato a cercare una correlazione sui tuoi dati. Più probabilmente no che sì. Mi è capitato di trovare qualcosa sulla metà delle osservazioni prese a caso dal treno. Ho iniziato a controllare l'altra metà e la stessa dipendenza non c'è. Si scopre che o è assente del tutto, o i dati sono costruiti in modo tale che non si possono trovare buone dipendenze su di essi.

Lasciatemi provare di nuovo, però. Darò il mio feedback.

Alexey

 

Ho il sospetto che manchi qualcosa in questi dati. È come nel tuo compito dal tuo primo post - se rimuovi una qualsiasi di quelle 6 voci dal campione, il risultato diventa imprevedibile. Il Forex dipende chiaramente dal suo prezzo passato, dall'ora del giorno, ecc. E questo "itd" è esattamente ciò che manca nei miei dati, e quindi i modelli semplicemente non possono trovare adeguatamente alcuna regolarità e descrivere la logica. Les apparentemente non può provare diverse combinazioni come "sottrarre l'alto dal basso" e prendere il meglio, e queste cose devono essere aggiunte al campione stesso. Attualmente sto rifacendo il mio script che salva i dati forex in csv, aggiungendovi un sacco di delta, più le distanze dai top passati di zigzag, secondo i consigli. Più tardi posterò un nuovo file di dati per la sperimentazione.

 
SanSanych Fomenko:

In allegato ci sono una serie di articoli che presumibilmente risolvono il problema di ripulire l'insieme originale dei predittori dal rumore, e con una qualità molto maggiore. Purtroppo non ho tempo di provarlo al momento. Forse qualcuno lo proverà e pubblicherà il risultato?

Sono stato in grado di ripetere il processo descritto. Secondo i risultati - il mio set di predittori descrive il risultato con lo 0,1% di confidenza, o qualcosa del genere... C'è molta teoria là fuori al di là della mia conoscenza, non ho capito tutto.

Ho aggiunto 3 file. Puoi semplicemente cambiare il percorso del file csv lì e puoi eseguirlo. Il risultato richiesto dovrebbe essere nell'ultima colonna del csv, tutto il resto sono predittori. Non normalizzate nulla in anticipo, alimentate i dati così come sono.

1) Regressione a componenti principali 01. Un po' di codice dalla parte introduttiva dell'articolo, mi sembra che manchi qualcosa, perché ho degli errori quando eseguo il codice. Dovrebbe dare ad ogni input un punteggio, e disegnare un grafico, qui, purtroppo, non capisco cosa a cosa e come applicarlo.

2) Regressione a componenti principali 03. Regressione a componenti principali, Pt. 2: Metodi Y-Aware. Ho saltato la prima parte, perché l'articolo dice che la prima parte è un altro algoritmo più debole.
Il codice è diviso in due parti e devono essere eseguite una dopo l'altra per guardare il grafico disegnato in R dopo ogni parte.

La prima esecuzione - è necessario copiare ed eseguire tutto dal file all'inizio del secondo passo (l'inizio del secondo passo è evidenziato in grassetto STEP 2). La console R mostrerà una tabella dove più basso è il valore dell'input, migliore è. Valore = 1 = spazzatura. Più il grafico, lì più la linea è lunga e peggio è, simile alla tabella.

Poi dobbiamo eseguire il codice del secondo passo. Alla fine ci sarà un grafico, più la linea è lunga rispetto all'input, più è affidabile (era viceversa nel passo 1). C'è anche una variabile examplePruneSig nel codice che è responsabile del vaglio degli ingressi secondo il valore psig dalla tabella nel passo 1. Potete impostare il valore della variabile =1, se volete vedere il valore trasformato di plausibilità di tutti gli input. Perché è possibile che un input sia stato valutato male nel primo passo, ma sia diventato migliore nel secondo passo. Si raccomanda di prendere o qualche valore di soglia o examplePruneSig = 1/numero di_inputs, ma non ci sono istruzioni precise.

Il terzo passo è l'analisi delle componenti principali (prcomp) stessa. Questo è di nuovo qualcosa di nuovo per me, ma il punto è che questa funzione cerca di produrre molti "componenti principali" (PC) (qualcosa come variabili interne, da cui dipende il risultato desiderato). Ognuna di queste variabili interne si basa su un diverso insieme di dati di input. Allora il compito si riduce a trovare l'insieme minimo di tali PC che può determinare in modo affidabile il risultato. E il campione risultante di predittori è esso stesso i predittori di quei PC che rientrano in quell'insieme minimo.
L'articolo in sé non risolve questo problema, prende solo i primi 2 PC e guarda se ci riesce o no. Ma potrei essermi perso qualcosa, quindi se capite il prcomp, fareste meglio a leggerlo voi stessi.
Ma, alla fine del passo, sarà disegnato un diagramma dei primi 5 PC, e gli ingressi utilizzati da essi. Più lunga è la linea sul diagramma, più importante è l'ingresso.

Quarto, quinto, sesto passo - valutazione del risultato sui dati di allenamento e di test.


3) Regressione a componenti principali 04. Una funzione di un altro pacchetto che fa la stessa cosa di Principal Components Regression 03. Tuttavia, un bonus è che setaccia il PC, e lascia un insieme minimo di quelli che possono descrivere il risultato con il 95% di precisione.
Ma non ci sono esempi e grafici adeguati, immagino che si debba usare qualcosa della Principal Components Regression 03.


tl;dr:

1) Setacciare i valori rumorosi. Prendiamo il file "Principal Components Regression 03", eseguiamo solo il codice fino al secondo passo (escluso il secondo). R conterrà una tabella, solo gli ingressi con valore psig inferiore alla soglia dovrebbero essere presi. Un valore di "1" è rumore e casuale. "0" è buono. Una soglia di (1/numero di ingressi) è incerta. Questo metodo non dà alcuna garanzia che gli ingressi siano campionati correttamente, piuttosto rimuove semplicemente i valori veramente casuali e rumorosi.

2) Un approccio più complesso. Un algoritmo astuto crea alcune componenti principali che possono essere utilizzate per calcolare il risultato. Il PC è un tipo di funzione che descrive qualche processo interno che avviene nel modello da modellare. E il risultato del modello stesso è un insieme di PC che interagiscono. Poi, prendiamo un insieme minimo di PC che descrivono il risultato con alta precisione, guardiamo gli input usati per questi PC. Il file "Principal Components Regression 04" ci permette di ottenere l'insieme minimo di tali PC, ma non è chiaro cosa farne ulteriormente, dobbiamo estrarre i predittori utilizzati.

Ecco di nuovo l'articolo stesso e il codice per esso.

http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/

https://github.com/WinVector/Examples/blob/master/PCR/YAwarePCA.Rmd


Principal Components Regression, Pt. 2: Y-Aware Methods | R-bloggers
Principal Components Regression, Pt. 2: Y-Aware Methods | R-bloggers
  • Nina Zumel
  • www.r-bloggers.com
In our previous note, we discussed some problems that can arise when using standard principal components analysis (specifically, principal components regression) to model the relationship between independent (x) and dependent (y) variables. In this note, we present some dimensionality reduction techniques that alleviate some of those problems...
 
Dr.Trader:

Ho il sospetto che manchi qualcosa in questi dati. È come il tuo compito nel primo post - se rimuovi anche solo una di quelle 6 voci dal campione, il risultato diventa imprevedibile. Il Forex dipende chiaramente dal suo prezzo passato, dall'ora del giorno, ecc. E questo "itd" è esattamente ciò che manca nei miei dati, e quindi i modelli semplicemente non possono trovare adeguatamente alcuna regolarità e descrivere la logica. Les apparentemente non può provare diverse combinazioni come "sottrarre l'alto dal basso" e prendere il meglio, e queste cose devono essere aggiunte al campione stesso. Attualmente sto rifacendo il mio script che salva i dati forex in csv, aggiungendovi un sacco di delta, più le distanze dai top passati di zigzag, secondo i consigli. Più tardi posterò un nuovo file di dati per gli esperimenti.

Ho provato a cercare ancora un po'. E ha fatto un controllo di convalida. Ma la dipendenza trovata non è stata confermata. Tutto sommato, penso che non ci siano abbastanza informazioni nei dati. Cercare di espandere la lista degli input, sì.

Ed ecco i miei dati forex: https://drive.google.com/drive/folders/0B_Au3ANgcG7CYnhVNWxvbmFjd3c

dat_train_final è un file per la formazione del modello. Ha la storia di 5 coppie di valute per 10 anni e tutti i miei predittori.

Molti_samples - ho bisogno di caricare in R. Questa è una lista - in ogni elemento c'è un campione di validazione, e ce ne sono 49 in totale. Ognuno di essi può essere convalidato.

Meet Google Drive – One place for all your files
  • accounts.google.com
Google Drive is a free way to keep your files backed up and easy to reach from any phone, tablet, or computer. Start with 15GB of Google storage – free.
 

Non riesco a vedere i tuoi file, il link è solo una cartella vuota.

Comunque ecco il mio nuovo file per il modello di allenamento su eurusd (h1, 5 barre, l'obiettivo è l'aumento/diminuzione del prezzo per la prossima barra). L'ho analizzato seguendo l'articolo sopra menzionato principal-components-regression-pt-2-y-aware-methods ed è risultato che i dati descrivono in modo affidabile meno dell'1% dei risultati.
(RData di SanSanych ha questo numero più del 10% per Rat_DF1), quindi sembra che ho di nuovo spazzatura. È improbabile allenare il modello su questo file, è più adatto se si vuole allenare per setacciare i predittori.

L'archivio contiene 2 file, la condizione è quella di addestrare il modello nel primo file (è più conveniente dividerlo in più pezzi per il test e la validazione, di default Rattle lo divide in 75%/15%/15%), poi, quando gli input sono selezionati e il modello è addestrato, fare un test fisico sul secondo file. Se l'errore è inferiore al 45% - hai la possibilità di fare trading con un tale modello nel forex. Potresti non guadagnare, ma puoi ottenere dei bonus dai broker per il numero di scambi e sconti. Se l'errore di classificazione sul secondo file è inferiore al 40% - questa è già una strategia redditizia.

File:
 
Dr.Trader:

2) Regressione a componenti principali, Pt. 2: metodi Y-Aware. Ho omesso la prima parte perché l'articolo dice che la prima parte è un altro algoritmo più debole.

Come mi è sembrato, forse mi sbaglio, ma l'incertezza del tuo risultato è causata dal non capire l'essenza stessa del metodo delle componenti principali. E l'essenza è la seguente.

Dai predittori esistenti, create nuovi predittori che abbiano alcune nuove proprietà utili.

Il risultato è presentato in una tabella, con PC1, PC2... nell'intestazione, i nomi delle righe della tabella sono i nomi dei tuoi predittori e nelle colonne sotto ogni PC sono numeri - i coefficienti per i quali devi moltiplicare il tuo predittore iniziale per formare il valore di PC. Cioè: per una certa barra prendiamo i valori dei predittori iniziali, li moltiplichiamo per i coefficienti e otteniamo il valore del PC, poi la barra successiva e così via. Come risultato, oltre ai vostri vettori iniziali, per esempio Ask, otteniamo un altro vettore

Tutti i PC nella tabella sono ordinati. Il primo è il MS che spiega maggiormente la variabilità nel set originale, il secondo è il MS che spiega maggiormente la variabilità da ciò che rimane del primo MS. Per esempio, PC1 = 0,6, PC2 = 0,2, allora in totale PC1+PC2 spiegano 0,8 della variabilità. Di solito, per grandi insiemi di predittori, 5-6 di queste stesse "componenti principali" sono sufficienti a spiegare oltre il 95% della variabilità. Questo nel caso in cui la maggior parte dei predittori sono rumore e ci sono vere componenti "principali" tra di loro!

Ho descritto le classiche "componenti principali". L'articolo è interessante per noi perché, al contrario di quello classico, calcola la variabilità rispetto alla variabile obiettivo. Le soglie, d'altra parte, sono necessarie per scegliere qualcosa da un insieme di predittori completamente senza speranza. Questo non mi sembra rilevante per noi. È rilevante, per esempio, per le statistiche in sociologia, dove è molto difficile raccogliere qualcosa di aggiuntivo. Nel nostro caso, anche una sola coppia di valute può essere utilizzata per costruire un numero enorme di predittori.

Forse si potrebbe fare un'altra prova (hit) su questi componenti fondamentali?

PS.

1. Non dimentichiamo che le componenti principali richiedono una preventiva normalizzazione dei dati grezzi

2. Le componenti principali risultanti hanno la notevole proprietà di essere indipendenti l'una dall'altra.

3. Le componenti principali possono essere previste.

 

Ora capisco, grazie per il chiarimento. Ho saputo di questo modello solo dall'articolo. Pensavo che PC1 e PC2,3,4,... corrispondessero a diversi set di predittori, non a coefficienti. Ho visto la tabella dei coefficienti, ora ho scoperto rapidamente dove prendere cosa.

Il codice di PrincipalComponentRegression04.txt sembra troppo complicato. Inoltre, non sembra esserci una definizione di variabilità rispettoalla variabile obiettivo, sono tornato al PrincipalComponentRegression03.txt da quell'archivio che ho allegato questa mattina.

Bisogna fare i primi 5 passi.

Il prossimo,

> model$coefficients

(Intercetta) PC1 PC2

0.02075519 0.40407635 -0.42250678

Il risultato dell'esecuzione dovrebbe essere intercept + coef1 * PC1 + coef2 * PC2 + ... + eventuale PC rimanente

I valori di PC1, PC2. :

> proj

> proj

PC1 PC2

X_clean 0.00516309881 0.00477076325

X1_clean 0.00142866076 0.00149863842

X2_clean -0.00008292268 0.00001010802

.....

PC1 = X_clean * 0,00516309881 + X1_clean*0,00142866076 +.

Ora è un mistero per me se il prefisso "clean" sia un riferimento per prendere il valore originale degli input, X, X1, X2,... prima delle normalizzazioni e delle trasformazioni, oppure no.

Più tardi, prenderò un esempio più semplice e calcolerò tutti i valori manualmente per confrontare se ho azzeccato le formule o no. Solo un'ipotesi per ora)

Ma poi si scopre che questo metodo non è destinato ad eliminare i predittori; è piuttosto destinato ad addestrare un modello che ignora il numero massimo di predittori. Tutto quello che possiamo fare è calcolare il coefficiente medio per ogni predittore ed escludere qualcosa al di sotto della soglia.
Questo modello è molto simile a neuroncu, ma senza una funzione di attivazione e senza spostamenti sui neuroni dello strato interno. Ma l'essenza è la stessa.

Un altro problema: quanti componenti del PC prendere. Se ottengo meno del 95% di confidenza devo tornare al passo 3 e cambiare proj <-extractProjection(2,princ) da due a tre, poi eseguire i passi 3,4,5, calcolare l'errore e se è inferiore al 95% tornare al passo 3 e aumentare nuovamente il numero di componenti.

Se avessimo accesso diretto a R in MT5, avremmo un modello finito e pronto per il trading. Capisco che questo modello non soffra del problema del retraining, è molto buono se lo è. Cioè il livello di confidenza del 10% è raggiunto e questo è un bene.

Quasi tutto è chiaro sul modello. Sarebbe molto buono implementarlo in MT5, per implementare solo la logica del processo decisionale per coefficienti. Non è chiaro come collegare R con MT5. Posso esportare tutti i dati da mt5 in csv e poi elaborarli in R, allenare il modello e scrivere i coefficienti in un altro csv. CSV con i coefficienti letti da Expert Advisor. E inoltre sarà molto male perché R ha molte funzioni che normalizzano i dati prima di calcolare il PC da esso. Ripetere questo codice per la normalizzazione in MT5 è difficilmente possibile. Dobbiamo pensare.

 
Dr.Trader:

Ora capisco, grazie per il chiarimento. Ho saputo di questo modello solo dall'articolo. Pensavo che PC1 e PC2,3,4,... corrispondessero a diversi set di predittori, non a coefficienti. Ho visto la tabella dei coefficienti, ora ho scoperto rapidamente dove prendere cosa.

Il codice di PrincipalComponentRegression04.txt sembra troppo complicato. Inoltre, non sembra esserci una definizione di variabilità rispettoalla variabile obiettivo, sono tornato al PrincipalComponentRegression03.txt da quell'archivio che ho allegato questa mattina.

Bisogna fare i primi 5 passi.

Il prossimo,

(Intercetta) PC1 PC2

0.02075519 0.40407635 -0.42250678

Il risultato dell'esecuzione dovrebbe essere intercept + coef1 * PC1 + coef2 * PC2 + ... + eventuale PC rimanente

I valori di PC1, PC2. :

> proj

PC1 PC2

X_clean 0.00516309881 0.00477076325

X1_clean 0.00142866076 0.00149863842

X2_clean -0.00008292268 0.00001010802

.....

PC1 = X_clean * 0,00516309881 + X1_clean*0,00142866076 +.

Ora è un mistero per me se il prefisso "clean" sia un riferimento per prendere il valore originale degli input, X, X1, X2,... prima delle normalizzazioni e delle trasformazioni, oppure no.

Più tardi, prenderò un esempio più semplice e calcolerò tutti i valori manualmente per confrontare se ho azzeccato le formule o no. Solo un'ipotesi per ora)

Ma poi si scopre che questo metodo non è pensato per lo screening dei predittori, ma piuttosto per l'addestramento di un modello che ignora il numero massimo di predittori. Tutto quello che possiamo fare è calcolare il coefficiente medio per ogni predittore ed escludere tutto ciò che è sotto la soglia.
Questo modello è molto simile a neuroncu, ma senza una funzione di attivazione e senza spostamenti sui neuroni dello strato interno. Ma l'essenza è la stessa.

Un altro problema: quanti componenti del PC prendere. Se ottengo meno del 95% di confidenza devo tornare al passo 3 e cambiare proj <-extractProjection(2,princ) da due a tre, poi eseguire i passi 3,4,5, calcolare l'errore e se è inferiore al 95% tornare al passo 3 e aumentare nuovamente il numero di componenti.

Se avessimo accesso diretto a R in MT5, avremmo un modello finito e pronto per il trading. Capisco che questo modello non soffra del problema del retraining, è molto buono se lo è. Cioè il livello di confidenza del 10% è raggiunto e questo è un bene.

Quasi tutto è chiaro sul modello. Sarebbe molto buono implementarlo in MT5, per implementare solo la logica del processo decisionale per coefficienti. Non è chiaro come collegare R con MT5. Posso esportare tutti i dati da mt5 in csv e poi elaborarli in R, allenare il modello e scrivere i coefficienti in un altro csv. CSV con i coefficienti letti da Expert Advisor. E inoltre sarà molto male perché R ha molte funzioni che normalizzano i dati prima di calcolare il PC da esso. Ripetere questo codice per la normalizzazione in MT5 è difficilmente possibile. Dobbiamo pensare.

Per quanto vedo, Regressione a componenti principali, Pt. 2: Metodi Y-Aware

Dalla visione superficiale del testo, capisco che la scorza è che la scalatura è basata sulla funzione di destinazione. Nella PCA convenzionale, la funzione obiettivo non è presa in considerazione affatto. Per questo motivo, si suppone che le prime componenti siano le componenti più importanti per spiegare la funzione obiettivo, piuttosto che spiegare la variabilità dell'intero insieme di predittori!


Un altro problema è quanti componenti del PC prendere

Questa è la ragione di tutto il trambusto. Intuitivamente, non ci sono soglie. Se le prime 5 componenti non spiegano più del 95% della variabilità, allora dovremmo cercare un nuovo set di predittori. Anche se potrei sbagliarmi.

Sul modello quasi tutto è chiaro. Sarebbe molto buono implementarlo in MT5.

Tutto funziona bene in MT4. C'è una libreria Pascal con codice sorgente. Non l'ho provato personalmente, ma per me se MT4 è in grado di fare appello alla libreria su pascal, allora anche MT5 dovrebbe farlo.

L'appello a R si presenta così.

1. OnInit imposta la connessione con R. Se ci sono dati speciali preparati, l'area di lavoro viene caricata. A parte questo, si carica il codice in R organizzato in una o molte funzioni. Il numero di stringhe in ogni funzione è ovviamente arbitrario - determinato dalla logica.

2. Il corpo dell'Expert Advisor o dell'indicatore chiama queste funzioni.

Se consideriamo che R ha la grafica più ricca non legata alla finestra del terminale, abbiamo grandi opportunità di visualizzare i dati parallelamente al terminale.

 
SanSanych Fomenko:
Qui sto leggendo, leggendo.... e non riesce a capire quale sia la variabile obiettivo prima da un punto di vista formale: un numero reale (regressione) o un valore nominale (classificazione). Inoltre, se stiamo discutendo la misura in cui i predittori influenzano la variabile obiettivo, è una buona idea conoscere il significato sostanziale di questa stessa variabile obiettivo.

Paradossalmente, la classificazione è la stessa cosa della regressione.

Solo per la regressione l'output è reale, mentre per la classificazione è probabilità.

E l'obiettivo per la regressione è una curva continua, mentre per la classificazione sono impulsi (0, 1) o (-1,+1).

Questo output viene poi tradotto nella classe appropriata (ifelse(y > 0,5, 1, 0).

 
Dr.Trader:

Non riesco a vedere i tuoi file, il link mostra solo una cartella vuota.


questa è la formazione: https://drive.google.com/file/d/0B_Au3ANgcG7CN2tTUHBkdEdpVEU/view?usp=sharing

questa è la convalida: https: //drive.google.com/file/d/0B_Au3ANgcG7CZmFWclFOd0RqNFk/view?usp=sharing

la convalida dovrebbe essere processata così load(validation_file)

ogni voce della lista contiene un unico campione di validazione, con osservazioni indipendenti. Non c'è quasi nessuna sovrapposizione tra i campioni di convalida perché le osservazioni in essi sono prese da punti temporali casuali. Ogni campione di convalida può essere trattato come una stima puntuale del commercio.

Questo è fatto in modo da non simulare scambi che avvengono ad ogni minuto. Gli scambi sono modellati ogni 12 ore circa.

Motivazione: