Réseau neuronal sous forme de script - page 4

 
rip:
YuraZ:

Il n'est pas toujours nécessaire de normaliser, qui dit que la grille PEUT et DOIT fonctionner uniquement avec 0 et 1 ?


Je peux joindre une grille simple avec un exemple (malheureusement, je n'ai pas de matériel sous la main pour le moment) - je le ferai plus tard.

où un simple NN résout ce problème sans préparation des données avec normalisation

malheureusement, ce n'est pas la source


l'exemple que j'ai donné, cependant ! c'est comme si c'était déjà normalisé.

la condition a deux plages


1 0-100

2 10-30


il suffit de trouver le rapport de la position dans une plage - qui est connue pour

Il s'agit essentiellement d'une mise à l'échelle.

La normalisation est presque toujours nécessaire. Les données doivent être comprises dans la plage de définition de la fonction d'activation.

Dans le script, la sigmoïde est [-1;+1]. Si vous le remplacez par, disons, une exponentielle... ou racine carrée.


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


voici un exemple de création de réseau ... L'entrée est BASSE, c'est-à-dire qu'il n'y a pas de normalisation.

 
YuraZ:

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


voici un exemple de création de réseau ... L'entrée est BASSE, c'est-à-dire qu'il n'y a pas de normalisation.


L'utilisation de données non normalisées est parfois très utile. Ils ne perdent pas leur caractère informatif, qui peut être perdu lors des transformations.

Et il n'existe pas de mécanisme formel pour déterminer le caractère informatif de l'échantillon de formation...


D'ailleurs, l'article ne montre nulle part quelle fonction d'activation est utilisée. Apparemment, quelque chose avec la zone de définition [-inf;+inf] ou [0;+inf] ...

 

changé un peu le programme !

modification légère du format de sortie


maintenant SCRIPT considère qu'il est de son devoir de calculer les données de sortie avec une grande précision.

Bien entendu, le programme n'est pas universel mais spécialisé pour un certain nombre d'entrées et de sorties.

mais la taille de la couche cachée ! est ajustée dans le processus d'apprentissage



la prochaine version - j'essaierai de le rendre flexible dans le nombre d'entrées et de sorties

et en cas de succès, j'ajouterai un algorithme génétique

dont le but sera de tuer les NEURONS avec un grand nombre d'erreurs

et reproduire les neurones avec peu d'erreurs !

c'est-à-dire, essentiellement, rechercher les neurones de la matrice qui ont le moins d'erreurs et les sélectionner pour les remplacer.

ces neurones qui se sont mal comportés...


1 Le taux d'apprentissage est actuellement faible

2 Changement - le nombre de neurones cachés du 1er niveau est aléatoire sans logique

3 Arrête le processus d'apprentissage s'il obtient une précision élevée sur les échantillons de données d'entrée et de sortie.


Dossiers :
 

Comment puis-je l'utiliser ? J'ai mis un script sur le tableau, des piles de chiffres ont commencé à se réécrire... Que disent ces chiffres ?

 
Blast:

Comment puis-je l'utiliser ? J'ai mis un script sur le tableau, des piles de chiffres ont commencé à se réécrire... Que disent ces chiffres ?

Pourquoi en avez-vous besoin ? J'ai mon propre algorithme d'AG, mais j'ai à peine compris le code - j'ai besoin de temps pour comprendre où placer les entrées, comment les sortir, quand acheter et régler et si je peux le faire tout court ? Ou êtes-vous ici pour le Graal?

 
Loknar:
Explosion:

Comment puis-je l'utiliser ? J'ai mis un script sur le tableau, des piles de chiffres ont commencé à se réécrire... Que disent ces chiffres ?

Pourquoi en avez-vous besoin ? J'ai mon propre algorithme d'AG, mais je n'ai pratiquement rien compris au code. J'ai besoin de temps pour comprendre où placer les entrées, comment les retirer et quand les acheter, le cas échéant ? Ou peut-être que vous cherchez le Graal ici ?

Blast , ne cherchez pas un conseiller expert ou un indicateur - c'est loin d'être le cas.


Il s'agit plutôt d'une étude des principes d'un réseau neuronal dans MQL4.

---

en général, il est raisonnable de l'écrire en C++ sous forme de DLL, ou d'autres langages rapides


Loknar - c'estjuste une modification du script depuis le début pour essayer d'obtenir des résultats plus précis.

--

d'ailleurs j'ai essayé d'ajouter une couche :-), sans parler des entrées et sorties ... l'algorithme d'apprentissage des tuyaux meurt à tout moment...


---

vous voulez essayer quelque chose comme

3 sorties

la sortie n'est pas seulement 0 ou 1 ou -1 0 +1 mais une gamme

x 0 0 - acheter tenir

0 x 0 - plat (sortie achat ou vente)

0 0 x vendre - tenir vendre

où x n'est pas 0 ou 1 mais a un certain écart dans une certaine fourchette, par exemple -1.000 0.000 +1.000

c'est-à-dire qu'il peut prendre une valeur de 0,1122 ou -0,012.


la combinaison de trois sorties est analysée pour le franchissement des limites.


entrées 9 sur chaque tranche horaire - prendre M1 M5 M15 M30 H1 H4 54 entrées au total

nous alimentons la différence entre les moyennes 3 5 8 13 21 34 55 89 144 233 sur chaque traf

total 3-5 5-8 8-13 13-21 21-34 34-55 55-89 89-144 144-233 au total 9 par période de temps

on obtient une sorte de VERIABLE des moyennes dans la vue en grille... :-) dans la matrice

quand nous avons quelque chose comme le modèle 2 3 4 5 6 7 8 9 10 11 le ventilateur est complètement ouvert vers le haut le jugement est Vendre

quand nous avons -2 -3 -4 -5 -6 -7 -8 -9 -10 -11, le modèle est complètement ouvert vers le bas - BAY

Les chiffres sont arbitraires et parfois un modèle -1 -3 -7 -10 -15 -20 -30 -40 -80 sur une période plus longue



---

un échantillon de formation de quelque chose comme


1 2 1 0 -3 2 3 0 4 M1

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

...

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

 

Préparation des données pour la formation





#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:
Explosion:

Comment puis-je l'utiliser ? J'ai mis un script sur le tableau, des piles de chiffres ont commencé à se réécrire... Que disent ces chiffres ?

Pourquoi en avez-vous besoin ? J'ai mon propre algorithme d'AG, mais j'ai à peine compris le code - j'ai besoin de temps pour comprendre où placer les entrées, comment les retirer et quand les acheter, le cas échéant ? Ou bien avez-vous choisi le Graal ?

Au départ, j'aime l'idée des réseaux neuronaux. Tout ce que je sais à ce sujet, c'est qu'en ayant 1000 points, d'une manière ou d'une autre, le réseau convergera vers un point... et que l'autotrading a été gagné avec un EA basé sur l'algorithme de réseau. J'ai l'intention de créer ma propre version d'un tel réseau mais à ce stade, je ne comprends rien ni à mql4 ni aux réseaux neuronaux.

Par conséquent, je vais d'abord mettre ma stratégie dans Expert Advisor pour apprendre mql4. Et ensuite, je commencerai à penser aux réseaux.

J'ai téléchargé votre version juste par intérêt. C'est la première fois que je rencontre de telles choses. Je ne comprends pas le fonctionnement de ces réseaux. Je n'ai aucune idée du fonctionnement de ces réseaux, c'est pourquoi je me pose de telles questions.

Je serai heureux de recevoir toute référence sur des sujets similaires qui, à votre avis, méritent l'attention !

 

CE RÉSEAU

YuraZ:

changé un peu le logiciel !

a modifié quelque peu le format d'affichage de

.

maintenant SCRIPT considère comme un devoir de calculer avec une grande précision les données de sortie

le programme n'est pas universel mais spécialisé pour le nombre d'entrées et de sorties

mais la taille de la couche cachée ! est ajustée dans le processus d'apprentissage



la prochaine version - j'essaierai de le rendre flexible dans le nombre d'entrées et de sorties

et en cas de succès, j'ajouterai un algorithme génétique

dont le but sera de tuer les NEURONS avec un grand nombre d'erreurs

et reproduire les neurones avec peu d'erreurs !

c'est-à-dire, essentiellement, rechercher les neurones de la matrice qui ont le moins d'erreurs et les sélectionner pour les remplacer.

ces neurones qui se sont mal comportés...


1 Le taux d'apprentissage est actuellement faible

2 Changer - le nombre de neurones cachés du 1er niveau est aléatoire sans logique

3 Arrêtez l'apprentissage s'il obtient une grande précision sur les données d'entrée et de sortie.


LE MÊME RÉSEAU mais écrit en Microsoft Visual C++ 6.0

La vitesse est supérieure de plusieurs ordres de grandeur à celle de MQL4.

l'algorithme est inchangé, le transfert de MQL4 vers C++ est aussi simple que possible sans utiliser d'objets de classe

Dossiers :
yzpnn.zip  63 kb
 

Une autre option mais sur MQL


J'essaie juste de travailler sur M1 qui montre la direction de la tendance actuelle.

sortie le 3, en théorie vous ne pouvez pas enseigner au démarrage - mais prendre immédiatement les poids prêts - enseigner à l'avance


---

9 entrées auxquelles on applique la différence normalisée de muwings

---

out-1 out-2 out-3 sortie

0,9 0,01 0,01 tendance vers le haut

0,01 0,9 0,01 flet

0,01 0,01 0,9 tendance à la baisse



---

Je prévois d'ajouter 3-4 échéances et de les compter toutes en même temps !

Le PNN, lorsqu'il est déjà pesé, fonctionne très rapidement.

---


Code de test expérimental - ne me donnez pas de coup de pied.






Dossiers :