//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_color3 Red
#property indicator_color4 White
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 3
#property indicator_width4 3

//----
extern int 		MaxBars = 30;
extern color bullColor = OrangeRed;
extern color bearColor = Aquamarine;
extern int     BarExpiration     =  24;


//---- buffers
double BuyProspect[];
double SellProspect[];
bool buySignalled=false;
bool sellSignalled=false;



//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW, 0, 1, bullColor);
   SetIndexBuffer(0, BuyProspect );
   SetIndexArrow(0,217);
   SetIndexLabel(0,"BuyProspect");
   SetIndexStyle(1,DRAW_ARROW, 0, 1, bearColor);
   SetIndexBuffer(1, SellProspect);
   SetIndexArrow(1,218);
   SetIndexLabel(1,"SellProspect");
   
//---- indicator buffers mapping
   SetIndexBuffer(0,BuyProspect);
   SetIndexBuffer(1,SellProspect);
  
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
  
  
  double EMA(int i,int j)
{
   return(iMA(Symbol(), 0, i, 0, MODE_EMA, MODE_CLOSE, j));
}  

double RSI(int i, int j)
{
   return(iRSI(Symbol(), 0, i, MODE_CLOSE, j));
}    


//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int Win=0, Loss=0; double BuyPips=0, SellPips=0;
int start()
{
	if(Bars<=10) return(0);
	ExtCountedBars=IndicatorCounted();
	if (ExtCountedBars<0) return(-1);
	if (ExtCountedBars>0) ExtCountedBars--;
	int pos=Bars-ExtCountedBars-1;
	pos = MathMin(pos,MaxBars);
	for( int i = pos; i >= 0; i-- ) 
	{	
	   int buySignal=0, sellSignal=0;
		
		double HiPos = iHigh(NULL,0,i)+iATR(NULL,0,5,i+1), LoPos = iLow(NULL,0,i)-iATR(NULL,0,5,i+1);
		
		//check for buy
		
		 bool emaCut =false;
		
		if(
               EMA(5, i+0)       >  iMA(Symbol(), 0, 8, 0, MODE_EMA, MODE_CLOSE, i+0) 
            && EMA(25,i+0)      >  EMA(55,i+0)            
            && RSI(13,i+0)      >  50
            && RSI(13,i+0)      <  80            
            && EMA(200,i+0)     <  iMA(Symbol(), 0, 8, 0, MODE_EMA, MODE_CLOSE, i+0) 
            && EMA(200,i+0)     <  EMA(5,i+0)
            && EMA(200,i+0)     <  EMA(25,i+0)
            && EMA(200,i+0)     <  EMA(55,i+0)
         )
      {           
        
        	for( int j = 1; j <= BarExpiration; j++ ){
        	   if(Open[i+j]  >  EMA(200,i+j)  && Open[i+j]  <  Close[i+j])            
            {
        	      if( (Open[i+j+1]  <  EMA(200,i+j+1)  && Close[i+j+1] >  EMA(200,i+j+1))
        	         || (Open[i+j+2]  <  EMA(200,i+j+2)  && Close[i+j+2] >  EMA(200,i+j+2)))
        	      {
        	         emaCut =true;
        	         break;
        	      }        	      
        	   }        	
        	}      
      }else {
         buySignalled=false;
         emaCut =false;
      }
      
      if(emaCut && !buySignalled)
      {
       //Print(" All conditions met !!!!!!!!");
         BuyProspect[i+0] = HiPos;
					buySignal++;
				Alert("EMA Cut Buy "+Symbol()+" on "+ TimeToStr(iTime(NULL,0,i), TIME_MINUTES )+" at "+iOpen(NULL,0,i+0));
				buySignalled=true;
      }
      
      // check for sell
      
       emaCut =false; 
		
		if(
               EMA(5, i+0)       <  iMA(Symbol(), 0, 8, 0, MODE_EMA, MODE_CLOSE, i+0) 
            && EMA(25,i+0)      <  EMA(55,i+0)            
            && RSI(13,i+0)      <  50
            && RSI(13,i+0)      >  20            
            && EMA(200,i+0)     >  iMA(Symbol(), 0, 8, 0, MODE_EMA, MODE_CLOSE, i+0) 
            && EMA(200,i+0)     >  EMA(5,i+0)
            && EMA(200,i+0)     >  EMA(25,i+0)
            && EMA(200,i+0)     >  EMA(55,i+0)
         )
      {              
        
        	for( int k = 1; k <= BarExpiration; k++ ){
        	   if(Open[i+k]  <  EMA(200,i+k)  && Open[i+k]  >  Close[i+k])            
            {
        	      if( (Open[i+k+1]  >  EMA(200,i+k+1)  && Close[i+k+1] <  EMA(200,i+k+1))
        	         || (Open[i+k+2]  >  EMA(200,i+k+2)  && Close[i+k+2] <  EMA(200,i+k+2)))
        	      {
        	         emaCut =true;
        	         break;
        	      }        	      
        	   }        	
        	}      
      }else {
         sellSignalled=false;
         emaCut =false;
      }
      
      if(emaCut && !sellSignalled)
      {
       //Print(" All conditions met !!!!!!!!");
         SellProspect[i+0] =  LoPos;
					sellSignal++;
				Alert("EMA Cut Sell "+Symbol()+" on "+ TimeToStr(iTime(NULL,0,i), TIME_MINUTES )+" at "+iOpen(NULL,0,i+0));
				sellSignalled=true;
      }
				
			 
		pos--;
	}
	Comment("EMA Cut");
	//----
	return(0);
}
//+------------------------------------------------------------------+