//+------------------------------------------------------------------+ //| Dynamic Zone RSI.mq4 | //| Copyright © 2005-07, Pavel Kulko. | //| polk@alba.dp.ua | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005-07, Pavel Kulko" #property link "polk@alba.dp.ua" #property indicator_buffers 5 #property indicator_color1 Lime //RSI #property indicator_color2 DarkGray //upper band #property indicator_color3 DimGray //lower band #property indicator_color4 Red // BB median line #property indicator_color5 Blue // EMA #property indicator_separate_window extern int RSIPeriod = 13; extern int BandPeriod = 18; extern int EMAPeriod = 5; double RSIBuf[],UpZone[],DnZone[]; double bufMA[], bufEMA[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexStyle(2,DRAW_LINE); SetIndexStyle(3,DRAW_LINE); SetIndexStyle(4,DRAW_LINE); SetIndexBuffer(0,RSIBuf); SetIndexBuffer(1,UpZone); SetIndexBuffer(2,DnZone); SetIndexBuffer(3,bufMA); SetIndexBuffer(4,bufEMA); //---- name for DataWindow and indicator subwindow label IndicatorShortName("Dynamic Zone RSI("+RSIPeriod+") BB("+BandPeriod+") EMA("+EMAPeriod+") values: "); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double MA, RSI[]; ArrayResize(RSI,BandPeriod); int counted_bars=IndicatorCounted(); int limit = Bars-counted_bars-1; for(int i=limit; i>=0; i--) { RSIBuf[i] = iRSI(NULL,0,RSIPeriod,PRICE_WEIGHTED,i); MA = 0; for(int j=i; j<i+BandPeriod; j++) { RSI[j-i] = RSIBuf[j]; MA += RSIBuf[j]/BandPeriod; } UpZone[i] = MA + (1.3185 * StDev(RSI,BandPeriod)); DnZone[i] = MA - (1.3185 * StDev(RSI,BandPeriod)); bufMA[i] = MA; } for (i=limit-1-EMAPeriod; i>=0; i--) bufEMA[i] = iMAOnArray (RSIBuf,0,EMAPeriod,0,MODE_EMA,i); //---- return(0); } double StDev(double& Data[], int Per) { return(MathSqrt(Variance(Data,Per))); } double Variance(double& Data[], int Per) { double sum, ssum; for (int i=0; i<Per; i++) { sum += Data[i]; ssum += MathPow(Data[i],2); } return((ssum*Per - sum*sum)/(Per*(Per-1))); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Relative strength index
Custom Indicators Used:
Order Management characteristics:
Other Features: