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

 
Andrey Dik:
Per quanto tempo?

Capisco che il tuo codice nell'articolo è già adatto a simulare il trading sui punti trovati ed è giusto usarlo. ) È fantastico.

Beh, diciamo in un paio di giorni di funzionamento della macchina (o una settimana). Un periodo di tempo prevedibile, diciamo.

 
Alexey Burnakov:

Ho capito che il tuo codice nell'articolo è già adatto a simulare il trading sui punti trovati e può essere semplicemente usato. ) È fantastico.

Beh, diciamo in un paio di giorni di funzionamento della macchina.

L'algoritmo in sé funziona e non richiede (a meno che non siate troppo pignoli) lavoro aggiuntivo, mentre un frammento di codice con zz ideale può essere usato come una simulazione di trading con un po' di lavoro aggiuntivo.

Entro un paio di giorni? - No, penso che si possa ottenere un buon risultato molto più velocemente, in ore o addirittura minuti. Nell'articolo la ricerca è durata qualcosa come pochi secondi, ma c'erano 100 barre. Nel vostro caso potrebbe volerci molto più tempo, ovviamente. Potete stimare sperimentalmente il numero di epoche in modo da ottenere il risultato con la precisione specificata e rispettare il limite di tempo.

 
Andrey Dik:

L'algoritmo in sé funziona e non ha bisogno (a meno che non siate troppo schizzinosi) di una messa a punto, ma la sezione di codice con la zz perfetta potrebbe in linea di principio essere usata come una simulazione di scambio con qualche messa a punto.

Entro un paio di giorni? - No, penso che si possa ottenere un buon risultato molto più velocemente, in ore o addirittura minuti. Nell'articolo la ricerca è durata qualcosa come pochi secondi, ma c'erano 100 barre. Nel vostro caso potrebbe volerci molto più tempo, ovviamente. È possibile regolare sperimentalmente il numero di epoche in modo da ottenere il risultato con la precisione desiderata e soddisfare i requisiti di tempo.

Quindi. Grazie. Farò un tentativo. Voglio generare input per le barre dei minuti su tutta la storia. E poi li metterò nel mio esperimento.

Bel lavoro che hai fatto. E il fatto che le voci ideali non coincidano necessariamente con la logica ZZ è una conclusione non banale e importante.

 
Alexey Burnakov:

Ok. Grazie. Farò un tentativo. Voglio generare input per le barre dei minuti su tutta la storia. E poi li metterò nel mio esperimento.

Bel lavoro che hai fatto. E il fatto che gli input ideali non coincidano necessariamente con la logica ZZ è una conclusione non banale e importante.

E grazie. Poche persone hanno prestato attenzione al grassetto, per qualche motivo...

Vorrei aggiungere. L'articolo ottimizza il PPI considerando lo spread medio di uno strumento, ma ora sono propenso a pensare che l'ottimizzazione dovrebbe essere fatta senza spread, mentre lo spread deve essere considerato durante i passaggi di prova.

 
Andrey Dik:

Grazie anche a te. Poche persone prestano attenzione al grassetto, per qualche motivo...

Vorrei aggiungere. L'articolo ottimizza WPI tenendo conto dello spread medio dello strumento, ma ora sono propenso, o meglio sicuro, di credere che l'ottimizzazione dovrebbe essere eseguita senza spread, mentre i trade run di prova dovrebbero essere eseguiti con lo spread.

Per ottimizzare "su ogni barra" lo spread deve ovviamente essere preso in considerazione. Altrimenti una transazione sarà eseguita su ogni barra in direzione del prossimo prezzo aperto. Lo spread rende il compito non lineare e definisce la configurazione ottimale dell'affare.
 
Alexey Burnakov:

LSTM che vedremo più tardi.

Per ora, io e il mio collega siamo arrivati a R^2 0,2 sul test. Alcuni filtri di convoluzione e pochi neuroni in uno strato completamente connesso. L'idea è che la ricorrenza non sia necessaria in quel luogo. Ciò di cui abbiamo bisogno è una corretta estrazione delle caratteristiche.

I risultati finora sono i seguenti per il mio problema (tutti i punteggi R^2 sul set di prova):

ARIMA: 0,14

MLP (NN completamente connessa): 0,12-0,15

GBM: 0,1

Rete convoluzionale (semplice, non sviluppata bene): almeno 0,2

Così, la dipendenza simulata si è effettivamente rivelata non così semplice e i metodi popolari falliscono. Miglioreremo la rete convoluzionale.

Se qualcuno ha il tempo di provare a risolvere il problema (con qualche rete ricorrente), per favore condivida il risultato.

 
Alexey Burnakov:

Finora i risultati per il mio problema sono i seguenti (tutte le stime R^2 sul test set):

ARIMA: 0,14

MLP (NN completamente connessa): 0,12-0,15

GBM: 0,1

Rete convoluzionale (semplice, non sviluppata bene): almeno 0,2

Così, la dipendenza simulata si è effettivamente rivelata non così semplice e i metodi popolari falliscono. Miglioreremo la rete convoluzionale.

Se qualcuno ha il tempo di provare a risolvere il problema (con qualche rete ricorrente), per favore condivida i risultati.

Ho anche lavorato sul mio problema. Ho anche usato NS convoluzionale con strati completamente connessi in cima.

Il miglior risultato che ho ottenuto per R^2 sul test è stato 0,23 .

Sembra essere il soffitto. Aumentare la complessità della rete non dà più nulla. Ma l'uscita della rete non è perfetta. Questo è un dot plot della risposta contro il modello. Si prevede una nuvola a pendenza stretta. Infatti, si può notare che la funzione di risposta complessa non è completamente modellata dalla rete (i salti non sono riconosciuti). La funzione prodotta dalla rete è molto più fluida di quella che avevo previsto.


Forse le persone che hanno familiarità con NS avrebbero qualche idea su come una funzione così complessa potrebbe essere modellata (esempio):

Aumentare il numero di strati, di neuroni?

Infatti, senza la preparazione delle variabili di input, tutti i metodi popolari si sono fusi. Convertire davvero può potenzialmente raccogliere le caratteristiche necessarie (tramite integrazione, differenziazione, smoothing non lineare) e il NS è già addestrato normalmente su di esse. Questo è il potere della convoluzione.

A proposito, il signor Perervenko non ha detto nulla su questo tipo di reti nel suo articolo sulle reti neurali. Beh, ho trovato solo una menzione in tutto l'articolo. E sarebbe possibile rivelare la questione dell'applicabilità alle serie temporali (ponderatamente).

Alexey

 

Voi, soprattutto, date più input.

Ed esempi di formazione.

 
Vadim Shishkin:

Voi, soprattutto, date più input.

Ed esempi di formazione.

Basta così.
 

Più neuroni nello strato nascosto - la funzione più complessa può essere descritta dal neurone, avete bisogno di più strati nascosti e più neuroni in essi.

Ma allora il problema sarà che il neurone usa addizioni e moltiplicazioni consecutive (e per esempio sigmoidi per la funzione di attivazione) per descrivere il target, cioè ovviamente non otterrete la vostra funzione originale, ma una specie di approssimazione. E si può scoprire che questa approssimazione ricorderà alcune caratteristiche nei dati di allenamento, quindi non funzionerà correttamente con i nuovi dati. Quindi a volte è necessario interrompere l'allenamento, vedere se l'errore sul campione di prova è diminuito, e continuare l'allenamento se tutto va bene. Ad un certo punto l'errore sui dati di test comincerà a crescere, allora l'addestramento deve essere fermato completamente.

Inoltre, l'uscita di un neurone è limitata dalla funzione di attivazione. Per popolare - sigmoide è (0;1), relu è [0;inf). I valori target devono essere scalati ad un intervallo diverso, le tue uscite nell'intervallo (-7;7) sono semplicemente irraggiungibili per molti pacchetti.