Berater für neuronale Netze, Erfahrungsaustausch.

 

Im Forum gibt es nur wenige Informationen über fertige Lösungen und die Wirksamkeit neuronaler Netze für den Handel auf dem Markt. Ich schlage vor, hier zu diskutieren und Erfahrungen auszutauschen. Wenn es bereits einen Diskussionsstrang gibt, verlinken Sie ihn bitte.

Ich verwende Klassen von hier, einfache mehrschichtige Perspectron. Ich hoffe, die Klassen zählen richtig, ich verlasse mich auf die Erfahrung des Autors. Habe angefangen zu experimentieren, interessant :)

Im Moment habe ich 11 Indizes am Eingang, der Ausgang ist ein Zickzack, um 1 Takt in die Zukunft verschoben.

Dies sind die Ergebnisse meines 8-monatigen Rasters. Ich trainiere mit 1000 Balken, 10000 Epochen, 70 Neuronen in einer versteckten Schicht. Die Signale werden umgekehrt und rein durch das neuronale Netz, ohne zusätzliche Filter, verarbeitet. 15 min tf.

 

Zickzack-Code

//+------------------------------------------------------------------+
//|                                                       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);
  }
//+------------------------------------------------------------------+

Die Indikatorpuffer enthalten nur hohe und niedrige Werte, ich fülle die Zwischendaten in der Schleife und konvertiere sie in 1 - steigend auf dem aktuellen Bar, -1 fallend. Scheint korrekt zu sein, aber wenn es Fehler gibt, korrigieren Sie mich bitte

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;
     }
}
 
Super! Tauschen Sie die Kauf- und Verkaufssignale erst dann aus, wenn Sie sie in die Tat umsetzen.
 
Vladimir Tkach:
Super! Nur wenn Sie es auf die reale, ändern Sie die Positionen der Kauf-und Verkaufssignale.
Warum? )
 
Maxim Dmitrievsky:
Und warum? )
Das Omen ist dies. Nach dem Test.
 
Vladimir Tkach:
Das Omen ist dies. Nach dem Test.
Aber im Ernst: Lassen Sie uns darüber reden, wenn Sie etwas zu sagen haben.) Ich bin ja nicht hier, um Spiele zu spielen :)
 
Maxim Dmitrievsky:
Nein, im Ernst... lass uns darüber reden, wenn du etwas hast.) Ich bin ja nicht hier, um Spiele zu spielen :)
Hier finden Sie eine Anleitung dazu.
Sampler
Sampler
  • Stimmen: 33
  • 2012.06.01
  • Serj
  • www.mql5.com
Индикатор i_Sampler рассчитывает идеальные входы, предназначен для обучения нейросети.
 
Sergey Chalyshev:
Probieren Sie diesen Induktor für Ihr Training aus.

Ich brauche einen Vektor von Eingabedaten für das Training, und hier sind die Signale unterbrochen - dann kaufen, dann verkaufen, dann überspringt... und ich weiß nicht, wie man sie ausfüllen, nicht mit Nullen... Ich weiß nicht, wie man sie mit Nullen füllt... Zigzag liefert meiner Meinung nach Eingaben, die nicht weniger perfekt sind, aber ich kann mich irren... Ich habe noch nicht viel Erfahrung mit neuronalen Netzen...

 
Maxim Dmitrievsky:

Ich brauche einen Vektor von Eingabedaten für das Training, und hier sind die Signale unterbrochen - dann kaufen, dann verkaufen, dann überspringt... und ich weiß nicht, wie man sie ausfüllen, nicht mit Nullen... Ich weiß nicht, wie man sie mit Nullen füllt, es ist nicht klar... Zigzag, meiner Meinung nach, bietet nicht weniger perfekte Eingaben, aber ich kann mich irren... Ich bin noch nicht sehr erfahren in neuronalen Netzen...

Der Anzeiger verfügt über zwei Arten von Signalen, diskret und analog, aus denen Sie wählen können. Füllen Sie die Lücken mit Nullen auf.

Handelt es sich bei dem Bild im ersten Beitrag um das Ausbildungsmuster? Wenn es aus der Stichprobe herausfällt, dann ist es interessant zu sehen, wie das Netz bei so vielen Neuronen alle Eingabedaten auswendig lernen sollte.

 
Sergey Chalyshev:

Es gibt zwei Arten von Signalen im Indikator: diskrete und analoge. Füllen Sie die Lücken mit Nullen auf.

Handelt es sich bei dem Bild im ersten Beitrag um ein Übungsbeispiel? Wenn die Stichprobe nicht ausreicht, ist es interessant, sich die Trainingsstichprobe anzusehen, denn bei so vielen Neuronen sollte sich das Netz alle Eingabedaten auswendig merken können.

Die Trainingsstichprobe sind die letzten 1000 Balken, oder besser gesagt die ersten, wenn man von der Zeitreihe 0 ausgeht, alles davor ist außerhalb der Stichprobe.

Ich werde es morgen ausprobieren und sehen, was dabei herauskommt. So weit geschraubt die zweite Zickzack, größere, schauen, wie es funktioniert auf 2 Ausgänge. Bislang nichts Außergewöhnliches, funktioniert im Durchschnitt bei Null :)

 
Maxim Dmitrievsky:

funktioniert im Durchschnitt bei Null :)

Deshalb wurde Ihnen vorgeschlagen, von Kaufen auf Verkaufen umzusteigen.

Ich habe noch von niemandem gehört, der mit neuronalen Netzen dauerhaft Geld verdient, es ist sehr instabil. Die einfachsten TS auf den muwings - und sie wirken stabiler.