wlxFractals_v5





//+------------------------------------------------------------------+
//|                                                  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 Blue
#property indicator_color2 Red
//---- input parameters
extern int Equals = 5;
extern int nLeftUp = 2;
extern int nRightUp = 2;
extern int nLeftDown = 2;
extern 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, 1);
   SetIndexArrow(0, 217);
//----
   SetIndexStyle(1, DRAW_ARROW, 0, 1);
   SetIndexArrow(1, 218);
//----
   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);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:


Implements a curve of type DRAW_ARROW

Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: