Sinir ağları konusunda danışmanlar, deneyim paylaşımı.

 

Forumda hazır çözümler ve piyasada ticaret için sinir ağının etkinliği hakkında çok az bilgi var. Sizi burada tartışmaya ve deneyimlerinizi paylaşmaya davet ediyorum. Zaten tartışması olan bir konu varsa, lütfen bağlantı kurun.

Buradaki sınıfları, her zamanki çok katmanlı algılayıcıyı kullanıyorum. Umarım sınıflar her şeyi doğru düşünür, yazarın deneyimine güvenirim. Denemeye başladım, ilginç :)

Şu anda girişte 11 hindi var, çıkışta zikzak, geleceğe 1 bar kaydırılmış.

Bunlar, şebeke tarafından 8 ay boyunca verilen sonuçlardır. Gizli katmanda 1000 çubuk, 10000 dönem, 70 nöron üzerinde eğitim alıyorum. Sinyaller terstir ve ek filtreler olmaksızın tamamen sinir ağı tarafından sağlanır. 15 dk tf.

 

zikzak kodu

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

Gösterge arabellekleri yalnızca yüksek ve düşük değerleri içerir, ara verileri bir döngüde doldururum, onları 1'e dönüştürürüm - mevcut çubukta büyüyor, -1 düşüyor. Doğru görünüyor, ancak hatalar varsa - lütfen beni düzeltin

 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;
     }
}
 
Güzel! Sadece alış ve satış için gerçek takas sinyallerine bahis yaptığınızda.
 
Vladimir Tkach :
Güzel! Sadece alış ve satış için gerçek takas sinyallerine bahis yaptığınızda.
Ne için? )
 
Maxim Dmitrievsky :
Ne için? )
Böyle bir işaret. Test ettikten sonra.
 
Vladimir Tkach :
Böyle bir işaret. Test ettikten sonra.
Hayır, peki, cidden .. bir şey varsa konuya girelim) Burada olduğu gibi dökülmekin oynamayacağım :)
 
Maxim Dmitrievsky :
Hayır, peki, cidden .. gelelim konuya, eğer Che varsa) Burada olduğu gibi dökülmekin oynamayacağım :)
Öğrenmek için bu hindiyi deneyin.
Sampler
Sampler
  • oylar: 33
  • 2012.06.01
  • Serj
  • www.mql5.com
Индикатор i_Sampler рассчитывает идеальные входы, предназначен для обучения нейросети.
 
Sergey Chalyshev :
Öğrenmek için bu hindiyi deneyin.

Eğitim için bir girdi verisi vektörüne ihtiyacım var ve burada sinyaller kesiliyor - ya al ya da sat ya da boşluklar .. ve sıfırlarla değil, onları nasıl dolduracakları açık değil .. Zigzag, bence, daha az ideal değil girdiler, ama yanılıyor olabilirim .. zayıf bir şekilde hala sinir ağlarında dolaşıyorum ..

 
Maxim Dmitrievsky :

Eğitim için bir girdi verisi vektörüne ihtiyacım var ve burada sinyaller kesiliyor - ya al ya da sat ya da boşluklar .. ve sıfırlarla değil, onları nasıl dolduracakları açık değil .. Zigzag, bence, daha az ideal değil girdiler, ama yanılıyor olabilirim .. zayıf bir şekilde hala sinir ağlarında dolaşıyorum ..

Göstergede, aralarından seçim yapabileceğiniz ayrık ve analog olmak üzere iki tür sinyal bulunur. Boşlukları sıfırlarla doldurun.

Eğitim örneğindeki ilk gönderideki resim? Bu örneklem dışındaysa, bu kadar çok sayıda nöron içeren eğitim örneğine bakmak ilginçtir, ağın tüm girdi verilerini ezberlemesi gerekir.

 
Sergey Chalyshev :

Göstergede, aralarından seçim yapabileceğiniz ayrık ve analog olmak üzere iki tür sinyal bulunur. Boşlukları sıfırlarla doldurun.

Eğitim örneğindeki ilk gönderideki resim? Bu örneklem dışındaysa, bu kadar çok sayıda nöron içeren eğitim örneğine bakmak ilginçtir, ağın tüm girdi verilerini ezberlemesi gerekir.

Eğitim örneği son 1000 çubuktur, daha doğrusu ilk çubuktur, bir zaman serisinde olduğu gibi 0'dan bakarsanız, ondan önceki her şey örnek dışıdır.

Yarın bağlamaya çalışacağım bakalım ne çıkacak. Henüz olağanüstü bir şey verilmedi, ortalama olarak sıfıra kadar çalışıyor :)

 
Maxim Dmitrievsky :

ortalama olarak sıfıra çalışır :)

Bu yüzden satın almak için satmak için takas teklif edildi.

Sinir ağlarında birinin istikrarlı para kazandığını henüz duymadım, çok kararsız çıkıyor. Hareketlerde en basit TS - ve daha kararlı çalışırlar.