Индикаторы: Fractals

 

Fractals:

Фракталы (Fractals) — это один из пяти индикаторов торговой системы Билла Вильямса, позволяющий обнаруживать дно или вершину.

Author: MetaQuotes Software Corp.

 
А, можно соедтнить линией верхние и нижние фракталы? Будет что-то похожее на зигзаг.
 

Индикатор глючный, на графике запущены одновременно два индикатора фракталов, один встроенный (обозначен черными стрелочками/галочками), второй скачен отсюда (обозначен красным и синим ромбом). В момент возможного формирования фрактала сигнал одновременно дают оба индикатора, но ... НО в случае отмены фрактала (пробой последним формирующимся баром, экстремума фрактала), отменяется сигнал только! по встроенному индикатору, а индикатор выложенный здесь продолжает давать сигнал (его значки не удаляются с чарта).

Если не трудно поправьте код, плиз.


 

Блин, да он и сигнал раньше подаёт, если скорость в тестере поменьше сделать это чётко видно.

Может выложите нормальный индикатор, тот который в платформу встроен? (в качестве предложения)

 

Этот индикатор вроде по лучше кажет.

//+------------------------------------------------------------------+
//|                                                  wlxFractals.mq4 |
//|         Copyright © 2004, by konKop, GOODMAN, Mstera, af + wellx |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, by wellx"
#property link      "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 SeaGreen
#property indicator_color2 Red
//---- input parameters
int Equals = 5;
int nLeftUp = 2;
int nRightUp = 2;
int nLeftDown = 2;
int nRightDown = 2;
//---- buffers
double FractalsUp[];
double FractalsDown[];
//----
int pos = 0, cntup = 0, cntdown = 0, cnt = 0;
int r = 0, l = 0, e = 0;
int fup = 0, fdown = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0, FractalsUp);
   SetIndexBuffer(1, FractalsDown);   
//----
   SetIndexStyle(0, DRAW_ARROW, 0, 2);
   SetIndexArrow(0, 159);
//----
   SetIndexStyle(1, DRAW_ARROW, 0, 2);
   SetIndexArrow(1, 159);
//----
   cntup = nLeftUp + nRightUp + Equals + 1;
   cntdown = nLeftDown + Equals + 1;
   if(cntup >= cntdown) 
       cnt = cntup;
   if(cntup < cntdown)  
       cnt = cntdown; 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i=0, j=0;
   int cbars = IndicatorCounted();
//----
   if(cbars < 0) 
       return(-1);
//----
   if(cbars > 0) 
       cbars--;
   pos = 0;
//----
   if(cbars > (Bars - cnt - 1)) 
       pos =(Bars - cnt - 1);
   else 
       pos = Bars - (cbars + nRightUp);
//----
   while(pos >= nRightUp)
     {
       FractalsUp[pos] = NULL;
       FractalsDown[pos] = NULL;     
       //фРАКТАЛ ВВЕРХ
       r = nRightUp; //проверяем правую сторону фрактала
       //----
       for(i = 1; i <= r; i++)
         {
           if(High[pos] <= High[pos-i]) 
               break;
         }
       //если справа все ОК то i должно быть равно r+1
       if(i == r + 1) //FractalsUp[pos]=High[pos];
         {
           l = nLeftUp;  //проверяем левую сторону фрактала
           e = Equals;
           //----
           for(j = 1; j <= l + Equals; j++)
             {     
               if(High[pos] < High[pos+j]) 
                   break;
               //----
               if(High[pos] > High[pos+j]) 
                   l--;
               //----
               if(High[pos] == High[pos+j])
                   e--;
               //----
               if(l == 0) 
                 {
                   FractalsUp[pos] = High[pos];
                   break;
                 }
               //----
               if(e < 0) 
                   break;
             }
         }
       //ФРАКТАЛ ВНИЗ
       r = nRightDown; //проверяем правую сторону фрактала
       //----
       for(i = 1; i <= r; i++)
         {
           if(Low[pos] >= Low[pos-i]) 
               break;
         }     
       //----
       if(i == r + 1) //FractalsUp[pos]=High[pos];
         {
           l = nLeftDown;  //проверяем левую сторону фрактала
           e = Equals;
           //----
           for(j = 1; j <= l + Equals; j++)
             {      
               if(Low[pos] > Low[pos+j]) 
                   break;
               //----
               if(Low[pos] < Low[pos+j]) 
                   l--;
               //----
               if(Low[pos] == Low[pos+j])
                   e--;
               //----
               if(l == 0) 
                 {
                   FractalsDown[pos] = Low[pos];
                   break;
                 }
               if(e < 0) 
                   break;
             }
         }
       pos--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

вот скрин для сравнения.

 
Вопрос к программистам, в предложенном коде есть строки задающие параметры фрактала
int Equals = 5;
int nLeftUp = 2;
int nRightUp = 2;
int nLeftDown = 2;
int nRightDown = 2;
можно ли переделать текст индикатора, чтобы они стали внешними параметрами, которые можно задавать самому, чтобы искать фракталы из 5, 7, 9....свечей. Так можно было бы выделить наиболее важные экстремумы и частично избавиться от шумов. Как я понимаю, нужно задать всего 2 величины, например N=5, k=2, если рассматривать фрактал из 5 свечей.
 
MQL4 Comments:

Этот индикатор вроде по лучше кажет.

вот скрин для сравнения. 

Да, этот индикатор лучше. Спасибо за код.
Причина обращения: