RSI Strike Indicator For MT5
Table Of Contents:
- RSI Strike Indicator For MT5
- Installing the RSI Strike Indicator For MT5
- Parameters of the RSI Strike Indicator For MT5
- Buffers of the RSI Strike Indicator For MT5
- Main Parts Of The Code
The RSI Strike Indicator For MT5 is a technically sound developed trading tool to use - this indicator is based on an already highly effective indicator known as the Relative Strength Index oscillator indicator - the Relative Strength index tool is a fantastic indicator in aiding strength gauging and to lookout for probable exhaustion levels which come about in sectors which are known as oversold and overbought zones which ultimately leads to (more often than not) reversal trading opportunities. However this modified version is slightly different in that the actual Relative Strength Index line is not seen as one would normally at the bottom window of the screen - this differs quite a bit because it actually displays the moments where crossing points are made through the Relative Strength Index and therefore each intersection is marked with what is known as strikes. These strikes are shown by means of a multi-color stacked downward or upward facing arrows - the downward facing arrows signals a sell signal and the upward facing arrows signals a buy - furthermore each stack may include up to four arrows - what is great about this indicator is that it may be used for also drawing highly relevant resistant support lines by connecting the tails of each red arrow.
Installing the RSI Strike Indicator For MT5
After you downloaded the indicator via the form above you need to unzip the zip-file. Then you need to copy the file rsi_strike.mq5 into the folder MQL5\Indicators of your MT5 installation. After that please restart MT5 and then you will be able to see the indicator in the list of indicators.
Parameters of the RSI Strike Indicator For MT5
The RSI Strike Indicator For MT5 has 16 parameters to configure.
input int RSI_Period1=2; input int RSI_Period2=4; input ENUM_APPLIED_PRICE RSI_Price1=PRICE_CLOSE; input ENUM_APPLIED_PRICE RSI_Price2=PRICE_CLOSE; input int RSI_Period3=3; input int RSI_Period4=6; input ENUM_APPLIED_PRICE RSI_Price3=PRICE_CLOSE; input ENUM_APPLIED_PRICE RSI_Price4=PRICE_CLOSE; input int RSI_Period5=4; input int RSI_Period6=8; input ENUM_APPLIED_PRICE RSI_Price5=PRICE_CLOSE; input ENUM_APPLIED_PRICE RSI_Price6=PRICE_CLOSE; input int RSI_Period7=5; input int RSI_Period8=10; input ENUM_APPLIED_PRICE RSI_Price7=PRICE_CLOSE; input ENUM_APPLIED_PRICE RSI_Price8=PRICE_CLOSE;
Buffers of the RSI Strike Indicator For MT5
The RSI Strike Indicator For MT5 provides 8 buffers.
SetIndexBuffer(0,CrossUp1,INDICATOR_DATA); SetIndexBuffer(1,CrossDown1,INDICATOR_DATA); SetIndexBuffer(2,CrossUp2,INDICATOR_DATA); SetIndexBuffer(3,CrossDown2,INDICATOR_DATA); SetIndexBuffer(4,CrossUp3,INDICATOR_DATA); SetIndexBuffer(5,CrossDown3,INDICATOR_DATA); SetIndexBuffer(6,CrossUp4,INDICATOR_DATA); SetIndexBuffer(7,CrossDown4,INDICATOR_DATA);
Main Parts Of The Code
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //---- checking the number of bars to be enough for the calculation for(int numb=0; numb lt 8; numb++) if(BarsCalculated(RSI_Handle[numb]) lt rates_total) return(RESET); if(rates_total lt min_rates_total) return(RESET); //---- declarations of local variables int to_copy,limit,bar; double Range,AvgRange; double RSI1[],RSI2[],RSI3[],RSI4[],RSI5[],RSI6[],RSI7[],RSI8[]; //---- calculations of the necessary amount of data to be copied //---- and the limit starting index for the bars recalculation loop if(prev_calculated gt rates_total || prev_calculated lt =0)// checking for the first start of the indicator calculation limit=rates_total-min_rates_total-1; // starting index for calculation of all bars else limit=rates_total-prev_calculated; // starting index for calculation of new bars to_copy=limit+2; //--- copy newly appeared data in the arrays if(CopyBuffer(RSI_Handle[0],0,0,to_copy,RSI1) lt =0) return(RESET); if(CopyBuffer(RSI_Handle[1],0,0,to_copy,RSI2) lt =0) return(RESET); if(CopyBuffer(RSI_Handle[2],0,0,to_copy,RSI3) lt =0) return(RESET); if(CopyBuffer(RSI_Handle[3],0,0,to_copy,RSI4) lt =0) return(RESET); if(CopyBuffer(RSI_Handle[4],0,0,to_copy,RSI5) lt =0) return(RESET); if(CopyBuffer(RSI_Handle[5],0,0,to_copy,RSI6) lt =0) return(RESET); if(CopyBuffer(RSI_Handle[6],0,0,to_copy,RSI7) lt =0) return(RESET); if(CopyBuffer(RSI_Handle[7],0,0,to_copy,RSI8) lt =0) return(RESET); //---- indexing elements in arrays as timeseries ArraySetAsSeries(RSI1,true); ArraySetAsSeries(RSI2,true); ArraySetAsSeries(RSI3,true); ArraySetAsSeries(RSI4,true); ArraySetAsSeries(RSI5,true); ArraySetAsSeries(RSI6,true); ArraySetAsSeries(RSI7,true); ArraySetAsSeries(RSI8,true); ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); //---- main indicator calculation loop for(bar=limit; bar gt =0 && !IsStopped(); bar--) { AvgRange=0.0; for(int count=bar; count lt =bar+9; count++) AvgRange+=MathAbs(high[count]-low[count]); Range=AvgRange/10; CrossUp1[bar]=0.0; CrossDown1[bar]=0.0; CrossUp2[bar]=0.0; CrossDown2[bar]=0.0; CrossUp3[bar]=0.0; CrossDown3[bar]=0.0; CrossUp4[bar]=0.0; CrossDown4[bar]=0.0; if(RSI1[bar] gt RSI2[bar] && RSI1[bar+1] lt RSI2[bar+1]) CrossUp1[bar]=low[bar]-Range*0.2; else if(RSI1[bar] lt RSI2[bar] && RSI1[bar+1] gt RSI2[bar+1]) CrossDown1[bar]=high[bar]+Range*0.2; if(RSI3[bar] gt RSI4[bar] && RSI3[bar+1] lt RSI4[bar+1]) CrossUp2[bar]=low[bar]-Range*0.4; else if(RSI3[bar] lt RSI4[bar] && RSI3[bar+1] gt RSI4[bar+1]) CrossDown2[bar]=high[bar]+Range*0.4; if(RSI5[bar] gt RSI6[bar] && RSI5[bar+1] lt RSI6[bar+1]) CrossUp3[bar]=low[bar]-Range*0.6; else if(RSI5[bar] lt RSI6[bar] && RSI5[bar+1] gt RSI6[bar+1]) CrossDown3[bar]=high[bar]+Range*0.6; if(RSI7[bar] gt RSI8[bar] && RSI7[bar+1] lt RSI8[bar+1]) CrossUp4[bar]=low[bar]-Range*0.8; else if(RSI7[bar] lt RSI8[bar] && RSI7[bar+1] gt RSI8[bar+1]) CrossDown4[bar]=high[bar]+Range*0.8; } //---- return(rates_total); } //+------------------------------------------------------------------+