several_ZZs





//+------------------------------------------------------------------+
//|                                                  several_ZZs.mq4 |
//|                                       Copyright © 2007, Mathemat |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, Mathemat"
#property indicator_chart_window
#property indicator_buffers 4

#property indicator_color1 Red         // H1
#property indicator_width1 2

#property indicator_color2 Goldenrod   // H4
#property indicator_width2 3

#property indicator_color3 Green       // D1
#property indicator_width3 4

#property indicator_color4 Blue        // W1
#property indicator_width4 5

//---- ZZ parameters
extern int _Depth = 12;
extern int _Dev = 5;
extern int _BStep = 3;

//---- indicator buffers
double H1[], H4[], D1[], W1[];


int init()
{
   IndicatorBuffers( 4 );

   for( int i = 0; i < 4; i++)   SetIndexStyle( i, DRAW_SECTION );
   
   SetIndexBuffer( 0, H1 );
   SetIndexBuffer( 1, H4 );
   SetIndexBuffer( 2, D1 );
   SetIndexBuffer( 3, W1 );
   
   for( i = 0; i < 4; i++ )      SetIndexEmptyValue( i, 0.0 );
  
   IndicatorShortName( "ZigZag(" + _Depth + "," + _Dev + "," + _BStep + ")" );
   
   return( 0 );
}

int deinit()
{
   return( 0 );
}

// êîíâåðòèðóåò áàðîâîå ñìåùåíèå, óêàçàííîå íà H1, â áàðîâîå íà áîëåå êðóïíîì ÒÔ
int convertShift( int sh, int toTF )
{
   datetime time = iTime( NULL, PERIOD_H1, sh );
   return( iBarShift( NULL, toTF, time, true ) );
}


double ZZ( int period, int shift )
{
   return( iCustom( NULL, period, "ZigZag_Rosh", 
                    _Depth, _Dev, _BStep, 
                    0, shift ) );
}


int start()
{
   int    counted_bars=IndicatorCounted();
   for( int shift = Bars - 1; shift >= 0; shift-- )
   {
      H1[ shift ] = ZZ( PERIOD_H1, shift );
   
      int shiftH4 = convertShift( shift, PERIOD_H4 );
      int shiftD1 = convertShift( shift, PERIOD_D1 );
      int shiftW1 = convertShift( shift, PERIOD_W1 );
      
      bool condition1 = ( ZZ( PERIOD_H1, shift )   < 0.01 );
      bool condition2 = ( ZZ( PERIOD_H4, shiftH4 ) < 0.01 ) || condition1;
      bool condition3 = ( ZZ( PERIOD_D1, shiftD1 ) < 0.01 ) || condition2;
      
      
      if ( condition1 )  H4[ shift ] = 0.0;
      else               H4[ shift ] = ZZ( PERIOD_H4, shiftH4 );
            
      if ( condition2 )  D1[ shift ] = 0.0;
      else               D1[ shift ] = ZZ( PERIOD_D1, shiftD1 );
            
      if ( condition3 )  W1[ shift ] = 0.0;
      else               W1[ shift ] = ZZ( PERIOD_W1, shiftW1 );
   }   
   return( 0 );
}



Sample





Analysis



Market Information Used:



Indicator Curves created:

Implements a curve of type DRAW_SECTION


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: