RSI_Strike(AM)_SW





//+------------------------------------------------------------------+
//|                                            RSI_Strike(AM)_SW.mq4 |
//|                                               Andrey Matvievskiy |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Andrey Matvievskiy"
#property link      ""

#property indicator_separate_window

#property indicator_buffers 5

#property indicator_color1 Black
#property indicator_color2 Green
#property indicator_color3 Red
#property indicator_color4 Green
#property indicator_color5 Red

//---- input parameters
extern int Period_MA1 = 34;
extern int Period_MA2 = 5; 
extern int Price_MA1 = 4;
extern int Price_MA2 = 4; 
extern int Method_MA1 = 0;
extern int Method_MA2 = 0; 

extern int RSI_Period1=2;
extern int RSI_Period2=4;
extern int RSI_Period3=6;
extern int RSI_Period4=8;
extern int RSI_Price1=0;
extern int RSI_Price2=0;
extern int RSI_Price3=0;
extern int RSI_Price4=0;

extern int TF=0;

double ExtBuffer0[] ;
double ExtBuffer1[] ;
double ExtBuffer2[] ;

double CrossUp1[];
double CrossDown1[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0,DRAW_NONE);
   SetIndexBuffer(0, ExtBuffer0);
   
   SetIndexStyle(1,DRAW_HISTOGRAM,0,1);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexStyle(2,DRAW_HISTOGRAM,0,1); 
   SetIndexBuffer(2,ExtBuffer2);
   
   SetIndexStyle(3, DRAW_ARROW,0,0);
   SetIndexArrow(3, 233);
   SetIndexBuffer(3, CrossUp1);
   SetIndexStyle(4, DRAW_ARROW,0,0);
   SetIndexArrow(4, 234);
   SetIndexBuffer(4, CrossDown1);
     
   SetIndexLabel(0,NULL);
   SetIndexLabel(1,"MACD+");
   SetIndexLabel(2,"MACD-");
   SetIndexLabel(3,"RSI Strike+");
   SetIndexLabel(4,"RSI Strike-");
   
   IndicatorShortName("RSI_Strike(AM)_SW (TF "+TF+")");  
                
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
  
   int start()
  {
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev1,current1;
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
      for(int i=0; i<limit; i++)
      ExtBuffer0[i]=iMA(NULL,TF,Period_MA2,0,Method_MA2,Price_MA2,i)-iMA(NULL,TF,Period_MA1,0,Method_MA1,Price_MA1,i); 
      bool up1=true;
      for(i=limit-1; i>=0; i--)
     {
      current1=ExtBuffer0[i];
      prev1=ExtBuffer0[i+1];
      if(current1>prev1) up1=true;
      if(current1<prev1) up1=false;
      if(!up1)
        {
         ExtBuffer2[i]=current1;
         ExtBuffer1[i]=0.0;
        }
      else
        {
         ExtBuffer1[i]=current1;
         ExtBuffer2[i]=0.0;
        }
       
     
      double A_1 = iRSI(NULL, TF, RSI_Period1, RSI_Price1, i);
      double A_2 = iRSI(NULL, TF, RSI_Period1, RSI_Price1, i+1);

      double B_1 = iRSI(NULL, TF, RSI_Period2, RSI_Price2, i);
      double B_2 = iRSI(NULL, TF, RSI_Period2, RSI_Price2, i+1);
      
      double C_1 = iRSI(NULL, TF, RSI_Period3, RSI_Price3, i);
      double C_2 = iRSI(NULL, TF, RSI_Period3, RSI_Price3, i+1);

      double D_1 = iRSI(NULL, TF, RSI_Period4, RSI_Price4, i);
      double D_2 = iRSI(NULL, TF, RSI_Period4, RSI_Price4, i+1);
             
      
      
      if ((A_1 > B_1) &&(A_2 < B_2))
        {
         CrossUp1[i]=0;
        }
      else  if ((A_1 < B_1) &&(A_2 > B_2))
        {
         CrossDown1[i]=0;
        }
    
     if ((A_1 > C_1) &&(A_2 < C_2))
        {
         CrossUp1[i]=0;
        }
      else  if ((A_1 < C_1) &&(A_2 > C_2))
        {
         CrossDown1[i]=0;
        }
        
      if ((A_1 > D_1) &&(A_2 < D_2))
        {
         CrossUp1[i]=0;
        }
      else  if ((A_1 < D_1) &&(A_2 > D_2))
        {
         CrossDown1[i]=0;
        }
        
      if ((B_1 > C_1) &&(B_2 < C_2))
        {
         CrossUp1[i]=0;
        }
      else  if ((B_1 < C_1) &&(B_2 > C_2))
        {
         CrossDown1[i]=0;
        }
      
      if ((B_1 > D_1) &&(B_2 < D_2))
        {
         CrossUp1[i]=0;
        }
      else  if ((B_1 < D_1) &&(B_2 > D_2))
        {
         CrossDown1[i]=0;
        }
                
      if ((C_1 > D_1) &&(C_2 < D_2))
        {
         CrossUp1[i]=0;
        }
      else  if ((C_1 < D_1) &&(C_2 > D_2))
        {
         CrossDown1[i]=0;
        }   
            
  }
    
//----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:

Implements a curve of type DRAW_NONE

Implements a curve of type DRAW_HISTOGRAM
Implements a curve of type DRAW_ARROW

Indicators Used:

Moving average indicator
Relative strength index


Custom Indicators Used:

Order Management characteristics:

Other Features: