//+------------------------------------------------------------------+
//|                                                      Chaos gator |
//|                                                           mladen |
//|                                                                  |
//| Aligator was developed by Bill Williams                          |
//+------------------------------------------------------------------+
#property copyright "mladen"
#property link      "mladenfx@gmail.com"

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Green
#property indicator_color2 Green
#property indicator_color3 Red
#property indicator_color4 Red
#property indicator_color5 DimGray
#property indicator_width1 2
#property indicator_width3 2
#property indicator_width5 2

//
//
//
//    Alligator and Gator default settings for shifts : 8,5,3
//    Changed shift settings to : 0,0,0 for less lag
//
//
//

extern int JawsPeriod    = 13;
extern int JawsShift     =  0;
extern int TeethPeriod   =  8;
extern int TeethShift    =  0;
extern int LipsPeriod    =  5;
extern int LipsShift     =  0;
extern int MaMethod      = MODE_SMMA;
extern int AppliedPrice  = PRICE_MEDIAN;

//
//
//
//
//

double BufferUu[];
double BufferUd[];
double BufferDd[];
double BufferDu[];
double Buffer[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//

int init()
{
   SetIndexBuffer(0,BufferUu); SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(1,BufferUd); SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(2,BufferDd); SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(3,BufferDu); SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(4,Buffer);
   
   int StartFrom=MathMax(JawsPeriod,MathMax(TeethPeriod,LipsPeriod));
   for (int i=0;i<indicator_buffers;i++)
         SetIndexDrawBegin(i,StartFrom);   
   return(0);
}
int deinit()
{
   return(0);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//

int start()
{
   int counted_bars = IndicatorCounted();
   int limit,i;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = Bars-counted_bars;

   //
   //
   //
   //
   //

   for(i = limit; i >= 0 ; i--)
   {
      double blue  = iMA(NULL,0,JawsPeriod ,JawsShift ,MaMethod,AppliedPrice,i);
      double red   = iMA(NULL,0,TeethPeriod,TeethShift,MaMethod,AppliedPrice,i);
      double green = iMA(NULL,0,LipsPeriod ,LipsShift ,MaMethod,AppliedPrice,i);

      //
      //
      //
      //
      //
      
      Buffer[i]   = 0.00;
      BufferUu[i] = EMPTY_VALUE;
      BufferUd[i] = EMPTY_VALUE;
      BufferDd[i] = EMPTY_VALUE;
      BufferDu[i] = EMPTY_VALUE;
      
         if ((green > red) && (red > blue))  Buffer[i] = green-blue;
         if ((blue  > red) && (red > green)) Buffer[i] = green-blue;
         if (Buffer[i] > 0)
            {
               if (Buffer[i] == Buffer[i+1]) { BufferUu[i] = BufferUu[i+1]; BufferUd[i] = BufferUd[i+1]; }
               if (Buffer[i]  > Buffer[i+1]) { BufferUu[i] = Buffer[i]; }
               if (Buffer[i]  < Buffer[i+1]) { BufferUd[i] = Buffer[i]; }
            }
         if (Buffer[i] < 0)
            {
               if (Buffer[i] == Buffer[i+1]) { BufferDu[i] = BufferDu[i+1]; BufferDd[i] = BufferDd[i+1]; }
               if (Buffer[i]  > Buffer[i+1]) { BufferDu[i] = Buffer[i]; }
               if (Buffer[i]  < Buffer[i+1]) { BufferDd[i] = Buffer[i]; }
            }
   }

   //
   //
   //
   //
   //

   return(0);
}