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

 
SanSanych Fomenko:
La cosa degli "oggetti" in R è molto più complicata che in molti linguaggi di programmazione.
Gli oggetti non sono diversi, solo le funzioni str, plot, summary e simili sono sovraccaricate molte volte, ogni tipo ha la sua implementazione
 
Alexey Burnakov:
Non capisco bene perché ci voglia così tanto tempo. Qual era il numero di optim_var? Dovrebbe essere entro il 10. Impostatelo a 1200 secondi e dovrebbe essere qualcosa.

Ho molti predittori (9602) ed è per questo che ci vuole così tanto tempo. Sono presi per il 2015 da eurusd d1, tutti i tipi di prezzi, tempi e indicatori lì. Non sono ancora uscito da d1, quindi il numero di esempi di allenamento è solo 250+, per il numero di giorni di trading in un anno. Niente salti.

optim_var_number = 0,8662363

File:
trainData.zip  14378 kb
 
Dr.Trader:

Ho molti predittori (9602) ed è per questo che ci vuole così tanto tempo. Sono presi per il 2015 da eurusd d1, tutti i tipi di prezzi, tempi e indicatori lì. Non sono ancora uscito da d1, quindi il numero di esempi di allenamento è solo 250+, per il numero di giorni di trading in un anno. Niente salti.

optim_var_number = 0,8662363

Giocherò con il tuo set. Tutto dovrebbe volare.
 
SanSanych Fomenko:

L'ultima ha la 1a colonna che dice che se si prende solo PC1 allora si spiega lo 0,9761 della variabilità (proporzione cumulativa), se si prendono DUE componenti - PC1 e PC2 allora si spiega lo 0,99996, ecc.

PC1 PC2 PC3 PC4 PC5

Deviazione standard 2,2092 0,34555 0,01057 0,008382 0,004236

Percentuale della varianza 0,9761 0,02388 0,00002 0,000010 0,000000

Proporzione cumulativa 0,9761 0,99996 0,99998 1,000000 1,000000

Si è rivelato un po' un casino - questo metodo funziona solo se si lavora con tutti i componenti possibili. La funzione prcomp ha un parametro "tol", che è NULL per default. Ma può essere assegnato qualsiasi valore da 0 a 1, per ridurre il numero di componenti trovati. Funziona così: quando si cerca un nuovo componente, sdev del primo viene preso e moltiplicato per tol. Non appena sdev del nuovo componente scende sotto questo prodotto, i nuovi componenti non saranno generati. Per esempio, se tol = 0.1, allora tutti i componenti con sdev <0.22 saranno scartati, quindi avrete solo i due componenti principali. Se tol=0.003, allora rimarranno solo i componenti con sdev > 0.0066276, cioè solo quattro. Se tol=NULL (default) la funzione genererà il numero massimo di componenti, ma ci vuole troppo tempo, quindi voglio abbreviare questo processo. Se uso tol allora tutto funziona più velocemente e ci sono meno componenti, ma in questo caso si rompe. È in qualche modo calcolato sulla base dei soli componenti trovati. La proporzione cumulativa dell'ultimo componente trovato sarà sempre 1. Anche se si trovano solo 2 componenti invece di migliaia - la propagazione cumulativa del secondo componente passerà a 1 (per esempio da 0,1 nel caso in cui tutti i componenti siano generati) e, di conseguenza, anche la propagazione cumulativa di PC1 aumenterà. È possibile cheanche la Proporzione Cumulativa cambi in modo errato quando si setacciano i predittori.

Quindi la proporzione cumulativa non può essere affidabile, se si lavora seriamente con pca y-aware allora si dovrebbe scrivere la propria funzione per calcolare la variabilità spiegata.

 
Ildottor Trader:

Si è rivelato un po' cattivo - questo metodo funziona solo se si lavora con tutti i componenti possibili. La funzione prcomp ha un parametro "tol", che è NULL per default. Ma si può impostare su qualsiasi valore da 0 a 1, per ridurre il numero di componenti trovati. Funziona così: quando si cerca un nuovo componente, sdev del primo viene preso e moltiplicato per tol. Quando sdev del nuovo componente scende sotto questo prodotto, i nuovi componenti non saranno generati. Per esempio, se tol = 0.1, allora tutti i componenti con sdev <0.22 saranno scartati, quindi avrete solo i due componenti principali. Se tol=0.003, allora rimarranno solo i componenti con sdev > 0.0066276, cioè solo quattro. Se tol=NULL (default) la funzione genererà il numero massimo di componenti, ma ci vuole troppo tempo, quindi voglio abbreviare questo processo. Se uso tol allora tutto funziona più velocemente e ci sono meno componenti, ma in questo caso si rompe. È in qualche modo calcolato sulla base dei soli componenti trovati. La proporzione cumulativa dell'ultimo componente trovato sarà sempre 1. Anche se si trovano solo 2 componenti invece di migliaia - la propagazione cumulativa del secondo componente passerà a 1 (per esempio da 0,1 nel caso in cui tutti i componenti siano generati) e, di conseguenza, anche la propagazione cumulativa di PC1 aumenterà. È possibile cheanche la Proporzione Cumulativa cambi in modo errato quando si setacciano i predittori.

Quindi non ci si dovrebbe fidare della Proporzione Cumulativa, se si lavora seriamente con pca y-aware allora si dovrebbe scrivere la propria funzione per calcolare la variabilità spiegata.

Idea interessante, non per niente ti ho spinto a dare un'occhiata.
 
Dr.Trader:

Ho molti predittori (9602) ed è per questo che ci vuole così tanto tempo. Sono presi per il 2015 da eurusd d1, tutti i tipi di prezzi, tempi e indicatori lì. Non sono ancora uscito da d1, quindi il numero di esempi di allenamento è solo 250+, per il numero di giorni di trading in un anno. Niente salti.

optim_var_number = 0,8662363

Ho guardato il tuo set. O non capisco qualcosa, per esempio non tutte le variabili stanno entrando, o state facendo un grosso errore. Hai molti valori di prezzo grezzi, per esempio, 1,1354 (MA e altri). Non c'è modo di farlo perché si tratta di dati completamente non stazionari. Tutti i dati dovrebbero essere indicatori DIFFERENTI o oscillanti, ed essere omnidirezionali. Trovare le dipendenze in questi dati è un lavoro completamente inutile.
 

Giusto, dimenticavo, hai già detto che i dati dovevano essere preparati appositamente. Ho preso i dati grezzi. Ci sono anche oscillatori tra gli indicatori, cercherò di prendere solo loro.

A proposito, il modello PCA funziona con tali dati, ma ha bisogno di un sacco di centratura, scalatura e qualche rotazione dei dati di origine. Per la neuronica è più facile, ha solo bisogno della normalizzazione dei dati in [0...1].

 
Dr.Trader:

Giusto, dimenticavo, hai già detto che i dati dovevano essere preparati appositamente. Ho preso i dati grezzi. Ci sono anche oscillatori tra gli indicatori, cercherò di prendere solo loro.

A proposito, il modello PCA funziona con tali dati, ma ha bisogno di un sacco di centratura, scalatura e qualche rotazione dei dati di origine. Per la neuronica è più facile, ha solo bisogno della normalizzazione dei dati in [0...1].

No, sicuramente non capisci bene l'importanza della non stazionarietà. Non importa se si tratta di un modello NS o lineare o del mio modello, se i vostri dati sono non stazionari, le dipendenze trovate su di essi sono garantite per non verificarsi al di fuori del campione. Tutti i dati che avete sono prezzo grezzo, MA (prezzo grezzo), apertura delle barre (prezzo grezzo) ecc. dovrebbero essere rimossi dal modello. Devi prendere la loro differenza dall'ultimo prezzo conosciuto.

La scalatura in un intervallo non è possibile qui.

 
Alexey Burnakov:

Se avete dati non stazionari, allora è garantito che le dipendenze trovate su di essi non si verifichino al di fuori del campione.

C'è solo una sfumatura interessante che semina dubbi sull'adeguatezza della riproduzione di tali dati (differenze rispetto ai valori precedenti)

1) per esempio se abbiamo un prezzo,

2) generiamo la sua differenza

3) prendiamo due segmenti di differenze che sono molto vicini tra loro per struttura (che sia euclidea)

4) queste aree appartengono quasi al 100% a un cluster in RF o alle stesse neuroniche e sono considerate situazioni identiche

5) prendiamo poi queste due sezioni (differenze) e le riduciamo di nuovo ai prezzi iniziali, cioè le cumuliamo

E vediamo che queste sezioni sono totalmente diverse, spesso una sezione tende verso l'alto e l'altra verso il basso, cioè non c'è somiglianza, mentre l'algoritmo pensa che siano sezioni identiche...

Cosa ne pensi, Alexey? I tuoi commenti sono interessanti come uomo con esperienza.

 
mytarmailS:

C'è solo una sfumatura interessante che semina dubbi sull'adeguatezza della riproduzione di tali dati (differenze rispetto ai valori precedenti)

1) per esempio se abbiamo un prezzo,

2) generiamo la sua differenza

3) prendiamo due segmenti di differenze che sono molto vicini tra loro per struttura (che sia euclidea)

4) queste aree appartengono quasi al 100% a un cluster in RF o alle stesse neuroniche e sono considerate situazioni identiche

5) prendiamo poi queste due sezioni (differenze) e le riduciamo di nuovo ai prezzi iniziali, cioè le cumuliamo

E vediamo che queste sezioni sono totalmente diverse, spesso una sezione è in tendenza verso l'alto e l'altra verso il basso, cioè non c'è somiglianza, mentre l'algoritmo pensa che queste siano sezioni identiche...

Cosa ne pensi, Alexei? È interessante sentire i tuoi commenti come uomo con esperienza.

Perché dovrebbe essere così? Se le differenze sono uguali, allora le serie integrali coincideranno completamente. Se sono solo simili, la serie integrale sarà simile (per tendenza).

Volevo dire a Trader di leggere le basi della preparazione dei dati. Nessuno presenta prezzi grezzi per l'iscrizione. Questo è già stato fatto centomila volte. I dati instabili portano a dipendenze instabili.