Code:
//+-----------------------------------------------------------------------------------------------------------+
//| NOTIZEN UND INFOS |
//+-----------------------------------------------------------------------------------------------------------+
/*
*/
//+-----------------------------------------------------------------------------------------------------------+
//| PROPERTY |
//+-----------------------------------------------------------------------------------------------------------+
#property copyright"SHARK_RSI_V.21"
#property copyright "©_SHARK_RSI_V.21, Sirocool."
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 clrDarkSlateGray
#property indicator_color2 clrDarkRed
#property indicator_color3 clrDarkGreen
#property indicator_level1 70;
#property indicator_level2 50;
#property indicator_level3 30
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_levelcolor clrDarkSlateGray
#property indicator_levelstyle DRAW_ZIGZAG
//#property strict
extern string SHARK_RSI_SETTINGS ="------Relative Strength Index------";
extern int SHARK_RSI_PERIODE = 14;
input ENUM_APPLIED_PRICE SHARK_APPLEY = PRICE_CLOSE;
extern int Shark_Overbought = 70;
extern int Shark_Oversold = 30;
//---- Global variables
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
const long Chart_ID=ChartID();
double SHARK_BUFFER_M[],SHARK_BUFFER_DN[],SHARK_BUFFER_UP[],SHARK_BUFFER_S[];
int period[]= {1,5,15,30,60,240,1440,10080,43200};
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int SubWin = -1; //OurSubwindow
string INDI_SHORTNAME ="SHARK_RSI_V.21"; //OurIndicatorName
// ==================================== rectangle names
string NameTopLev=INDI_SHORTNAME+"LevelTop"; //50 -
string NameWaitUp=INDI_SHORTNAME+"LevelWaitTop"; // 55
string NameWaitLo=INDI_SHORTNAME+"LevelWaitBot"; //-45
string NameBotLev=INDI_SHORTNAME+"LevelBot"; //30
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
IndicatorBuffers(5);
IndicatorDigits(Digits+2);
SetIndexBuffer(0,SHARK_BUFFER_M);
SetIndexStyle(0,DRAW_LINE,EMPTY,1);
SetIndexBuffer(1,SHARK_BUFFER_DN);
SetIndexLabel(1,NULL);
SetIndexStyle(1,DRAW_LINE,EMPTY,1);
SetIndexBuffer(2,SHARK_BUFFER_UP);
SetIndexLabel(2,NULL);
SetIndexStyle(2,DRAW_LINE,EMPTY,1);
SetIndexBuffer(3,SHARK_BUFFER_S);
SetIndexStyle(3,DRAW_LINE,EMPTY,1,clrAntiqueWhite);
IndicatorSetString(INDICATOR_LEVELTEXT,0,"Overbought > " + Shark_Overbought+ "%");
IndicatorSetString(INDICATOR_LEVELTEXT,2,"Oversold < " + Shark_Oversold + "%");
IndicatorSetString(INDICATOR_SHORTNAME,INDI_SHORTNAME+
"("+IntegerToString(SHARK_RSI_PERIODE)+
","+IntegerToString(Shark_Overbought)+
","+IntegerToString(Shark_Oversold)+
","+PriceTypeToString(SHARK_APPLEY)+")");
SubWin=ChartWindowFind(); //OurSubWindowNo
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| INDICATOR_LÖSCHUNG |
//+------------------------------------------------------------------+
int deinit()
{
ObjectsDeleteAll();
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
int counted_bars=IndicatorCounted(),limit,i;
if(counted_bars<0)
return(-1);
limit=Bars-counted_bars;
for(i = limit; i >= 0 && !IsStopped(); i--)
{
SHARK_BUFFER_M[i]=iRSI(Symbol(),PERIOD_CURRENT,SHARK_RSI_PERIODE,SHARK_APPLEY,i);
SHARK_BUFFER_S[i]=iMA(Symbol(),PERIOD_CURRENT,50,0,MODE_SMA,SHARK_APPLEY,i)-iMA(Symbol(),PERIOD_CURRENT,200,0,MODE_SMMA,SHARK_APPLEY,i) ;
CreateLevelChanel();
if((SHARK_BUFFER_M[i+1] > Shark_Overbought && SHARK_BUFFER_M[i] < Shark_Overbought))
{
SHARK_BUFFER_DN[i]=SHARK_BUFFER_M[i];
SHARK_BUFFER_DN[i+1]=SHARK_BUFFER_M[i+1];
}
else
{
SHARK_BUFFER_DN[i+1]=EMPTY_VALUE;
if(SHARK_BUFFER_DN[i+2]==EMPTY_VALUE)
SHARK_BUFFER_DN[i+1]=EMPTY_VALUE;
}
if((SHARK_BUFFER_M[i+1] < Shark_Oversold && SHARK_BUFFER_M[i]> Shark_Oversold))
{
// ChartSetInteger(Symbol(),CHART_COLOR_BACKGROUND,clrForestGreen);
SHARK_BUFFER_UP[i]=SHARK_BUFFER_M[i];
SHARK_BUFFER_UP[i+1]=SHARK_BUFFER_M[i+1];
}
else
{
SHARK_BUFFER_UP[i+1]=EMPTY_VALUE;
if(SHARK_BUFFER_UP[i+2]==EMPTY_VALUE)
SHARK_BUFFER_UP[i+1]=EMPTY_VALUE;
}
//+------------------------------------------------------------------+
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CreateLevelChanel()
{
if(ObjectFind(0,NameTopLev)!=SubWin)
if(!ObjectCreate(0,NameTopLev,OBJ_RECTANGLE,SubWin,
Bars-1,50, //ChartBegin,70
Time[0],Shark_Overbought) //Now,100
)
Print(__FUNCTION__+" "+NameTopLev+" failed, Code="+IntegerToString(_LastError));
ObjectSetInteger(0,NameTopLev,OBJPROP_COLOR,clrAqua);
if(ObjectFind(0,NameBotLev)!=SubWin)
if(!ObjectCreate(0,NameBotLev,OBJ_RECTANGLE,SubWin,
Bars-1,50, //ChartBegin,50
Time[0],Shark_Oversold) //Now,500
)
Print(__FUNCTION__+" "+NameBotLev+" failed, Code="+IntegerToString(_LastError));
ObjectSetInteger(0,NameBotLev,OBJPROP_COLOR,clrAqua);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string PriceTypeToString(int pt)
{
string answer;
switch(pt)
{
case 0:
answer = "Close" ;
break;
case 1:
answer = "Open" ;
break;
case 2:
answer = "High" ;
break;
case 3:
answer = "Low" ;
break;
case 4:
answer = "Median" ;
break;
case 5:
answer = "Typical" ;
break;
case 6:
answer = "Wighted" ;
break;
default:
answer = "Invalid price field requested";
Alert(answer);
}
return(answer);
}
//+------------------------------------------------------------------+