Trovare un set di indicatori per alimentare gli ingressi della rete neurale. Discussione. Uno strumento di valutazione dei risultati.

 

Saluti a tutti i partecipanti e visitatori del forum.


Voglio offrire a tutti gli interessati di discutere e cercare un set di indicatori più adatti ad alimentare gli input delle reti neurali.

La redditività del neuronet nel mio programma può essere usata come strumento di stima, posso anche stendere MQL4 Expert Advisor con un neuronet addestrato. Entro limiti ragionevoli, ovviamente.


Ho auto-scritto (in java) perseptron con un numero arbitrario di strati e neuroni in ogni strato che addestro con un algoritmo genetico dalla libreria JGAP (http://jgap.sourceforge.net/).

Il numero di neuroni nel primo strato è uguale al numero di ingressi e nel secondo strato - arbitrariamente, nel terzo strato 1 neurone. La neuronet produce segnali di trading (uscita della neuronet >0,5 - comprare, uscita della neuronet<-0,5 - vendere). I segnali sono elaborati da un tester di trading auto-scritto che in base al segnale della neuronet inverte la posizione (o entra nel mercato, se nessuna posizione è aperta). La funzione obiettivo dell'algoritmo genetico è il profitto risultante. Un tale approccio, a mio parere, ci permette di minimizzare tutti i possibili errori e di portare la formazione il più vicino possibile al trading reale. Esporto la rete addestrata in MQL4 Expert Advisor e la provo nel tester di strategia di MT4. Formo gli input per la rete neurale nell'indicatore MT4 e li carico in un file. L'indicatore e l'Expert Advisor sono formati dal programma e sono scritti nei file (meno confusione e meno errori).

Per me, le reti a 4 strati non danno più profitto (di solito meno) di quelle a 3 strati, ma richiedono più tempo per allenarsi.
Ho allenato una rete 8-10-1 per 4 giorni su un Core2 Quadro 2.3. 10 fili paralleli con diverse popolazioni iniziali che competono per vedere "chi ha più profitto". 4 giorni passati circa 4000 generazioni con 200 cromosomi in una popolazione. Il massimo profitto è stato ottenuto nelle prime 2000 generazioni, oltre questo, il profitto non è aumentato. Il più grande aumento di profitto è stato nelle prime 100 generazioni.

Ho controllato i risultati di questa rete nel tester di strategia MT4. Ho scoperto che la rete non raggiunge quasi mai la soglia +-0,5 e il segnale di trading non viene attivato. La ragione non è chiara, cioè ho controllato la correttezza dell'esportazione in MQL4 (con gli stessi valori di input in Java e MQL4 la rete dà gli stessi valori, forse l'intero flusso in entrata avrebbe dovuto essere presentato, non alcuni valori casuali). Ho abbassato la soglia a 0,4 e sembra funzionare... Poi ho scoperto che l'Expert Advisor non può aprire una posizione in una volta sola... Il mio Expert Advisor chiuderà la barra e il prezzo avrà il tempo di muoversi prima della barra successiva. Nel periodo di apprendimento (sto imparando dal 1-08-09 al 1-10-09) il profitto in MT4 era inferiore a quello del mio tester, nel periodo di test in MT4 (dal 1-10-09 al 1-11-09), la rete era redditizia. Ho guardato quali punti di entrate non redditizie si verificano e ho avuto l'impressione che i dati che entrano nella rete neurale portano informazioni insufficienti...

I rete neurale di ingresso: (k=100)

a[0]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k;
a[1]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[2]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[3]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[4]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[5]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.9;
a[6]=(iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.8;
a[7]=(iMA(NULL,0, 377,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.6;
Capisco come funzionano gli indicatori, ma non ne capisco abbastanza di loro e del mercato per scegliere da solo un numero minimo di indicatori...

Ho cercato nel forum e ho trovato (l'autore del post da cui ho preso l'idea, purtroppo, non lo ricordo):

a[0]=(iMA(NULL,0, 3,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[1]=(iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[2]=(iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[3]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[4]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[5]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[6]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i))*140;
a[7]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i))*130;
a[8]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i))*120;
studiato in 10 threads, 200 generazioni, dimensione della popolazione 200 per il periodo 1-08-09 a 1-10-09 (il mio tester java dà i risultati):
rete 9-10-1 : profitto 10521
9-20-1 netto: profitto 10.434
9-30-1 rete : profitto 10361
rete 9-50-1 : profitto 10059
il risultato è buono, ma con la versione precedente sembrava essere migliore... dovrò mettere con gli input precedenti (non ho salvato i risultati dell'ultimo allenamento)

Sono necessari moltiplicatori aggiuntivi per regolare i valori nell'intervallo da -1 a +1


Dopo aver letto quello che ho scritto, ho iniziato a pensare a un possibile errore nell'esportazione della rete neurale addestrata nell'Expert Advisor - dovrebbe essere testata di nuovo.

P.S. Ora sto scrivendo una rete neurale ricorrente di struttura arbitraria (da quanto ho capito, la rete neurale ricorrente tiene conto non solo del valore, ma anche dell'angolo di inclinazione).

 

Il problema è vicino al tuo. L'approccio è diverso.

Sono ancora meno genetista che ingegnere, ma ci capisco qualcosa.

Lasciate che vi faccia qualche domanda, la funzione obiettivo di massimizzare il punteggio non è l'opzione migliore. Se ho capito bene dall'esempio di cui sopra - si sta andando a cercare un insieme di sistemi, nel tuo caso - 9, beh, a colpo d'occhio ottimizzando le fermate profitti + più fantasia totale almeno un sistema (qui usiamo un indicatore) ha almeno 2-3 cento possibili varianti. Non otterremo quelle varianti all'interno della cornice, ad esempio CCI o RSI cadranno fuori dalla vista. Allora abbiamo un indicatore magico per il momento attuale. Che sia mov(20) -mov(10) > < 0. Come valutare o almeno stimare quanto durerà la situazione.

 
iliarr >> :

Ho un perseptron auto-scritto (in java) con un numero arbitrario di strati e neuroni in ogni strato che addestro con un algoritmo genetico dalla libreria JGAP (http://jgap.sourceforge.net/).

Come si fa la formazione? Si prega di descrivere l'algoritmo di addestramento.

Se ricordo bene - JGap, è solo una libreria per algoritmo genetico e niente più, niente a che fare con NS. Forse la questione è come si forma il genoma e la correttezza della selezione delle funzioni di fitness.

 

Ci sono molte insidie nell'addestramento di una rete con Ga, che difficilmente riuscirete a risolvere... Per lo meno la domanda "Per quanto tempo la rete funzionerà così bene come in allenamento?" non mi sembra possibile, quando ci si allena con Ga.

Raccomando di andare a una risoluzione di problemi di previsione standard con ns-i.

 
rip >> :

Come si svolge la formazione? Si prega di descrivere l'algoritmo di addestramento.

Se ricordo bene - JGap è solo una libreria per l'algoritmo del gene e niente di più, non ha niente a che fare con NS. Forse la questione è come si forma il genoma e la correttezza della selezione delle funzioni di fitness.

JGap è una libreria che implementa un algoritmo genetico. per me è una scatola nera che ha bisogno di ricevere una funzione obiettivo che dipende da un vettore di una certa lunghezza. l'algoritmo genetico di questa libreria seleziona i valori di questo vettore in modo che la funzione obiettivo sia massima. la mia funzione obiettivo produce profitti da una storia passata da un emulatore di trading che riflette i segnali di una rete neurale. il vettore di cui l'algoritmo genetico seleziona i valori determina i pesi delle reti neurali.

ivandurak >> :

Il problema è vicino al tuo. L'approccio è diverso.

Sono meno un genetista che un ingegnere, ma capisco il succo del discorso.

Lasciate che vi faccia qualche domanda, la funzione obiettivo che massimizza il punteggio non è l'opzione migliore. Se ho capito bene dall'esempio di cui sopra - si sta andando a cercare un insieme di sistemi, nel tuo caso - 9, beh, a colpo d'occhio ottimizzando le fermate profitti + più fantasia totale almeno un sistema (qui usiamo un indicatore) ha almeno 2-3 cento possibili varianti. Non otterremo quelle varianti all'interno della cornice, ad esempio CCI o RSI cadranno fuori dalla vista. Allora abbiamo un indicatore magico per il momento attuale. Che sia mov(20) -mov(10) > < 0. Come stimare o almeno valutare quanto durerà la situazione benigna.

Purtroppo, non ho abbastanza risorse di calcolo per cercare gli indicatori ottimali (rete 9-10-1 in 10 threads, 200 generazioni, dimensione della popolazione 200 da 1-08-09 a 1-10-09 appresa in un'ora, anche se il numero di pesi dei neuroni (lunghezza del vettore che l'algoritmo genetico raccoglie) = 181)

Ho bisogno di un set di indicatori che riflettono la situazione del mercato. gli indicatori dovrebbero essere semplici, preferibilmente standard MT4 (questione di implementazione e possibili errori) ci sono solo 30 di loro. nessun obiettivo Gli indicatori dovrebbero dare informazioni dove il mercato va. ho bisogno di loro per ottenere più informazioni possibili dalle fluttuazioni dei prezzi.


Mi piace qui... Penso come e cosa scrivere, formulare, e più comprensione appare... grazie al forum e a te ivandurak. :)

 
iliarr >> :

JGap è una libreria che implementa un algoritmo genetico. la mia funzione target è una scatola nera che ha bisogno di ricevere una funzione target che dipende da un vettore di una certa lunghezza. l'algoritmo genetico di questa libreria si adatta ai valori di questo vettore in modo che la funzione target sia massima. la mia funzione target genera profitto dalla storia passata da un emulatore di trading che processa i segnali della rete neurale. il vettore i cui valori l'algoritmo genetico si adatta, definisce i pesi dei neuroni della rete neurale.

È esattamente quello che voglio dire...


Come si forma un vettore che poi si passa a JGap, è solo un vettore di valori W o sono valori W codificati.

Qual è la funzione f di destinazione. Posso fare un esempio - se prendiamo come obiettivo la funzione f E[i](t) = D[i](t) - Y[i](t), dove E è un errore, D è un valore atteso all'uscita, Y è un valore ottenuto quando si alimenta il campione di allenamento X, i è la norma del neurone, t è il numero di epoche. Se prendiamo E[i](t) = Sign(D[i](t) - Y[i](t))*(D[i](t) - Y[i](t))^2 su un certo numero di compiti, il risultato è molto migliore. Diciamo, se formiamo una serie che riflette gli attrattori dei sistemi dinamici classici (Lorenz, Henon, Rössler,...), possiamo anche addestrare la rete ad approssimare tali dati, non profondamente ma comunque.


Non l'ho provato :) perché non credo che funzionerà :)

 
Con un design come questo, è possibile ottenere eviti quasi verticali senza scivolare. Affronterà la questione del sovrallenamento ai neuroni?
 
IlyaA >> :
Con un design come questo, si può ottenere un eviti quasi verticale senza slittamento. Ha intenzione di affrontare la questione della riqualificazione al neurone?

E potrebbe non esserci alcuna riqualificazione ... Se l'autore graficizza l'errore sul campione di prova, si può dire subito cosa succede con la riqualificazione.

 
rip >> :

E la riqualificazione potrebbe non avvenire ... Se l'autore cita come grafico di errore su un campione di prova, si può dire a colpo d'occhio cosa succede al sovrallenamento.


Sono d'accordo. funziona con una scatola nera. il sovrallenamento è molto probabile. Caro iliarr puoi pubblicare un orario per la formazione.
 
iliarr >>:.............

Non dovresti usare le braccia ondeggianti. O meglio, non dovreste usare solo le medie mobili. Cercate di sperimentare una serie di diversi tipi di indicatori, preferibilmente l'algoritmo di ogni indicatore dovrebbe essere radicalmente diverso dagli altri. Poi otterrete più informazioni per la rete.

Un altro punto.

State usando un sistema di trading inverso basato sui segnali NN. Questo è esattamente lo stesso dell'esperto di muvingaverage standard. Né meglio né peggio.

Cerca un modo per determinare le dimensioni di SL e TP con l'aiuto di NN, e modi per accompagnare le posizioni aperte. È anche possibile aprire a caso.


StatBars ha scritto :>>.

Nella formazione della rete con ha un sacco di insidie, che difficilmente si possono risolvere... Per lo meno, risolvere la domanda "Per quanto tempo la rete funzionerà bene come in allenamento?" non mi sembra possibile, quando si allena con Ga, per niente.

Raccomando di andare a una soluzione standard del problema di predizione ns-ey.

GA è solo uno strumento di ottimizzazione (cacciavite per la macchina). Con differenze minime potete usarlo o qualsiasi altro algoritmo di ottimizzazione (cacciavite).

 

Ciao

Sono sempre stato interessato a conoscere i NS, ma appena comincio a leggere un po' di letteratura sull'argomento la mia testa comincia a bollire e alla fine non riesco nemmeno a capire cosa siano i NS

potresti fare un esempio semplice (sulle dita, per così dire) per spiegare cos'è

Grazie