highest and lowest rsi,how?

 

this its normal rsi code..its close price values...how change code?--> highest price,highest or lowest rsi valus?

 

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

//|                                                          RSI.mq4 |

//|                      Copyright ?2004, MetaQuotes Software Corp. |

//|                                       http://www.metaquotes.net/ |

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

#property copyright "Copyright ?2004, MetaQuotes Software Corp."

#property link      "http://www.metaquotes.net/"



#property indicator_separate_window

#property indicator_minimum 0

#property indicator_maximum 100

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

//---- input parameters

extern int RSIPeriod=14;

//---- buffers

double RSIBuffer[];

double PosBuffer[];

double NegBuffer[];

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

//| Custom indicator initialization function                         |

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

int init()

  {

   string short_name;

//---- 2 additional buffers are used for counting.

   IndicatorBuffers(3);

   SetIndexBuffer(1,PosBuffer);

   SetIndexBuffer(2,NegBuffer);

//---- indicator line

   SetIndexStyle(0,DRAW_LINE);

   SetIndexBuffer(0,RSIBuffer);

//---- name for DataWindow and indicator subwindow label

   short_name="RSI("+RSIPeriod+")";

   IndicatorShortName(short_name);

   SetIndexLabel(0,short_name);

//----

   SetIndexDrawBegin(0,RSIPeriod);

//----

   return(0);

   int theBar;

double thelowest;

for(int i = 0; i <= 30; i++)

{

   double rsi; rsi = iRSI(NULL,0,14,PRICE_CLOSE, i);

   if( rsi < thelowest )//I just changed the ">" code there. 

    {

      thelowest = rsi;

      theBar = i;

   }

}











  }

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

//| Relative Strength Index                                          |

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

int start()

  {

   int    i,counted_bars=IndicatorCounted();

   double rel,negative,positive;

//----

   if(Bars<=RSIPeriod) return(0);

//---- initial zero

   if(counted_bars<1)

      for(i=1;i<=RSIPeriod;i++) RSIBuffer[Bars-i]=0.0;

//----

   i=Bars-RSIPeriod-1;

   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;

   while(i>=0)

     {

      double sumn=0.0,sump=0.0;

      if(i==Bars-RSIPeriod-1)

        {

         int k=Bars-2;

         //---- initial accumulation

         while(k>=i)

           {

            rel=Close[k]-Close[k+1];

            if(rel>0) sump+=rel;

            else      sumn-=rel;

            k--;

           }

         positive=sump/RSIPeriod;

         negative=sumn/RSIPeriod;

        }

      else

        {

         //---- smoothed moving average

         rel=Close[i]-Close[i+1];

         if(rel>0) sump=rel;

         else      sumn=-rel;

         positive=(PosBuffer[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;

         negative=(NegBuffer[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;

        }

      PosBuffer[i]=positive;

      NegBuffer[i]=negative;

      if(negative==0.0) RSIBuffer[i]=0.0;

      else RSIBuffer[i]=100.0-100.0/(1+positive/negative);

      i--;

     }

//----

   return(0);

  }

//+------------------------------------------------------------------+
 
#property indicator_separate_window
#property indicator_maximum 100
#property indicator_minimum 0
#property indicator_buffers 3
#property indicator_color1 DodgerBlue
#property indicator_color2 Maroon
#property indicator_color3 Maroon
#property indicator_levelstyle 0;
#property indicator_level1 70
#property indicator_level2 30
#property indicator_levelcolor DarkSlateGray

extern int RSIPeriod=14;

int bgn,k,i;

double Brsi[],Bh[],Bl[],Bpos[],Bneg[];

int init(){
 IndicatorBuffers(5);
 SetIndexBuffer(0,Brsi); SetIndexDrawBegin(0,RSIPeriod+1);
 SetIndexBuffer(1,Bh);   SetIndexDrawBegin(1,RSIPeriod+1);
 SetIndexBuffer(2,Bl);   SetIndexDrawBegin(2,RSIPeriod+1);
 SetIndexBuffer(3,Bpos);
 SetIndexBuffer(4,Bneg);
 IndicatorShortName(NULL);
 bgn=Bars-RSIPeriod-1;
 return(0);
}

int start(){i=Bars-IndicatorCounted()-1; double sumn,sump,rel,positive,negative,positive_h,negative_h,positive_l,negative_l;

 while(i>=0){if(i<bgn){sumn=0; sump=0;
                       rel=Close[i]-Close[i+1];
                       if(rel>0){sump=rel;}
                       else     {sumn=-rel;}
                       positive=(Bpos[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
                       negative=(Bneg[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;

                       sumn=0; sump=0;
                       rel=High[i]-Close[i+1];
                       if(rel>0){sump=rel;}
                       else     {sumn=-rel;}
                       positive_h=(Bpos[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
                       negative_h=(Bneg[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;

                       sumn=0; sump=0;
                       rel=Low[i]-Close[i+1];
                       if(rel>0){sump=rel;}
                       else     {sumn=-rel;}
                       positive_l=(Bpos[i+1]*(RSIPeriod-1)+sump)/RSIPeriod;
                       negative_l=(Bneg[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod;
                      }
             else{k=Bars-2; sumn=0; sump=0;
                  while(k>=i){rel=Close[k]-Close[k+1];
                              if(rel>0){sump+=rel;}
                              else     {sumn-=rel;}
                              k--;
                              }
                  positive=sump/RSIPeriod;
                  negative=sumn/RSIPeriod;

                  k=Bars-2; sumn=0; sump=0;
                  while(k>=i){rel=High[k]-Close[k+1];
                              if(rel>0){sump+=rel;}
                              else     {sumn-=rel;}
                              k--;
                              }
                  positive_h=sump/RSIPeriod;
                  negative_h=sumn/RSIPeriod;

                  k=Bars-2; sumn=0; sump=0;
                  while(k>=i){rel=Low[k]-Close[k+1];
                              if(rel>0){sump+=rel;}
                              else     {sumn-=rel;}
                              k--;
                              }
                  positive_l=sump/RSIPeriod;
                  negative_l=sumn/RSIPeriod;
                 }
             Bpos[i]=positive;
             Bneg[i]=negative;

             if(negative==0){Brsi[i]=0;}
             else           {Brsi[i]=100-100/(1+positive/negative);}

             if(negative_h==0){Bh[i]=0;}
             else             {Bh[i]=100-100/(1+positive_h/negative_h); if(High[i+1]<High[i] && Bh[i+1]>Bh[i]){Bh[i]=Bh[i+1];}}

             if(negative_l==0){Bl[i]=0;}
             else             {Bl[i]=100-100/(1+positive_l/negative_l); if(Low[i+1]<Low[i] && Bl[i+1]>Bl[i]){Bl[i]=Bl[i+1];}}

             i--;
            }
 return(0);
} 

RSI_hl

Files: