//+------------------------------------------------------------------+
//|                                                                  |
//|                         _TRO_SARMACD_History                     |
//|                                                                  |
//|   Copyright © 2008, Avery T. Horton, Jr. aka TheRumpledOne       |
//|                                                                  |
//|   PO BOX 43575, TUCSON, AZ 85733                                 |
//|                                                                  |
//|   GIFTS AND DONATIONS ACCEPTED                                   | 
//|                                                                  |
//|   therumpledone@gmail.com                                        |  
//+------------------------------------------------------------------+ 

// this updn was posted here: http://www.forex-tsd.com/general-discussion/7123-daily-average-indicator-2.html#post212976

#property  copyright "Copyright © 2008, Avery T. Horton, Jr. aka TRO" 
#property  link      "http://www.therumpledone.com/" 

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Lime    
#property indicator_color2 DarkGreen         
#property indicator_color3 Yellow      
#property indicator_color4 Maroon    
#property indicator_color5 Red        
   

//---- parameters
 
extern string myPair    = "";

//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalEMA=9;
//---- indicator buffers
double     TriggerUP[];
double     TriggerDN[];

//---- buffers

   double     ExtBuffer0[];   
   double     ExtBuffer1[];
   double     ExtBuffer2[];
   double     ExtBuffer3[]; 
   double     ExtBuffer4[];   

   int myPeriod = 0 ;
 
//+------------------------------------------------------------------+

double nma[] ;
double prices[];
double momentum[];
double emas[][3];
double alpha , xnma ;


//+------------------------------------------------------------------+

string TimeFrameToString(int tf)
{
   string tfs;
   switch(tf) {
      case PERIOD_MN1: tfs="MN"; break;
      case PERIOD_M1:  tfs="M1"  ; break;
      case PERIOD_M5:  tfs="M5"  ; break;
      case PERIOD_M15: tfs="M15" ; break;
      case PERIOD_M30: tfs="M30" ; break;
      case PERIOD_H1:  tfs="H1"  ; break;
      case PERIOD_H4:  tfs="H4"  ; break;
      case PERIOD_D1:  tfs="D1"  ; break;
      case PERIOD_W1:  tfs="W1"  ; break;
   }
   return(tfs);
} 

//+------------------------------------------------------------------+

int init()
{
   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);
   SetIndexBuffer(3,ExtBuffer3);
   SetIndexBuffer(4,ExtBuffer4);
 
   
   SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, 4, indicator_color1);
   SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, 4, indicator_color2);
   SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, 4, indicator_color3);
   SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, 4, indicator_color4);
   SetIndexStyle(4,DRAW_HISTOGRAM, EMPTY, 4, indicator_color5);
 
   
   

if (myPair == "") myPair = Symbol();
   
if( myPeriod == 0) myPeriod = Period() ;    


string tPeriod = TimeFrameToString(myPeriod) ;

IndicatorShortName("TRO_SARMACD "+myPair+"("+tPeriod+")" );
    
    
return(0);
}

//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
  
//+------------------------------------------------------------------+
int start()
  {


   int i,MACDTrigger,SARTrigger,counted_bars=IndicatorCounted();
   double MACDHistCur,MACDHistPrev,Signal,MACD;
	double alpha = 2.0 / (SignalEMA + 1.0);
	double alpha_1 = 1.0 - alpha;
   
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   i=Bars-counted_bars;

   while(i>0) 
      {
      MACD=iMACD(NULL,0,FastEMA,SlowEMA,SignalEMA,PRICE_CLOSE,MODE_MAIN,i);
      Signal=iMACD(NULL,0,FastEMA,SlowEMA,SignalEMA,PRICE_CLOSE,MODE_SIGNAL,i);
      
      MACDHistPrev=MACDHistCur;
      MACDHistCur=MACD-Signal;

      if((MACDHistCur*MACDHistPrev)<0.0) MACDTrigger=((MACDHistCur<0.0)+1);
      SARTrigger=((iSAR(NULL,0,0.02,0.2,i)>Close[i])+1);
      if(MACDTrigger==SARTrigger)
         {
         if(MACDTrigger==1) TriggerUP[i]=(High[i]-Low[i])/2+Low[i]+Point*10;
         if(MACDTrigger==2) TriggerDN[i]=(Low[i]-Low[i])/2+Low[i]-Point*10;
         MACDTrigger=0;
         SARTrigger=0;
         } 
        

/*
Comment( "TriggerUP[i]=", DoubleToStr(TriggerUP[i], Digits), "\n",
         "TriggerDN[i]", DoubleToStr(TriggerDN[i], Digits), "\n", 
         " "  ) ; 
*/

while(true)
{
 ArrayResize(TriggerUP,Bars);
 ArrayResize(TriggerDN,Bars);      
      
  if (TriggerUP[i] > 0 ) { PlotHist(4,0,0,0,0,i) ; break; }
  if (TriggerDN[i] > 0 ) { PlotHist(0,0,0,0,4,i) ; break; } 
                           PlotHist(0,0,4,0,0,i) ; break; 

} // while 

i--;
} // for

return(0);

} // start


//+------------------------------------------------------------------+
      
void PlotHist(int a,int b,int c,int d,int e, int bars)
{

ExtBuffer0[bars]=a;    
ExtBuffer1[bars]=b;
ExtBuffer2[bars]=c;
ExtBuffer3[bars]=d;
ExtBuffer4[bars]=e;
 
}

//+------------------------------------------------------------------+