//+------------------------------------------------------------------+
//|                                               AvgRange.Bands.mq4 |
//|                                               Created by Marsya7 |
//|                                      http://www.kgforexworld.com |
//+------------------------------------------------------------------+
#property copyright "Created by Marsya7"
#property link      "http://www.kgforexworld.com"

#property indicator_chart_window
#property indicator_buffers 5

//---- buffers
extern int history = 200;

int    avgD1,avgW1,avgMN1,shift;
double range,OpPrice[],Upper[],Lower[],Upper_2[],Lower_2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,Upper);
	SetIndexStyle(0,DRAW_LINE,STYLE_DOT,1,Red);
	SetIndexLabel(0,"Upper_AvgR");
	
	SetIndexBuffer(1,OpPrice);
	SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,Green);
	SetIndexLabel(1,"Daily_Open");
	
	SetIndexBuffer(2,Lower);
	SetIndexStyle(2,DRAW_LINE,STYLE_DOT,1,Blue);
	SetIndexLabel(2,"Lower_AvgR");
	
	SetIndexBuffer(3,Upper_2);
	SetIndexStyle(3,DRAW_LINE,STYLE_DOT,1,Red);
	SetIndexLabel(3,"Upper_2.AvgR");
	
	SetIndexBuffer(4,Lower_2);
	SetIndexStyle(4,DRAW_LINE,STYLE_DOT,1,Blue);
	SetIndexLabel(4,"Lower_2.AvgR");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  int    counted_bars=IndicatorCounted();
  double RAvgd,dR1,dR2,dR3,dR4,dR5,dR6,dR7,dR8,dR9,dR10,dR11,dR12,dR13,dR14,dR15,dR16,dR17,dR18,dR19,dR20;
//----
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
//-----
 if(limit>history-1)
      limit=history-1;
//-----      
 for(int i=0; i<limit; i++)
  {
   shift = iBarShift(Symbol(), PERIOD_D1, Time[i], false);
//Daily range data
   dR1  = (iHigh(NULL,PERIOD_D1,shift+1)-iLow(NULL,PERIOD_D1,shift+1))/Point;
   dR2  = (iHigh(NULL,PERIOD_D1,shift+2)-iLow(NULL,PERIOD_D1,shift+2))/Point;
   dR3  = (iHigh(NULL,PERIOD_D1,shift+3)-iLow(NULL,PERIOD_D1,shift+3))/Point;
   dR4  = (iHigh(NULL,PERIOD_D1,shift+4)-iLow(NULL,PERIOD_D1,shift+4))/Point;
   dR5  = (iHigh(NULL,PERIOD_D1,shift+5)-iLow(NULL,PERIOD_D1,shift+5))/Point;         
   dR6  = (iHigh(NULL,PERIOD_D1,shift+6)-iLow(NULL,PERIOD_D1,shift+6))/Point;
   dR7  = (iHigh(NULL,PERIOD_D1,shift+7)-iLow(NULL,PERIOD_D1,shift+7))/Point;
   dR8  = (iHigh(NULL,PERIOD_D1,shift+8)-iLow(NULL,PERIOD_D1,shift+8))/Point;
   dR9  = (iHigh(NULL,PERIOD_D1,shift+9)-iLow(NULL,PERIOD_D1,shift+9))/Point;
   dR10 = (iHigh(NULL,PERIOD_D1,shift+10)-iLow(NULL,PERIOD_D1,shift+10))/Point;         
   dR11 = (iHigh(NULL,PERIOD_D1,shift+11)-iLow(NULL,PERIOD_D1,shift+11))/Point;
   dR12 = (iHigh(NULL,PERIOD_D1,shift+12)-iLow(NULL,PERIOD_D1,shift+12))/Point;
   dR13 = (iHigh(NULL,PERIOD_D1,shift+13)-iLow(NULL,PERIOD_D1,shift+13))/Point;
   dR14 = (iHigh(NULL,PERIOD_D1,shift+14)-iLow(NULL,PERIOD_D1,shift+14))/Point;
   dR15 = (iHigh(NULL,PERIOD_D1,shift+15)-iLow(NULL,PERIOD_D1,shift+15))/Point;         
   dR16 = (iHigh(NULL,PERIOD_D1,shift+16)-iLow(NULL,PERIOD_D1,shift+16))/Point;
   dR17 = (iHigh(NULL,PERIOD_D1,shift+17)-iLow(NULL,PERIOD_D1,shift+17))/Point;
   dR18 = (iHigh(NULL,PERIOD_D1,shift+18)-iLow(NULL,PERIOD_D1,shift+18))/Point;
   dR19 = (iHigh(NULL,PERIOD_D1,shift+19)-iLow(NULL,PERIOD_D1,shift+19))/Point;
   dR20 = (iHigh(NULL,PERIOD_D1,shift+20)-iLow(NULL,PERIOD_D1,shift+20))/Point;
  }     
    avgD1=(dR1+dR2+dR3+dR4+dR5+dR6+dR7+dR8+dR9+dR10+dR11+dR12+dR13+dR14+dR15+dR16+dR17+dR18+dR19+dR20)/20;
//--- 
   for( i=0; i<limit; i++)
   {
    shift = iBarShift(Symbol(), PERIOD_D1, Time[i], false); 
    OpPrice[i]	 = iOpen(NULL,PERIOD_D1,shift);
   
    range = (avgD1/2)*Point;
   
    Upper[i]    = OpPrice[i] + range;
    Lower[i]    = OpPrice[i] - range;
    Upper_2[i]  = OpPrice[i] + range*2;
    Lower_2[i]  = OpPrice[i] - range*2;
   }
//-----
   return(0);
  }
//+------------------------------------------------------------------+