//+------------------------------------------------------------------+ //| Rj_SlidingRange.mq4 | //| Copyright © 2011,RJ Rjabkov Alexander | //| rj-a@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011,RJ Rjabkov Alexander" #property link "rj-a@mail.ru" #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Aqua #property indicator_color2 Red #property indicator_color3 Aqua #property indicator_color4 Red #property indicator_width1 1 #property indicator_width2 1 #property indicator_width3 2 #property indicator_width4 2 #property indicator_style1 2 #property indicator_style2 2 extern int CalcPeriodRange=5; double UpperLimit[]; double LowerLimit[]; double AwlUpper[]; double AwlLower[]; double Current[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(5); SetIndexBuffer(0,UpperLimit); SetIndexBuffer(1,LowerLimit); SetIndexBuffer(2,AwlUpper); SetIndexBuffer(3,AwlLower); SetIndexBuffer(4,Current); SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexStyle(2,DRAW_LINE); SetIndexStyle(3,DRAW_LINE); return(0); } int deinit() {return(0);} //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int i,cb; int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; cb=Bars-counted_bars; if(counted_bars==0) cb-=1+CalcPeriodRange; while(cb>=0) { i=cb+CalcPeriodRange-1; double b1=0,b2=0; while(i>=cb) { b1 += High[iHighest(NULL, 0, MODE_HIGH, CalcPeriodRange, i)]; b2 += Low[iLowest(NULL, 0, MODE_LOW, CalcPeriodRange, i)]; i--; } UpperLimit[cb]=b1/CalcPeriodRange; LowerLimit[cb]=b2/CalcPeriodRange; Current[cb]=NormalizeDouble((UpperLimit[cb]+LowerLimit[cb])/2,5); AwlUpper[cb]=EMPTY_VALUE; AwlLower[cb]=EMPTY_VALUE; if(Current[cb]>Current[cb+1]) {AwlUpper[cb]=Current[cb]; AwlUpper[cb+1]=Current[cb+1];} if(Current[cb]