//+------------------------------------------------------------------+ //| RSI_CL.mq4 | //| * | //| * | //+------------------------------------------------------------------+ #property copyright "Integer" #property link "for-good-letters@yandex.ru" #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 counted_bars = IndicatorCounted(); if(counted_bars < 0) return(-1); if(counted_bars > 0) counted_bars--; int limit = Bars - counted_bars; if(counted_bars==0) limit-=2; 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); }