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

 
Maxim Dmitrievsky:

https://www.mql5.com/ru/code/127

c'è solo qualche errore nel codice, penso che l'indicatore sia normalizzato in modo errato

È corretto, semplicemente si normalizza su un intervallo diverso da [0;1].


Per semplicità puoi lasciare la stessa funzione CalcRegression che hai (ma tieni conto che b ritorna già con segno opposto*, cioè non hai bisogno di cambiare il segno per la seconda volta). Trova sperimentalmente, per quale valore devi moltiplicare il risultato, per ottenerlo nell'intervallo [-0.5;0.5]. E poi aggiungere +0,5 per spostare il centro da 0 a 0,5.


*Questa formula vi darà b con il segno giusto se i prezzi più vecchi hanno l'indice più alto nella matrice.

 
Ildottor Trader:

Tutto è corretto, è solo normalizzato non in [0;1] ma in un altro intervallo.


Per semplicità puoi lasciare la stessa funzione CalcRegression che hai (ma tieni conto che b ritorna già con segno opposto, cioè non hai bisogno di cambiare il segno per la seconda volta). Trova sperimentalmente, per quale valore devi moltiplicare il risultato, per ottenerlo nell'intervallo [-0.5;0.5]. E poi aggiungere +0,5 per spostare la media da 0 a 0,5.


per diversi timeframes abbiamo bisogno di diversi max e min, non è molto conveniente, mi sembra che normalizzare su un intervallo storico più grande sia la cosa migliore
 
Ildottor Trader:

*Questa formula vi darà b con il segno giusto se i prezzi più vecchi hanno l'indice più alto nella matrice.


basta aggiungere un altro buffer normalizzato all'indicatore sopra il buffer esistente :)
 

Anche la pendenza della regressione potrebbe essere interessante. Backtest e forward. In breve, sembra che si possa lavorare con questa logica e sperimentare con diversi predittori.


 
Maxim Dmitrievsky:

Anche la pendenza della regressione potrebbe essere interessante. Backtest e avanti. In breve, sembra che si possa lavorare con questa logica e sperimentare con diversi predittori.


Grazie per il codice, l'ho testato. Sono peggiorato. Ma ho preso solo 1 mese per l'ottimizzazione invece di un anno, volevo controllare rapidamente. Su Fronttest ho visto come l'EA sia prima normale, poi lentamente inizia ad appiattire il bilanciamento e poi rallenta. Vive ancora un po' di dati nuovi, non male.

Cambierei questo

1) double a3 = regr[0]; - l'indice zero è il più vecchio per i dati temporali. L'ultima barra (la più recente) qui sarebbe la 49 (dato che la 50 è stata presa), è meglio. Ma l'ultimo può essere in eccesso, quindi 48 è meglio. È anche necessario controllare se l'indicatore è scoperto.
La stessa cosa con l'rsi, avete rimosso quello che era più nuovo. Ha senso cercare di rimuovere quello con indice zero, in quanto il più obsoleto.

2) La terza versione di Yuri's Expert Advisor ha la funzione RNN con quattro parametri, quindi può essere combinata con 3 rx e il trend. In generale, la funzione può essere completata da nuovi parametri, come scritto nell'articolo di Yuri, ma ogni parametro +1 raddoppierà il numero di coefficienti.

3) Non mi piacciono gli stop e gli stacchi, i loro valori ottimali cambiano costantemente su nuove barre. Per essere più precisi, non ci sono valori ottimali, ci sono solo alcuni valori "convenienti" per un EA su un determinato intervallo di tempo. Inoltre i broker possono disegnare candele prima degli stop. Cercherei di fare una previsione ad ogni nuova barra e semplicemente tenere la transazione in questa direzione fino alla prossima barra e previsione, e lì capovolgere se necessario.

4)

   int handle=iRSI(_Symbol,0,9,PRICE_OPEN);
   double rsi[30];
   CopyBuffer(handle,0,0,28,rsi);

L'handle dovrebbe essere inizializzato in OnInit, e non ogni volta quando si crea un EA. E anche l'array ha 30 elementi, e solo 28 vengono copiati. Cioè, gli indici 28 e 29 non sono accessibili (nessuno lo fa mai, ma non si sa mai), non sono riempiti.

 
Ildottor Trader:


Grazie per il codice, l'ho provato. Ne ho uno peggiore. Ma ho preso solo 1 mese per l'ottimizzazione invece di un anno, volevo testarlo rapidamente. Il fronttest mostra che il mio Expert Advisor è buono all'inizio, poi inizia ad appiattire il bilanciamento e poi scende. Vive ancora un po' di dati nuovi, non male.

Cambierei questo

1) double a3 = regr[0]; - l'indice zero è il più vecchio per i dati temporali. L'ultima barra (la più recente) qui sarebbe la 49 (dato che la 50 è stata presa), è meglio. Ma l'ultimo può essere in eccesso, quindi 48 è meglio. È anche necessario controllare se l'indicatore è scoperto.
La stessa cosa con l'rsi, avete rimosso quello che era più nuovo. Ha senso cercare di rimuovere quello con indice zero come il più vecchio.

2) Nella terza versione dell'EA di Yuri la funzione RNN contiene quattro parametri, è possibile prendere sia 3 rsi che il trend con esso. In generale, la funzione può essere estesa con nuovi parametri, come scritto nell'articolo di Yuri, ma ogni parametro +1 raddoppierà il numero di coefficienti.

3) Non mi piacciono gli stop e gli stacchi, i loro valori ottimali cambiano costantemente su nuove barre. Per essere più precisi, non ci sono valori ottimali, ci sono solo alcuni valori "convenienti" per un EA su un determinato intervallo di tempo. Inoltre i broker possono disegnare candele prima degli stop. Cercherei di fare una previsione ad ogni nuova barra e semplicemente tenere la transazione in questa direzione fino alla prossima barra e previsione, e lì capovolgere se necessario.

4)

L'handle dovrebbe essere inizializzato in OnInit, e non ogni volta quando si crea un EA. E anche l'array ha 30 elementi, e solo 28 vengono copiati. Cioè, gli indici 28 e 29 non sono accessibili (nessuno lo farà, ma potrebbero volerlo), non sono riempiti.


Hmm, sì? Pensavo che lo zero quando si copia il buffer restituisse il primissimo valore. devo controllare...

https://www.mql5.com/ru/docs/series/copybuffer

Ho aggiunto il trailing al posto di sl e così via, i risultati non sono molto migliori

riguardo alla maniglia, sì, per la regressione l'ho messa nell'init, per radsy ho dimenticato di farlo

Lì ho bisogno di scegliere quale avanti con il più alto fattore di profitto, e il backtest dovrebbe essere circa lo stesso, quindi con questi parametri la griglia è in grado di fare una previsione decente. Se do un'occhiata alle statistiche, non vedo perché l'ho mancato, non vedo perché l'ho mancato e non vedo perché.

E RNN3 dà molti meno segnali per qualche motivo.

Non ho ancora capito bene se è meglio che la funzione di normalizzazione prenda un array di 5000 barre invece di 50, in modo da trovare max e min più corretti dall'inizio e non aggiornarli nel tempo, perché all'inizio dei test riceveremo dei valori non proprio correttamente normalizzati per l'entrata, ma più tardi sempre più accuratamente

Inoltre, vorrei ancora detrendere i grafici e alimentare valori più digeribili per la griglia, non sono ancora sicuro di come migliorare, ad esempio, la pendenza di regressione e l'autocorrelazione su una serie stazionaria, dato che non sono molto bravo in econometria, sto guardando video clip ora

E voglio anche confrontare in seguito questa RNN con una normale MLP, ma non ci sarà un confronto del tutto corretto, perché mlp dovrà alimentare qualcosa all'uscita. Un'altra opzione, fare un comitato di 3 RNN e alimentare i loro risultati in RNN :D, o in qualche NS convoluzionale. Ci vorrà molto tempo per ottimizzare anche attraverso claud. Meglio ancora, alimentate 3 RNN in MLP e dategli un output di prezzi incrementali, liberandovi così dell'overtraining, in teoria. Cioè RNN svolgerà un ruolo di autocodificatore http://cyberleninka.ru/article/n/avtoenkoder-podhod-k-ponizheniyu-razmernosti-vektornogo-prostranstva-s-kontroliruemoy-poterey-informatsii


 
Maxim Dmitrievsky:




Trovare una citazione che possa essere applicata all'ARIMA è quasi impossibile. Ma quella fu la fine della lezione.

E GARCH? È molto più promettente e molto utilizzato sul timeframe inferiore a un giorno, anche per il trading ad alta frequenza.

 
SanSanych Fomenko:


Trovare una quotazione alla quale si possa applicare l'ARIMA è quasi impossibile. Ma questa era la fine della lezione.

E GARCH? È molto più promettente e molto utilizzato sul timeframe di meno di un giorno, anche per il trading ad alta frequenza.


Ho appena iniziato a familiarizzare con queste cose, non ho ancora sperimentato. Ho solo sentito parlare di spazzatura :)

Cosa ne pensi dell'uso di RNN come autocodificatore per MLP?

Per quanto ho capito la rete ricorrente è un autocodificatore del tipo con un insieme di regole logiche:


 
Maxim Dmitrievsky:

Bene, e la sottrazione delle tendenze e poi l'applicazione dell'autoregressione ad esse, e poi infilare i valori nel NS, insieme alla pendenza della regressione? Ho appena iniziato a familiarizzare con queste cose, non ho ancora sperimentato

è meglio sperimentare subito!

Risparmierete un sacco di tempo e di conoscenze inutili.

 
SanSanych Fomenko:


Trovare una citazione che possa essere applicata all'ARIMA è quasi impossibile. Ma questa era la fine della lezione.

E GARCH? È molto più promettente e ampiamente utilizzato sul timeframe inferiore a un giorno, anche per il trading ad alta frequenza.

Anch'io l'ho guardato. Imho, non è la nostra area tematica.
Motivazione: