Heatmap_RSI





//+------------------------------------------------------------------+
//|                                                  Heatmap_RSI.mq4 |
//|                                                      Lq_sunshine |
//|                                         http://www.forex-tsd.com |
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 DarkGreen   // C'162,208,162'
#property indicator_color2 Green       // C' 90,185, 90' 
#property indicator_color3 LimeGreen   // C' 23,139, 23' 
#property indicator_color4 C'50,50,50' // C'255,255,255' 
#property indicator_color5 Maroon      // C'255,185,185' 
#property indicator_color6 FireBrick   // C'255,115,115' 
#property indicator_color7 Red         // C'255, 76, 76' 
#property indicator_color8 OrangeRed   // C'255, 32, 32' 
//---- parameters
extern int    Periods = 8;
extern bool   invert_strength =  0;
extern string CurrencyPair    = "";
extern string NOTE0 = "Enter currencypair in uppercase,"; 
extern string NOTE1 = "e.g. EURUSD"; 
extern string NOTE2 = "Leave empty for current symbol."; 
//extern string NOTE3 = "Add an \"m\"  e.g EURUSDm ";  
//extern string NOTE4 = "if you have a mini account.";
//---- buffers
   double     ExtBuffer0[];   
   double     ExtBuffer1[];
   double     ExtBuffer2[];
   double     ExtBuffer3[]; 
   double     ExtBuffer4[];   
   double     ExtBuffer5[];
   double     ExtBuffer6[]; 
   double     ExtBuffer7[];
   double     ExtBuffer8[]; 
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int init()
{
   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);
   SetIndexBuffer(3,ExtBuffer3);
   SetIndexBuffer(4,ExtBuffer4);
   SetIndexBuffer(5,ExtBuffer5);
   SetIndexBuffer(6,ExtBuffer6);
   SetIndexBuffer(7,ExtBuffer7);
   
   SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, 5, indicator_color1);
   SetIndexStyle(1,DRAW_HISTOGRAM, EMPTY, 5, indicator_color2);
   SetIndexStyle(2,DRAW_HISTOGRAM, EMPTY, 5, indicator_color3);
   SetIndexStyle(3,DRAW_HISTOGRAM, EMPTY, 5, indicator_color4);
   SetIndexStyle(4,DRAW_HISTOGRAM, EMPTY, 5, indicator_color5);
   SetIndexStyle(5,DRAW_HISTOGRAM, EMPTY, 5, indicator_color6);
   SetIndexStyle(6,DRAW_HISTOGRAM, EMPTY, 5, indicator_color7);
   SetIndexStyle(7,DRAW_HISTOGRAM, EMPTY, 5, indicator_color8);
   
   for (int i=0;i<indicator_buffers;i++) SetIndexLabel(i,NULL);   

   if (CurrencyPair == "") CurrencyPair = Symbol();
   if (iClose(CurrencyPair,0,0) == 0)
              CurrencyPair = Symbol();
   IndicatorShortName(CurrencyPair+"("+Periods+")");
   return(1);
}

int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  {
  
   int    counted_bars=IndicatorCounted();
   
//---- check for possible errors
   if (counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if (counted_bars>0) counted_bars--;
   
   int    pos=Bars-counted_bars;

   double ddraw;

//---- main calculation loop
   while(pos>=0)
     {          
      ddraw= iRSI(CurrencyPair,0,Periods,PRICE_CLOSE,pos);         
      
      if (invert_strength==1)   
         ddraw=ddraw-(ddraw-50)*2;   //---- Inversion of the RSI
         
      if(ddraw<=45)                  //---- RSI <= 45 draws Red blocks 
         
      if(ddraw<=45 && ddraw>40)       drawblock(0,0,0,0,4,0,0,0,pos);
             
      else if(ddraw<=40 && ddraw>35)  drawblock(0,0,0,0,0,4,0,0,pos);
                                      
      else if(ddraw<=35 && ddraw>30)  drawblock(0,0,0,0,0,0,4,0,pos);
     
      else                            drawblock(0,0,0,0,0,0,0,4,pos);
                        
                
      else if(ddraw>=55)     //---- RSI >= 55 draws Green blocks
           
      if(ddraw>55 && ddraw<60)        drawblock(4,0,0,0,0,0,0,0,pos);
              
      else if(ddraw>=60 && ddraw<70)  drawblock(0,4,0,0,0,0,0,0,pos);

      else                            drawblock(0,0,4,0,0,0,0,0,pos);
        
      else                            drawblock(0,0,0,4,0,0,0,0,pos);     //---- draw Gray block if there chart is ranging

     pos--; }
//----
   return(0);
  }
      
void drawblock(int a,int b,int c,int d,int e,int f,int g,int h,int pos)

{
ExtBuffer0[pos]=a;    
ExtBuffer1[pos]=b;
ExtBuffer2[pos]=c;
ExtBuffer3[pos]=d;
ExtBuffer4[pos]=e;
ExtBuffer5[pos]=f;
ExtBuffer6[pos]=g;
ExtBuffer7[pos]=h;
}





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:


Implements a curve of type DRAW_HISTOGRAM

Indicators Used:

Relative strength index


Custom Indicators Used:

Order Management characteristics:

Other Features: