Una libreria rapida e gratuita per MT4, per la gioia dei neuralnetworkers - pagina 9

 
Questo è un comitato di 16 griglie, puoi guardare i file che vengono creati.
 
Henry_White >> :

Se abbiamo una griglia con un neurone di uscita, come facciamo a ottenere 16 uscite...? O è un comitato di 16 reti?

Lo è.

 

Ciao a tutti!

Sono due notti che lavoro su questo pezzo di codice.

void ann_prepare_input () {
    int i;
    double res = 0;
	 for( i = 0; i < AnnInputs; i++) {
      res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0; 
      if (MathAbs( res) > 1) {
         if ( res > 0) {
            InputVector[ i] = 1.0;            
         } else {
            InputVector[ i] = -1.0;            
         }
      } else {
         InputVector[ i] = res;            
      }
    }
}

Non capisco che senso abbia

if (MathAbs( res) > 1) {
         if ( res > 0) {
            InputVector[ i] = 1.0;            
         } else {
            InputVector[ i] = -1.0;            
         }
      } else {
         InputVector[ i] = res;            
      }

se il valore di res non può essere maggiore di uno.

Per favore, spiega questo punto, se non è un segreto, naturalmente.

 
alex_r >> :

Ciao a tutti!

Sono due notti che lavoro su questo pezzo di codice.

Non capisco che senso abbia

se il valore di res non può essere maggiore di uno.

Per favore, spiega questo punto, se non è un segreto.

I valori normalizzati (1;-1) dovrebbero essere alimentati all'ingresso dell'NS. Altrimenti l'allenamento NS può portare a risultati indefiniti.

 

bene, come si calcola la res

condizione

(MathAbs(res) > 1)
non sarà mai soddisfatta e l'input sarà
res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0
e qui, nel 99,99% dei casi, otterrete naturalmente tutto tranne 1 e -1.
se è così
for( i = 0; i < AnnInputs; i++) {
      res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0; 

         if ( res > 0) {                 
            InputVector[ i] = 1.0;            
         } else {
            InputVector[ i] = -1.0;            
         }        

    }

allora solo 1 e -1

o mi sbaglio?

 
alex_r >> :

>> o mi sbaglio?

Sbagliato. Qui tutto funziona correttamente. Dovresti studiare il codice più da vicino. È molto semplice e ovvio. Non capisco il senso del tuo "//" - "uccide" completamente il significato.

iRSI dà fondamentalmente valori da 0 a 100 con rari outlier al di fuori dell'intervallo (ecco perché è (MathAbs(res) > 1) ), quindi res sarà nel 99,9% dei casi compreso tra 1 e -1, mentre InputVector sarà compreso nel 100%.

Se state aspettando una ripartizione di ogni operatore, non credo che nessuno qui abbia la capacità di dare lezioni di programmazione. E per questa sezione sarà offtopic. Forse con questo dovresti andare in un'altra sezione del forum o scrivermi una riga.

PS. Non "commentare" il codice di qualcun altro (meglio commentare). Può fuorviare gli altri e solo un cattivo tono imho. Se non sei d'accordo con l'autore - scrivi la tua variante.

 

Rimosso il commentato.

Ora mi spiego, a res>0, qui 0 corrisponde al livello 50 dell'indicatore RSI, assegniamo 1, altrimenti assegniamo -1

Cosa non è chiaro? Un minimo di codice e nient'altro.

Come è scritto nel codice sorgente, la condizione principale della normalizzazione dei dati NON è soddisfatta.

L'unica cosa è filtrare un altro zero, ma in questo caso non è così importante.

 
La vostra variante darà o -1 o 1. E a cosa serve tutto questo? E come farete a formare una rete con questo? O piuttosto, PERCHE'? Qual è l'utilità di questa "binarietà" di stati? Come si costruisce un modello da questo per addestrare la rete?
 
Henry_White >> :

I valori normalizzati (1;-1) devono essere alimentati all'ingresso NS. Altrimenti, l'addestramento del NS può portare a risultati incerti.

Forse sei stato confuso da questo post. Qui intendevo la gamma, non gli stati binari.

 
alex_r >> :

Come scritto nel codice sorgente, la condizione principale per la normalizzazione dei dati NON è soddisfatta.

Ti sbagli perché gli ingressi della griglia (strato 1) sono sigmoidi impostati su range: -1;1. Pertanto, qualsiasi valore sugli ingressi nell'intervallo da -1 a 1 è una condizione necessaria e sufficiente per la normalizzazione.


Quello che si cerca di costruire è di sostituire la funzione sigmoide con una funzione personalizzata Signum(input) che sottostima la discretezza dei dati di input e crea situazioni in cui il set di allenamento contiene un gran numero di dati reciprocamente contraddittori.

Motivazione: