High_Low_(ZigZag)





//+------------------------------------------------------------------+
//|                                           High_Low (ZigZag).mq4  |
//|                                         rewritten by CrazyChart  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "rewritten by CrazyChart"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int       barn = 300;
extern int       Length=6;
//---- buffers
double ExtMapBuffer1[];
//double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexEmptyValue(0, 0.0);
  //SetIndexDrawBegin(0, barn);
   SetIndexStyle(0, DRAW_SECTION);
   SetIndexBuffer(0, ExtMapBuffer1);
//---- name for DataWindow label
   SetIndexLabel(0, "HiLoZZ(" + Length + ")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars = IndicatorCounted();
   int shift, Swing, Swing_n, uzl, i, zu, zd, mv;
   double LL, HH, BH, BL, NH, NL; 
   double Uzel[10000][3]; 
   string text;
// loop from first bar to current bar (with shift=0) 
   Swing_n = 0; 
   Swing = 0; 
   uzl = 0; 
   BH = High[barn];
   BL = Low[barn];
   zu = barn;
   zd = barn; 
//----
   for(shift = barn; shift >= 0; shift--) 
     { 
       LL = 10000000;
       HH = -100000000; 
       //----
       for(i = shift + Length; i >= shift + 1; i--) 
         { 
           if(Low[i] < LL) 
             {
               LL=Low[i];
             } 
           if(High[i] > HH) 
             {
               HH = High[i];
             } 
         } 
       //----
       if(Low[shift] < LL && High[shift] > HH)
         { 
           Swing = 2; 
           //----
           if(Swing_n == 1) 
             {
               zu = shift + 1;
             } 
           //----
           if(Swing_n == -1) 
             {
               zd = shift + 1;
             }
         } 
       else 
         { 
           if(Low[shift] < LL) 
             {
               Swing = -1;
             } 
           if(High[shift] > HH) 
             {
               Swing = 1;
             } 
         } 

       //----
       if(Swing != Swing_n && Swing_n != 0) 
         { 
           if(Swing == 2) 
             {
               Swing = -Swing_n;
               BH = High[shift];
               BL = Low[shift]; 
             } 
           uzl=uzl+1; 
           //----
           if(Swing == 1) 
             {
               Uzel[uzl][1] = zd;
               Uzel[uzl][2] = BL;
             } 
           //----
           if(Swing == -1) 
             {
               Uzel[uzl][1] = zu;
               Uzel[uzl][2] = BH; 
             } 
           BH = High[shift];
           BL = Low[shift]; 
         } 
       if(Swing == 1) 
         { 
           if(High[shift] >= BH) 
             {
               BH = High[shift];
               zu = shift;
             }
         } 
       if(Swing == -1) 
         {
           if(Low[shift] <= BL) 
             {
               BL = Low[shift]; 
               zd = shift;
             }
         } 
       Swing_n = Swing; 
     } 
   for(i = 1; i <= uzl; i++) 
     { 
       //text=DoubleToStr(Uzel[i][1],0);
       //text=;
       mv = StrToInteger(DoubleToStr(Uzel[i][1], 0));
       ExtMapBuffer1[mv] = Uzel[i][2];
     } 
   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_SECTION


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: