Fractals+3





//+------------------------------------------------------------------+
//|                                                     Fractals.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- input parameters
extern int otstup=3;
//---- buffers
double dUpFractalsBuffer[];
double dDownFractalsBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator buffers mapping  
    SetIndexBuffer(0,dUpFractalsBuffer);
    SetIndexBuffer(1,dDownFractalsBuffer);   
//---- drawing settings
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0,119);
    SetIndexStyle(1,DRAW_ARROW);
    SetIndexArrow(1,119);
//----
    SetIndexEmptyValue(0,0.0);
    SetIndexEmptyValue(1,0.0);
//---- name for DataWindow
    SetIndexLabel(0,"Fractal Up");
    SetIndexLabel(1,"Fractal Down");
//---- initialization done   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int i,nCountedBars;
    nCountedBars=IndicatorCounted();
//---- check for possible errors
    if(nCountedBars<0) return(-1);
//---- last counted bar will be recounted    
    if(nCountedBars<=2)
       i=Bars-nCountedBars-3;
    if(nCountedBars>2)
      {
       nCountedBars--;
       i=Bars-nCountedBars-1;
      }
    while(i>=2)
     {
//----Up and Down Fractals
//----5 bars Fractal
      if(High[i]>High[i+1] && High[i]>High[i+2] && High[i]>High[i-1] && High[i]>High[i-2])
          dUpFractalsBuffer[i]= High[i]+otstup*Point;
      if(Low[i]<Low[i+1] && Low[i]<Low[i+2] && Low[i]<Low[i-1] && Low[i]<Low[i-2])
        {
          dDownFractalsBuffer[i]= Low[i]-otstup*Point;
          i--;
          continue;
        }
//----6 bars Fractal
      if((Bars-i-1)>=3)
        {
          if(High[i]==High[i+1] && High[i]>High[i+2] && High[i]>High[i+3] && High[i]>High[i-1] && High[i]>High[i-2])
             dUpFractalsBuffer[i]= High[i]+otstup*Point;
          if(Low[i]==Low[i+1] && Low[i]<Low[i+2] && Low[i]<Low[i+3] && Low[i]<Low[i-1] && Low[i]<Low[i-2])
            {
              dDownFractalsBuffer[i]= Low[i]-otstup*Point;
              i--;
              continue;
            }                      
        }         
//----7 bars Fractal
      if((Bars-i-1)>=4)
        {   
         if(High[i]>=High[i+1] && High[i]==High[i+2] && High[i]>High[i+3] && High[i]>High[i+4] && High[i]>High[i-1] && 
            High[i]>High[i-2])
             dUpFractalsBuffer[i]= High[i]+otstup*Point;
         if(Low[i]<=Low[i+1] && Low[i]==Low[i+2] && Low[i]<Low[i+3] && Low[i]<Low[i+4] && Low[i]<Low[i-1] && 
            Low[i]<Low[i-2])
           {
             dDownFractalsBuffer[i]= Low[i]-otstup*Point;
             i--;
             continue;
           }                  
        }  
 //----8 bars Fractal                          
      if((Bars-i-1)>=5)
        {   
         if(High[i]>=High[i+1] && High[i]==High[i+2] && High[i]==High[i+3] && High[i]>High[i+4] && High[i]>High[i+5] && 
            High[i]>High[i-1] && High[i]>High[i-2])
             dUpFractalsBuffer[i]= High[i]+otstup*Point;
         if(Low[i]<=Low[i+1] && Low[i]==Low[i+2] && Low[i]==Low[i+3] && Low[i]<Low[i+4] && Low[i]<Low[i+5] && 
            Low[i]<Low[i-1] && Low[i]<Low[i-2])
           {
             dDownFractalsBuffer[i]= Low[i]-otstup*Point;
             i--;
             continue;
           }                              
        } 
//----9 bars Fractal                                        
      if((Bars-i-1)>=6)
        {   
         if(High[i]>=High[i+1] && High[i]==High[i+2] && High[i]>=High[i+3] && High[i]==High[i+4] && High[i]>High[i+5] && 
            High[i]>High[i+6] && High[i]>High[i-1] && High[i]>High[i-2])
             dUpFractalsBuffer[i]= High[i]+otstup*Point;
         if(Low[i]<=Low[i+1] && Low[i]==Low[i+2] && Low[i]<=Low[i+3] && Low[i]==Low[i+4] && Low[i]<Low[i+5] && 
            Low[i]<Low[i+6] && Low[i]<Low[i-1] && Low[i]<Low[i-2])
           {
             dDownFractalsBuffer[i]= Low[i]-otstup*Point;
             i--;
             continue;
           }                        
        }                                    
      i--;
     }

//----
   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: