#property copyright "Copyright © 2010, Stephen Ambatoding."
#property link      "sangmane@forexfactory.com"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Tomato

extern int MinCount = 4;

double UpArrow[], DnArrow[];

int init()
  {
//---- indicators
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(0,233);
   SetIndexArrow(1,234);
   SetIndexBuffer(0,UpArrow);
   SetIndexBuffer(1,DnArrow);   
   IndicatorDigits(Digits+1); 
//----
   return(0);
  }
  
int deinit()
  {
    string ObjName;
    for(int i=ObjectsTotal()-1; i>=0; i--)
    {
      ObjName = ObjectName(i);
      if(StringFind(ObjName,"TrendSpot",0)>=0)
        ObjectDelete(ObjName);
    }
    return;
  }  

int start()
  {
   int i, k, cnt, iflat,limit, counted_bars=IndicatorCounted();
   if(counted_bars==0)
   {
     for(i=Bars-1; i>=0; i--)
     {
       UpArrow[i] = EMPTY_VALUE;
       DnArrow[i] = EMPTY_VALUE;
     }
   }   
   bool Found;
   limit = Bars-counted_bars-1;   
   
   for(i=limit; i>=0; i--)
   {
     k = i+1;
     if(Close[k]>=Open[k])
     {
       //search for successive downbars
       cnt = 0;
       k++;
       while(True)
       {
         if(Close[k]>=Open[k]) break;
         cnt++;
         if(cnt>=MinCount) break;
         k++;
         if(k>=Bars-1) break;         
       }
       if(cnt>=MinCount)
         DnArrow[i+1] = High[i+1]+0.5*iATR(NULL,0,21,i+1);       
     }
     else
     {
       //search for successive upbars
       cnt = 0;
       k++;
       while(True)
       {
         if(Close[k]<Open[k]) break;
         cnt++;
         if(cnt>=MinCount) break;
         k++;
         if(k>=Bars-1) break;         
       }
       if(cnt>=MinCount)
         UpArrow[i+1] = Low[i+1]-0.5*iATR(NULL,0,21,i+1);
     }     
   }
   return;
 }

