Une bibliothèque rapide et gratuite pour MT4, pour le plus grand plaisir des neuralnetworkers. - page 9

 
Il s'agit d'un comité de 16 grilles, vous pouvez regarder les fichiers qui sont créés.
 
Henry_White >> :

Si nous avons une grille avec un neurone de sortie, comment pouvons-nous obtenir 16 sorties... ? Ou s'agit-il d'un comité de 16 filets ?

Elle l'est.

 

Bonjour à tous !

J'ai travaillé sur ce morceau de code pendant deux nuits maintenant.

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;            
      }
    }
}

Je ne comprends pas quel sens il y a à

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

si la valeur res ne peut pas être supérieure à un.

Veuillez expliquer ce point, s'il ne s'agit pas d'un secret, bien sûr.

 
alex_r >> :

Bonjour à tous !

J'ai travaillé sur ce morceau de code pendant deux nuits maintenant.

Je ne comprends pas quel sens il y a à

si la valeur res ne peut pas être supérieure à un.

Veuillez expliquer ce point si ce n'est pas un secret.

Les valeurs normalisées (1;-1) doivent être transmises à l'entrée du NS. Sinon, la formation NS peut conduire à des résultats indéfinis.

 

Bien, comment est calculée la rés.

condition

(MathAbs(res) > 1)
ne sera jamais atteint et l'entrée sera
res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0
et ici, dans 99,99% des cas, vous obtiendrez naturellement tout sauf 1 et -1.
si c'est le cas
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;            
         }        

    }

alors seulement 1 et -1

ou ai-je tort ?

 
alex_r >> :

>> ou est-ce que je me trompe ?

Faux. Tout fonctionne correctement ici. Vous devriez étudier le code de plus près. C'est très simple et évident. Je ne comprends pas le sens de votre "//" - il "tue" complètement le sens.

L'iRSI donne essentiellement des valeurs comprises entre 0 et 100, avec de rares valeurs aberrantes en dehors de la plage (c'est pourquoi il s'agit de (MathAbs(res) > 1) ), de sorte que res se situera dans 99,9% des cas entre 1 et -1, tandis que InputVector se situera dans 100%.

Si vous attendez une décomposition de chaque opérateur, je ne pense pas que quiconque ici ait la capacité de donner des leçons de programmation. Et pour cette section, ce sera hors-sujet. Pour cela, vous devriez peut-être vous adresser à une autre section du forum ou m'envoyer un message.

PS. Ne pas "commenter" le code de quelqu'un d'autre (mieux vaut commenter). Cela peut induire les autres en erreur et donner un mauvais ton, selon moi. Si vous n'êtes pas d'accord avec l'auteur, écrivez votre variante.

 

Supprimé le commentaire.

Maintenant je m'explique, à res>0, ici 0 correspond au niveau 50 de l'indicateur RSI, on assigne 1, sinon on assigne -1

Qu'est-ce qui n'est pas clair ? Un minimum de code et rien d'autre.

Comme il est écrit dans le code source, la condition principale de la normalisation des données n'est PAS remplie.

La seule chose à faire est de filtrer un autre zéro, mais dans ce cas, ce n'est pas si important.

 
Votre variante donnera soit -1 soit 1. Et à quoi sert tout cela ? Et comment allez-vous former un réseau avec ça ? Ou plutôt, POURQUOI ? Quelle est l'utilité de cette "binarité" des États ? Comment construire un modèle à partir de cela pour entraîner le réseau?
 
Henry_White >> :

Les valeurs normalisées (1;-1) doivent être transmises à l'entrée NS. Sinon, la formation du SN peut conduire à des résultats incertains.

Vous avez peut-être été troublé par ce message. Ici, je voulais parler de la gamme, et non des états binaires.

 
alex_r >> :

Tel qu'écrit dans le code source, la condition principale pour la normalisation des données n'est PAS remplie.

Vous vous trompez car les entrées de la grille (couche 1) sont des sigmoïdes réglées sur la plage : -1;1. Par conséquent, toute valeur des entrées comprise entre -1 et 1 est une condition nécessaire et suffisante pour la normalisation.


Ce que vous essayez de construire est de remplacer la fonction sigmoïde par une fonction autosimilaire. Signum(input) sous-estime la discrétisation des données d'entrée et crée des situations dans lesquelles l'ensemble d'apprentissage contient un grand nombre de données mutuellement contradictoires.