Consulenti sulle reti neurali, condividendo le esperienze.

 

Ci sono poche informazioni sul forum sulle soluzioni già pronte e sull'efficacia delle reti neurali per il trading sul mercato. Suggerisco di discutere e condividere le esperienze qui. Se c'è già un thread con una discussione, per favore linkatelo.

Sto usando classi da qui, semplice Perspectron multistrato. Spero che le classi contino correttamente, conto sull'esperienza dell'autore. Iniziato a sperimentare, interessante :)

Al momento ho 11 induks in ingresso, l'uscita è uno zigzag spostato di 1 barra nel futuro.

Questi sono i risultati della mia griglia di 8 mesi. Mi sto allenando su 1000 barre, 10000 epoche, 70 neuroni in uno strato nascosto. I segnali sono invertiti e puramente da rete neurale, senza filtri aggiuntivi. 15 min tf.

 

Codice a zig-zag

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

I buffer degli indicatori contengono solo valori alti e bassi, riempio i dati intermedi nel ciclo, convertendoli in 1 - in aumento sulla barra corrente, -1 in diminuzione. Sembra essere corretto, ma se ci sono errori, per favore correggetemi

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;
     }
}
 
Fico! Solo quando lo metti sul reale, scambia i segnali di acquisto e di vendita.
 
Vladimir Tkach:
Fico! Solo quando lo metti sul reale, cambia le posizioni dei segnali di acquisto e di vendita.
Perché? )
 
Maxim Dmitrievsky:
Perché? )
Il presagio è questo. Dopo il test.
 
Vladimir Tkach:
Il presagio è questo. Dopo il test.
Seriamente, però, andiamo avanti, se ce l'hai). Non è che sono qui per giocare :)
 
Maxim Dmitrievsky:
No, seriamente... parliamone, se hai qualcosa da dire). Non è che sono qui per giocare :)
Prova questo per un tutorial.
Sampler
Sampler
  • voti: 33
  • 2012.06.01
  • Serj
  • www.mql5.com
Индикатор i_Sampler рассчитывает идеальные входы, предназначен для обучения нейросети.
 
Sergey Chalyshev:
Prova questo induttore per l'allenamento.

Ho bisogno di un vettore di dati di input per la formazione, e qui i segnali sono interrotti - poi comprare, poi vendere, poi saltare... e non so come riempirli, non con degli zeri... Non so come riempirli di zeri... Zigzag, secondo me, fornisce input che non sono meno perfetti, ma potrei sbagliarmi... Non sono ancora molto esperto di reti neurali...

 
Maxim Dmitrievsky:

Ho bisogno di un vettore di dati di input per la formazione, e qui i segnali sono interrotti - poi comprare, poi vendere, poi saltare... e non so come riempirli, non con degli zeri... Non so come riempirli di zeri, non è chiaro... Zigzag, secondo me, fornisce input non meno perfetti, ma potrei sbagliarmi... Non sono ancora molto esperto di reti neurali...

L'indicatore ha due tipi di segnali, discreto e analogico da scegliere. Riempi gli spazi vuoti con degli zeri.

L'immagine nel primo post è il campione di allenamento? Se è fuori campione allora è interessante vedere su campione di allenamento, con così tanti neuroni la rete dovrebbe memorizzare tutti i dati di input a memoria.

 
Sergey Chalyshev:

Ci sono due tipi di segnale nell'indicatore, discreto e analogico da scegliere. Riempi gli spazi vuoti con degli zeri.

La foto nel primo post è un campione di allenamento? Se è fuori campione allora è interessante guardare il campione di allenamento, con così tanti neuroni la rete dovrebbe memorizzare tutti i dati di input a memoria.

Il campione di allenamento sono le ultime 1000 barre, o meglio le prime se si guarda da 0° come nelle serie temporali, tutto ciò che precede è fuori campione.

Lo proverò domani e vedrò cosa mostra. Finora ho avvitato il secondo zigzag, quello più grande, guardando come funziona su 2 uscite. Niente di eccezionale finora, funziona in media a zero :)

 
Maxim Dmitrievsky:

in media funziona a zero :)

Ecco perché ti è stato suggerito di passare dall'acquisto alla vendita.

Non ho ancora sentito parlare di qualcuno che faccia soldi stabili con le reti neurali, è molto instabile. Il TS più semplice sui muwings - e funzionano più stabili.