Rete neurale in forma di script - pagina 4

 
rip:
YuraZ:

Non è sempre necessario normalizzare, chi dice che la griglia PUÒ e DEVE funzionare solo con 0 e 1?


Posso allegare una semplice griglia con un esempio, (purtroppo non ci sono materiali a portata di mano in questo momento) - lo farò più tardi

dove una semplice NN risolve questo problema senza preparazione dei dati con normalizzazione

purtroppo questa non è la fonte


l'esempio che ho fatto, però! è come se fosse già normalizzato

la condizione ha due intervalli


1 0-100

2 10-30


avete solo bisogno di trovare il rapporto della posizione in un intervallo - che è noto a

in sostanza questo è il ridimensionamento.

La normalizzazione è quasi sempre necessaria. I dati devono essere all'interno dell'intervallo di definizione della funzione di attivazione.

Nello script il sigmoide è [-1;+1]. Se lo sostituisci con, diciamo, un esponenziale ... o radice quadrata.


http://www.statsoft.ru/home/portal/applications/NeuralNetworksAdvisor/Adv-new/ActivationFunctions.htm








http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


ecco un esempio di creazione di rete ... L'ingresso è BASSO, cioè nessuna normalizzazione

 
YuraZ:

http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


ecco un esempio di creazione di rete ... l'ingresso è BASSO, cioè nessuna normalizzazione


L'utilizzo di dati non normalizzati è talvolta molto utile. Non perdono l'informatività, che può essere persa durante le trasformazioni.

E non c'è un meccanismo formalizzato per determinare l'informatività del campione di formazione...


A proposito, l'articolo non mostra da nessuna parte quale funzione di attivazione viene utilizzata. A quanto pare, qualcosa con l'area di definizione [-inf;+inf] o [0;+inf] ...

 

ha cambiato un po' il programma!

ha cambiato leggermente il formato di uscita


ora SCRIPT considera un dovere calcolare i dati di uscita con alta precisione

naturalmente, il programma non è universale ma specializzato per il numero di ingressi e uscite

ma la dimensione dello strato nascosto viene regolata nel processo di apprendimento



la prossima release - cercherò di renderlo flessibile nel numero di ingressi e uscite

e, in caso di successo, aggiungerò un algoritmo genetico

il cui obiettivo sarà quello di uccidere i NEURONI con un gran numero di errori

e riprodurre i neuroni con pochi errori!

cioè, essenzialmente, cercare quei neuroni nella matrice che hanno il minor numero di errori e riprodursi da loro per sostituire

quei neuroni che si sono comportati male...


1 Il tasso di apprendimento è attualmente basso

2 Cambiare - il numero di neuroni nascosti del 1° livello è casuale senza logica

3 Arresta il processo di apprendimento se ottiene un'alta precisione sui dati campione di ingresso e di uscita


File:
 

Come si usa questo? Mettere uno script sul grafico, mucchi di numeri hanno iniziato a riscrivere... Cosa dicono questi numeri?

 
Blast:

Come si usa questo? Mettere uno script sul grafico, mucchi di numeri hanno iniziato a riscrivere... Cosa dicono questi numeri?

A cosa ti servono? Ho il mio algoritmo GA, ma non ho quasi capito il codice - ho bisogno di tempo per capire dove mettere gli input, come toglierli e quando comprarli, se mai? O sei qui per il Graal?

 
Loknar:
Esplosione:

Come si usa questo? Mettere uno script sul grafico, mucchi di numeri hanno iniziato a riscrivere... Cosa dicono questi numeri?

A cosa ti servono? Ho il mio algoritmo GA, ma non ho quasi capito il codice - ho bisogno di tempo per capire dove mettere gli input, come toglierli e quando comprarli, se mai? O forse sei alla ricerca del Graal qui?

Blast , non cercare un Expert Advisor o un indicatore - è molto lontano.


Questo è più uno studio dei principi di una rete neurale in MQL4

---

in generale, è ragionevole scriverlo in C++ sotto forma di DLL, o altri linguaggi veloci


Loknar - è solo una modifica dello script all'inizio che cerca di ottenere un output più accurato

--

tra l'altro ha cercato di aggiungere un livello :-), per non parlare di uscite ingressi ... l'algoritmo di apprendimento del tubo muore da un momento all'altro...


---

vuole provare qualcosa come

3 uscite

l'uscita non è solo 0 o 1 o -1 0 +1 ma una gamma

x 0 0 - buy hold

0 x 0 - flat (exit buy o sell)

0 0 x vendere - tenere vendere

dove x non è 0 o 1 ma ha qualche deviazione in qualche intervallo per esempio -1.000 0.000 +1.000

cioè può assumere un valore di diciamo 0,1122 o -0,012


la combinazione di tre uscite è analizzata per l'attraversamento dei confini


ingressi 9 per ogni fascia oraria - prendere M1 M5 M15 M30 H1 H4 54 ingressi in totale

alimentiamo la differenza tra le medie 3 5 8 13 21 34 55 89 144 233 per ogni traf

totale 3-5 5-8 8-13 13-21 21-34 34-55 55-89 89-144 144-233 in totale 9 per periodo

otteniamo una sorta di VERIFICA delle medie nella vista a griglia... :-) nella matrice

quando abbiamo qualcosa come il modello 2 3 4 5 6 7 8 9 10 11 fan completamente aperto verso l'alto a giudicare da tutti sembra vendere

quando abbiamo -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 pattern, il pattern è completamente aperto verso il basso - BAY

I numeri sono arbitrari e a volte un modello -1 -3 -7 -10 -15 -20 -30 -40 -80 su un orizzonte temporale più ampio



---

un campione di allenamento di qualcosa come


1 2 1 0 -3 2 3 0 4 M1

-1 2 -1 0 1 2 3 0 -4 M5

...

........................ H4

 

Preparare i dati per la formazione





#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
static int hWR;
 
static double    ma[9][233] ;
static datetime  SaveTime[9];
static int       indx[8]={3,5,8,13,21,34,55,89,144};
static  int iFW = 0;
 
int init()
  {
   hWR = FileOpen( "MA.CSV", FILE_BIN|FILE_WRITE) ; 
   string strPut="DATETIM            |"+
   "m100035|m010058|m010813|m011321|m012134|m013455|m015589|"+
   "m500035|m050058|m050813|m051321|m052134|m053455|m055589|"+
   "m150035|m150058|m150813|m151321|m152134|m153455|m155589|"+
   "m300035|m300058|m300813|m301321|m302134|m303455|m305589|"+
   "h010035|h010058|h010813|h011321|h012134|h013455|h015589|";
 
 
 
// "-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|
   FileWrite(hWR, strPut);
   return(0);
  }
int deinit()
  {
  FileClose(hWR);
  }
 
int start()
{
  iFW = 0;
  getMA( PERIOD_M1 ,1);
  getMA( PERIOD_M5 ,2);
  getMA( PERIOD_M15,3);
  getMA( PERIOD_M30,4);
  getMA( PERIOD_H1 ,5);
  getMA( PERIOD_H4 ,6);
   if ( iFW == 1 )
   {
      PutFile( );
   }
   return(0);
}
void getMA(int TF,int iTF)
{
 if ( SaveTime[iTF] != iTime(Symbol(),TF,0) )
 {
 SaveTime[iTF] = iTime(Symbol(),TF,0);
 ma[iTF][89] =  iMA(Symbol(),TF,89,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][55] =  iMA(Symbol(),TF,55,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][34] =  iMA(Symbol(),TF,34,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][21] =  iMA(Symbol(),TF,21,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][13] =  iMA(Symbol(),TF,13,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 8] =  iMA(Symbol(),TF, 8,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 5] =  iMA(Symbol(),TF, 5,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 3] =  iMA(Symbol(),TF, 3,0,MODE_EMA,PRICE_CLOSE,0);
 iFW = 1;
 }
}
void  PutFile( )
{
 string strPut;
 strPut = TimeToStr( SaveTime[1] , TIME_DATE|TIME_MINUTES|TIME_SECONDS) ;
 for ( int iiTF = 1; iiTF <= 6; iiTF++)
 {
   for ( int jM = 0; jM <= 6; jM++)
   {
      int nMA = indx[jM];
      int nMA_N = indx[jM+1];
      double nn = NormalizeDouble( (ma[iiTF][ nMA] - ma[iiTF][ nMA_N])/Point,0) ;
      string sss = DoubleToStr( nn , 0);
      if ( nn >= 0 )
         sss =" "+sss;
      if (MathAbs(nn)  <= 9)
         sss =" "+sss;
       
         
      // strPut = strPut+DoubleToStr( ma[iiTF][ nMA] , 4)+"|";
      strPut = strPut+"|"+sss;
   }
 }
 FileWrite(hWR, strPut);
}
 
Loknar:
Blast:

Come si usa questo? Mettere uno script sul grafico, mucchi di numeri hanno iniziato a riscrivere... Cosa dicono questi numeri?

A cosa ti servono? Ho il mio algoritmo GA, ma non ho quasi capito il codice - ho bisogno di tempo per capire dove mettere gli input, come toglierli e quando comprarli, se mai? O sei andato per il graal?

Inizialmente mi piace l'idea delle reti neurali. Tutto quello che so è che avendo 1000 punti in qualche modo la rete convergerà verso un punto... e che l'autotrading è stato vinto con un EA basato sull'algoritmo di rete. Ho intenzione di creare la mia versione di tale rete, ma in questa fase non capisco nulla né di mql4 né di reti neurali.

Quindi, prima metterò la mia strategia in Expert Advisor per imparare mql4. E poi comincerò a pensare alle reti.

Ho scaricato la vostra versione solo per interesse. È la prima volta che ho incontrato queste cose. Non capisco il funzionamento di queste reti. Non ho idea di come funzionino queste reti, quindi ho queste domande.

Sarò lieto di ricevere qualsiasi riferimento su argomenti simili, che secondo voi sono degni di attenzione!

 

QUESTA RETE

YuraZ:

ha cambiato un po' il software!

ha cambiato un po' il formato di visualizzazione di

ora SCRIPT considera un dovere calcolare con alta precisione i dati di uscita

il programma non è universale ma specializzato per numero di ingressi e uscite

ma la dimensione dello strato nascosto viene regolata nel processo di apprendimento



la prossima versione - cercherò di renderlo flessibile nel numero di ingressi e uscite

e, in caso di successo, aggiungerò un algoritmo genetico

il cui obiettivo sarà quello di uccidere i NEURONI con un gran numero di errori

e riprodurre i neuroni con pochi errori!

cioè, essenzialmente, cercare quei neuroni nella matrice che hanno il minor numero di errori e riprodursi da loro per sostituire

quei neuroni che si sono comportati male...


1 Il tasso di apprendimento è attualmente basso

2 Cambiamento - il numero di neuroni nascosti del 1° livello è casuale senza logica

3 Fermare l'apprendimento se ottiene un'alta precisione sui dati campione di input e di output


LA STESSA RETE ma scritta in Microsoft Visual C++ 6.0

La velocità è ordini di grandezza superiore a quella di MQL4

l'algoritmo è invariato, il trasferimento da MQL4 a C++ è il più semplice possibile senza usare oggetti di classe

File:
yzpnn.zip  63 kb
 

Un'altra opzione ma su MQL


solo cercando di lavorare su M1 mostra la direzione della tendenza attuale

uscita il 3, in teoria non si può insegnare all'avvio - ma immediatamente prendere pesi pronti - insegnare in anticipo


---

9 ingressi a cui viene alimentata la differenza normalizzata di muwings

---

out-1 out-2 out-3 uscita

0,9 0,01 0,01 tendenza al rialzo

0,01 0,9 0,01 flet

0,01 0,01 0,9 tendenza al ribasso



---

Ho in programma di aggiungere 3-4 intervalli di tempo e di contarli tutti insieme!

PNN quando è già pesato funziona molto velocemente

---


Codice di prova sperimentale - per favore non cacciatemi.






File: