Conseillers en réseaux neuronaux, partageant leurs expériences.

Maxim Dmitrievsky  

Le forum contient peu d'informations sur les solutions toutes faites et sur l'efficacité des réseaux neuronaux pour les échanges sur le marché. Je vous propose de discuter et de partager votre expérience ici. S'il existe déjà un fil de discussion, veuillez y faire un lien.

J'utilise des classes d'ici, un simple Perspectron multicouche. J'espère que les classes comptent correctement, je compte sur l'expérience de l'auteur. J'ai commencé à expérimenter, c'est intéressant :)

En ce moment, j'ai 11 indices en entrée, la sortie est un zigzag, décalé d'une mesure dans le futur.

Voici les résultats de ma grille de 8 mois. Je m'entraîne sur 1000 barres, 10000 époques, 70 neurones dans une couche cachée. Les signaux sont inversés et purement par le réseau neuronal, sans filtres supplémentaires. 15 min tf.

Maxim Dmitrievsky  

Code zigzag

//+------------------------------------------------------------------+
//|                                                       FastZZ.mq5 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yurich"
#property link      "https://login.mql5.com/ru/users/Yurich"
#property version   "1.00"
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 1
#property  indicator_label1  "ZZ"
#property  indicator_type1   DRAW_ZIGZAG
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//+------------------------------------------------------------------+
input int Depth=2000; // Minimum points in a ray
//+------------------------------------------------------------------+
double zzH[],zzL[];
double depth;//, deviation;
int last,direction;
//+------------------------------------------------------------------+
void OnInit()
  {
   SetIndexBuffer(0,zzH,INDICATOR_DATA);
   SetIndexBuffer(1,zzL,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
   depth=Depth*_Point;
//deviation=10*_Point;
   direction=1;
   last=0;
  }
//+------------------------------------------------------------------+
int OnCalculate(const int total,
                const int calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick[],
                const long &real[],
                const int &spread[])
  {
   if(calculated==0) last=0;
   for(int i=calculated>0?calculated-1:0; i<total-1; i++)
     {
      bool set=false;
      zzL[i]=0;
      zzH[i]=0;
      //---
      if(direction>0)
        {
         if(high[i]>zzH[last])//-deviation)
           {
            zzH[last]=0;
            zzH[i]=high[i];
            if(low[i]<high[last]-depth)
              {
               if(open[i]<close[i]) zzH[last]=high[last]; else direction=-1;
               zzL[i]=low[i];
              }
            last=i;
            set=true;
           }
         if(low[i]<zzH[last]-depth && (!set || open[i]>close[i]))
           {
            zzL[i]=low[i];
            if(high[i]>zzL[i]+depth && open[i]<close[i]) zzH[i]=high[i]; else direction=-1;
            last=i;
           }
        }
      else
        {
         if(low[i]<zzL[last])//+deviation)
           {
            zzL[last]=0;
            zzL[i]=low[i];
            if(high[i]>low[last]+depth)
              {
               if(open[i]>close[i]) zzL[last]=low[last]; else direction=1;
               zzH[i]=high[i];
              }
            last=i;
            set=true;
           }
         if(high[i]>zzL[last]+depth && (!set || open[i]<close[i]))
           {
            zzH[i]=high[i];
            if(low[i]<zzH[i]-depth && open[i]>close[i]) zzL[i]=low[i]; else direction=1;
            last=i;
           }
        }
     }
//----
   zzH[total-1]=0;
   zzL[total-1]=0;
   return(total);
  }
//+------------------------------------------------------------------+

Les tampons de l'indicateur ne contiennent que des valeurs hautes et basses, je remplis les données intermédiaires dans la boucle, en les convertissant en 1 - hausse sur la barre actuelle, -1 baisse. Cela semble correct, mais s'il y a des erreurs, merci de me corriger.

void FillZZarray()
{
  ArrayResize(zz,vector);   
   int lastcountbar = 0;
   for(int i=0;i<vector;i++) // Заполняем массив выходов
     {
      if(zzH[i]>0)  
       {
        zz[i]=1; lastcountbar = 1;
        if(i!=0)
          for(int q=i-1;q>=0;q--)
           {
            if(zz[q]==0)zz[q]=lastcountbar;
           } 
       }    
      if(zzL[i]>0) 
       {
        zz[i]=-1; lastcountbar = -1; 
        if(i!=0)
          for(int q=i-1;q>=0;q--)
           {
            if(zz[q]==0)zz[q]=lastcountbar;
           } 
       } 
      if(zzH[i]==0 && zzL[i]==0) zz[i] = lastcountbar;
     }
}
Vladimir Tkach  
Cool ! Ce n'est que lorsque vous le mettez sur le marché réel que vous échangez les signaux d'achat et de vente.
Maxim Dmitrievsky  
Vladimir Tkach:
Cool ! Ce n'est que lorsque vous le mettez sur le terrain que vous changez les positions des signaux d'achat et de vente.
Pourquoi ? )
Vladimir Tkach  
Maxim Dmitrievsky:
Pourquoi ? )
Le présage est le suivant . Après le test.
Maxim Dmitrievsky  
Vladimir Tkach:
Le présage est le suivant . Après le test.
Sérieusement, cependant, allons-y, si vous l'avez.) Ce n'est pas comme si j'étais ici pour jouer à des jeux :)
Sergey Chalyshev  
Maxim Dmitrievsky:
Non, sérieusement... parlons-en, si vous avez quelque chose à dire). Ce n'est pas comme si j'étais ici pour jouer à des jeux :)
Essayez celui-ci pour un tutoriel.
Sampler
Sampler
  • votes : 33
  • 2012.06.01
  • Serj
  • www.mql5.com
Индикатор i_Sampler рассчитывает идеальные входы, предназначен для обучения нейросети.
Maxim Dmitrievsky  
Sergey Chalyshev:
Essayez cet inducteur pour vous entraîner.

J'ai besoin d'un vecteur de données d'entrée pour la formation, et ici les signaux sont interrompus - puis achat, puis vente, puis sauts... et je ne sais pas comment les remplir, pas avec des zéros... Je ne sais pas comment les remplir de zéros... Le zigzag, à mon avis, fournit des entrées qui ne sont pas moins parfaites, mais je peux me tromper... Je ne suis pas encore très expérimenté dans les réseaux neuronaux...

Sergey Chalyshev  
Maxim Dmitrievsky:

J'ai besoin d'un vecteur de données d'entrée pour la formation, et ici les signaux sont interrompus - puis achat, puis vente, puis sauts... et je ne sais pas comment les remplir, pas avec des zéros... Je ne sais pas comment les remplir de zéros, ce n'est pas clair... Le zigzag, à mon avis, fournit des entrées non moins parfaites, mais je peux me tromper... Je ne suis pas encore très expérimenté dans les réseaux de neurones...

L'indicateur peut choisir entre deux types de signaux, discret et analogique. Remplissez les trous avec des zéros.

La photo dans le premier message sur l'échantillon de formation ? Si c'est hors échantillon, il est intéressant de voir sur l'échantillon d'entraînement, avec autant de neurones le réseau devrait mémoriser toutes les données d'entrée par cœur.

Maxim Dmitrievsky  
Sergey Chalyshev:

L'indicateur comporte deux types de signaux, discrets et analogiques, parmi lesquels vous pouvez choisir. Remplissez les trous avec des zéros.

La photo du premier message est-elle un échantillon d'entraînement ? S'il est hors échantillon, il est intéressant de regarder l'échantillon d'entraînement. Avec autant de neurones, le réseau devrait mémoriser toutes les données d'entrée par cœur.

L'échantillon d'entraînement est constitué des 1000 dernières mesures, ou plutôt des premières si vous regardez à partir du 0ème comme dans les séries temporelles, tout ce qui précède est hors échantillon.

Je vais l'essayer demain et voir ce que ça donne. Jusqu'à présent, j'ai vissé le deuxième zigzag, le plus grand, en regardant comment il fonctionne sur 2 sorties. Rien d'exceptionnel jusqu'à présent, fonctionne en moyenne à zéro :)