Navigation:Home > Content >

RSI_CL.mq4

Time: 2012-06-14 | Download file:RSI_CL.mq4

//+------------------------------------------------------------------+
//|                                                       RSI_CL.mq4 |
//|                                                                * |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "Integer"
#property link      "[email protected]"

#property indicator_separate_window
#property indicator_maximum 100
#property indicator_minimum 0
#property indicator_buffers 1
#property indicator_color1 Khaki
//---- input parameters
extern int     RSIPeriod   =  5;          // Период RSI
extern int     RSIPrice    =  0;          // Цена RSI: 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int     RSILevel    =  70;         // Верхний уровень RSI, нижний равен 100-RSILevel
extern color   UpColor     =  DodgerBlue; // Цвет верхнего уровня при значении индикатора от RSILevel и выше    
extern color   DnColor     =  Red;        // Цвет нижнего уровня при значении индикатора от 100-RSILevel и ниже
extern color   NormColor   =  Gray;       // Обычный цвет уровней
extern int     IndicatorID =  1;          // Идентификатор индикатора. В случае, если необходимо, чтобы на одном графике работало несколько индикаторов с разными параметрами, у всех индикаторов должны быть разные значения идентификатора (необходимо для правильной работы с графическими объектами).
//---- buffers
double rsi[];
double up[];
double lo[];
int LoLevel;
string ShortName;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,rsi);
   
   LoLevel=100-RSILevel;

   SetLevelValue(0,50);
   
   SetIndexLabel(0,"RSI");
   
   SetIndexDrawBegin(0,RSIPeriod+1);
   
   ShortName="RSI CL "+IndicatorID;
   
   IndicatorShortName(ShortName);
   
   IndicatorDigits(2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete("RSI_CL_"+IndicatorID+"_U");
   ObjectDelete("RSI_CL_"+IndicatorID+"_L");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
         int limit=Bars-IndicatorCounted();

            for(int i=limit-1;i>=0;i--){
               rsi[i]=iRSI(NULL,0,RSIPeriod,RSIPrice,i);

                  if(rsi[i]>=RSILevel){
                     if(rsi[i+1]>=RSILevel){
                        fObjHLine("RSI_CL_"+IndicatorID+"_U",RSILevel,UpColor,1,WindowFind(ShortName),0,false);
                     }
                     else{
                        fObjHLine("RSI_CL_"+IndicatorID+"_U",RSILevel,UpColor,1,WindowFind(ShortName),2,false);
                     }
                  }
                  else{
                     if(rsi[i+1]>=RSILevel){
                        fObjHLine("RSI_CL_"+IndicatorID+"_U",RSILevel,NormColor,1,WindowFind(ShortName),2,false);
                     }
                     else{
                        fObjHLine("RSI_CL_"+IndicatorID+"_U",RSILevel,NormColor,1,WindowFind(ShortName),0,false);
                     }
                  }
                  
                  if(rsi[i]<=LoLevel){
                     if(rsi[i+1]<=LoLevel){
                        fObjHLine("RSI_CL_"+IndicatorID+"_L",LoLevel,DnColor,1,WindowFind(ShortName),0,false);
                     }
                     else{
                        fObjHLine("RSI_CL_"+IndicatorID+"_L",LoLevel,DnColor,1,WindowFind(ShortName),2,false);
                     }
                  }
                  else{
                     if(rsi[i+1]<=LoLevel){
                        fObjHLine("RSI_CL_"+IndicatorID+"_L",LoLevel,NormColor,1,WindowFind(ShortName),2,false);
                     }
                     else{
                        fObjHLine("RSI_CL_"+IndicatorID+"_L",LoLevel,NormColor,1,WindowFind(ShortName),0,false);
                     }
                  }                
                  

            }
   return(0);
  }
//+------------------------------------------------------------------+

void fObjHLine(
   string aObjectName,  // 1 имя
   double aPrice_1,     // 2 цена
   color aColor=Red,    // 3 цвет
   int aWidth=1,        // 4 толщина
   int aWindowNumber=0, // 5 окно
   int aStyle=0,        // 6 0-STYLE_SOLID, 1-STYLE_DASH, 2-STYLE_DOT, 3-STYLE_DASHDOT, 4-STYLE_DASHDOTDOT
   bool aBack=false     // 7 фон
   ){
      if(ObjectFind(aObjectName)!=aWindowNumber){
         ObjectCreate(aObjectName,OBJ_HLINE,aWindowNumber,0,aPrice_1);
      }      
   ObjectSet(aObjectName,OBJPROP_PRICE1,aPrice_1);   
   ObjectSet(aObjectName,OBJPROP_COLOR,aColor);
   ObjectSet(aObjectName,OBJPROP_WIDTH,aWidth);
   ObjectSet(aObjectName,OBJPROP_BACK,aBack);   
   ObjectSet(aObjectName,OBJPROP_STYLE,aStyle);            
}

Recommend