Come formare correttamente i valori di input per il NS. - pagina 29

 
sergeev писал (а) >>

Parafrasando, possiamo dire che questa è una prova del fatto che è possibile ottenere una classificazione linearmente separabile per il mercato.

Io stesso, dopo aver letto alcuni libri intelligenti sul posto circa l'impossibilità di fare "esclusiva o" da rete lineare, l'ho presa come impossibilità di usare reti lineari per il mercato (per quella ragione logica che il mercato è molto più complicato di una semplice "esclusiva o" :).

E forse non lo è? Forse Yuri ha ragione? E non abbiamo bisogno di scopare un mucchio di libri sul non lineare, ma solo di battere tutto con i piani?

La classificazione separabile lineare può essere ottenuta per QUALSIASI problema.

MA devi cercare tu stesso dei modelli e formare degli input basati su di essi, mentre un perseptron non lineare può trovare dei modelli da solo.

Come ho scritto sopra - se ottieni risultati positivi con un perseptron lineare, non ne hai bisogno, le regole sono già state trovate.

 
Bene, allora la questione lineare/non lineare è chiusa.
 

Modello di rete. Viene eseguito in un thread separato (CWinThread).

Versione non ancora finita come desiderato. Nessun controllo dell'interruzione del thread.

Logica delle operazioni sui file mal implementata.

Un sacco di commenti errati sul codice.

15.07.08

File:
better1.rar  50 kb
 
Fatta la lettura dal flusso di lavoro tramite timer (per non caricare dati inutili)
Portato in puntatori per leggere informazioni da un flusso di lavoro (per ridurre il numero di copie)
Funzione che traccia l'errore quadratico medio (per vedere come la rete sta "viaggiando" verso i minimi locali)
Aggiunto pulsante per fermare i calcoli e salvare i pesi correnti in un file.
Aggiunti commenti normali

16.08.08
File:
better1_1.rar  53 kb
_hilo_1.mq4  4 kb
_target_2.mq4  2 kb
 
sergeev писал (а) >>
Ha reso la lettura del flusso di lavoro tramite timer (per evitare di sovraccaricare i dati).
Portato in puntatori per leggere le informazioni dal flusso di lavoro (per ridurre il numero di copie).
Funzione che traccia l'errore quadratico medio (per vedere come la rete "viaggia" per minimi locali)
Aggiunto pulsante per fermare i calcoli e salvare i pesi correnti in un file.
Aggiunti commenti normali

16.08.08

Invidiabile prolificità di Sergeyev Alexey!

 
Sart писал (а) >>

Una prolificità invidiabile da Alexei Sergeev!

+1 :)

 
1. Fatto uno scambio più o meno normale tra MetaTrader e VC++ tramite intestazioni.
- CreatePattern - crea un file di input, vettori di output, scrive anche informazioni sul numero di pattern e la dimensionalità degli output/uscite nell'intestazione.
- Poi VC++ legge e crea un array simile in se stesso. Dopo l'elaborazione della griglia crea un file con lo stesso nome ma con il tipo .wgh dove registra i pesi della griglia, le soglie e nell'intestazione del modello della griglia (numero di strati, le loro dimensioni)
- indicatore NeuroInd.mq4 (NeuroIndP) - legge il file dei pesi e costruisce un modello analogo in se stesso e ora usa lo stesso algoritmo di CreatePattern per passare attraverso le barre e dare gli input a questa griglia. L'indicatore costruisce il vettore di uscita. NeuroIndP - legge lo stesso ma mostra i punti di ingresso.

Lo script CreatePattern e NeuroInd sono "legati" dagli stessi algoritmi di vettori di input ma con la differenza che NeuroInd può avere diverse dimensioni del vettore di input (a seconda di come decidiamo di elaborare la rete). Dovremmo cercare di universalizzare questo algoritmo in qualche modo e metterlo in un file separato (per esempio in <InputPatternAlg.mqh>). In questo modo solo può essere cambiato in questo complesso.
-----------
2. Ho eliminato i CLayer intermedi nella struttura delle classi VC++ (penso che sia stato un errore :) + risparmiamo leggermente memoria + l'algoritmo di calcolo della griglia coincide con quello dell'indicatore).
 

Più lavoro con la rete, più mi rendo conto che non sono tanto importanti gli ingressi ma la coppia ingresso-uscita. Gli articoli della prima pagina di StatBars saranno molto "utili per imparare" in questo senso. Ho anche notato che se l'output è continuo piuttosto che binario, l'approssimazione è più veloce e probabilmente migliore. (poche coppie incoerenti e ripetitive in-out).

Gli ingressi vanno bene in linea di principio. Un quadrato di trattini (per esempio 5 periodi di 5 valori per periodo) dà input unici non ripetitivi.

Per quanto riguarda le uscite...

Ho testato l'uscita con il rapporto (Up-Dn)/(Up+Dn). Si adatta rapidamente.

L'unico inconveniente è che il rapporto non dà un'idea approssimativa del valore assoluto di Up e Dn, che sarebbe auspicabile :) Non fa differenza se è 10/20 o 50/100.

Se ci limitiamo ad emettere un semplice Up-Dn (per conoscere l'ampiezza della deviazione del prezzo e in quale direzione) e poi lo comprimiamo con un'arcotangente, si scopre che si verifica la saturazione dei valori.

(Devo dire subito che sto usando l'arcotangente e non la compressione lineare, perché non voglio cercare e legare i massimi).

È possibile dividere (Up-Dn) per il coefficiente per diminuire il valore di saturazione, allora la saturazione si verificherà su grandi valori, che saranno già rari e non ci sarà grande ripetibilità e incoerenza.

Un'altra opzione è quella di provare reti separate solo per cambiare Up e per Dn.

Mi chiedo se qualcuno ha altre uscite?

 
sergeev писал (а) >>

Più lavoro con la rete, più mi rendo conto che non sono tanto importanti gli ingressi ma la coppia ingresso-uscita. Gli articoli della prima pagina di StatBars saranno molto "utili per imparare" in questo senso. Ho anche notato che se l'output è continuo piuttosto che binario, l'approssimazione è più veloce e probabilmente migliore. (poche coppie incoerenti e ripetitive in-out).

Gli ingressi vanno bene in linea di principio. Un quadrato di trattini (per esempio 5 periodi di 5 valori per periodo) dà input unici non ripetitivi.

Per quanto riguarda le uscite...

Ho testato il rapporto (Up-Dn)/(Up+Dn) sull'uscita. Converge rapidamente.

L'unico inconveniente - questo rapporto non dà un'idea approssimativa del valore assoluto di Up e Dn, che sarebbe auspicabile :) Non fa differenza se è 10/20 o 50/100.

Se ci limitiamo ad emettere un semplice Up-Dn (per conoscere l'entità della deviazione del prezzo e in quale direzione) e poi lo comprimiamo con un'arcotangente, si scopre che si verifica la saturazione dei valori.

(Devo dire subito che sto usando l'arcotangente e non la compressione lineare, perché non voglio cercare e legare i massimi).

È possibile dividere (Up-Dn) per il coefficiente per diminuire il valore di saturazione, allora la saturazione si verificherà su grandi valori, che saranno già rari e non ci sarà grande ripetibilità e incoerenza.

Come altra opzione è probabilmente necessario provare separatamente le reti solo per cambiare Up e per Dn.

Mi chiedo se qualcuno ha altre uscite?

Alimentate una specie di vettore di input ad ogni barra e richiedete un output ad ogni barra?

 
Questa versione di MPS è un po' meglio, ma non è ancora quello che ti serve, cioè Short è seguito da Long, e viceversa.
File:
mps.zip  7 kb