신경망에 대한 고문, 경험 공유.

 

포럼에는 기성 솔루션에 대한 정보와 시장에서 거래하기 위한 신경망의 효율성에 대한 정보가 거의 없습니다. 여기에서 귀하의 경험을 토론하고 공유하도록 초대합니다. 토론이 있는 스레드가 이미 있는 경우 링크하십시오.

나는 일반적인 다층 퍼셉트론 인 here의 클래스를 사용합니다. 나는 수업이 모든 것을 올바르게 고려하기를 바랍니다. 나는 저자의 경험에 의존합니다. 실험을 시작했는데 재미있네요 :)

현재 나는 입구에 11마리의 칠면조가 있고 출구에는 지그재그로 1바씩 미래로 이동합니다.

이것은 8개월 동안 그리드가 제공한 결과입니다. 나는 1000개의 막대, 10000개의 에포크, 은닉층의 70개의 뉴런에 대해 훈련합니다. 신호는 추가 필터 없이 순전히 신경망에 의해 반전됩니다. 15분

 

지그재그 코드

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

표시기 버퍼에는 높은 값과 낮은 값만 포함되며 루프에서 중간 데이터를 채우고 1로 변환합니다. 맞는 것 같지만 오류가 있으면 수정해주세요.

 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 :
시원한! 매수 및 매도에 대한 실제 스왑 신호에 베팅하는 경우에만.
무엇 때문에? )
 
Maxim Dmitrievsky :
무엇 때문에? )
그런 표시. 테스트 후.
 
Vladimir Tkach :
그런 표시. 테스트 후.
아니, 글쎄, 진지하게 .. 주제에 대해 이야기합시다. Che가 있다면) 나는 여기에서 말뚝을 연주하지 않을 것입니다.
 
Maxim Dmitrievsky :
아니, 글쎄, 진지하게 .. 주제에 대해 이야기합시다. Che가 있다면) 나는 여기에서 말뚝을 연주하지 않을 것입니다.
학습을 위해 칠면조를 시도하십시오.
Sampler
Sampler
  • 투표: 33
  • 2012.06.01
  • Serj
  • www.mql5.com
Индикатор i_Sampler рассчитывает идеальные входы, предназначен для обучения нейросети.
 
Sergey Chalyshev :
학습을 위해 칠면조를 시도하십시오.

교육을 위한 입력 데이터 벡터가 필요하고 여기에서 신호가 중단됩니다. 매수 또는 매도 또는 갭 .. 그리고 0이 아닌 채울 방법이 명확하지 않습니다. 제 생각에 지그재그는 그다지 이상적이지 않습니다. 항목,하지만 내가 틀릴 수 있습니다 .. 약하게 나는 여전히 신경망을 뒤지고 있습니다 ..

 
Maxim Dmitrievsky :

교육을 위해 입력 데이터 벡터가 필요하고 신호가 중단됩니다 - 구매 또는 판매 또는 간격 .. 그리고 0이 아닌 무엇으로 채울지 명확하지 않습니다. 제 생각에 지그재그는 그 이상을 제공하지 않습니다. 이상적인 항목이지만 틀릴 수 있습니다 .. 약하게 나는 여전히 신경망을 뒤지고 있습니다 ..

표시기에는 이산 신호와 아날로그 신호의 두 가지 유형이 있습니다. 공백을 0으로 채웁니다.

트레이닝 샘플에 대한 첫 번째 게시물의 사진은? 이것이 샘플을 벗어나면 훈련 샘플을 보는 것이 흥미롭습니다. 뉴런의 수는 네트워크 가 모든 입력 데이터를 기억해야 합니다.

 
Sergey Chalyshev :

표시기에는 이산 신호와 아날로그 신호의 두 가지 유형이 있습니다. 공백을 0으로 채웁니다.

트레이닝 샘플에 대한 첫 번째 게시물의 사진은? 이것이 샘플을 벗어나면 훈련 샘플을 보는 것이 흥미롭습니다. 뉴런의 수는 네트워크가 모든 입력 데이터를 기억해야 합니다.

훈련 샘플은 마지막 1000개의 막대 또는 오히려 첫 번째 막대입니다. 시계열처럼 0번째부터 보면 그 이전의 모든 것은 샘플이 아닙니다.

나는 내일 그것을 고정하려고 노력할 것입니다. 그것이 무엇을 주는지 봅시다. 뛰어난 것은 아직 제공되지 않았으며 평균적으로 0으로 작동합니다. :)

 
Maxim Dmitrievsky :

평균적으로 0으로 작동합니다 :)

그래서 매수를 매도로 바꾸라는 제안을 받았습니다.

나는 아직 누군가가 신경망에서 안정적인 돈을 벌고 있다는 소식을 듣지 못했지만 매우 불안정한 것으로 판명되었습니다. 이동에 대한 가장 간단한 TS - 더 안정적으로 작동합니다.