//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "www,forex-tsd.com"
#property link      "www,forex-tsd.com"

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1  DeepSkyBlue
#property indicator_color2  DeepSkyBlue
#property indicator_color3  DeepSkyBlue
#property indicator_color4  DimGray
#property indicator_color5  PaleVioletRed
#property indicator_color6  PaleVioletRed
#property indicator_color7  PaleVioletRed
#property indicator_style1  STYLE_DOT
#property indicator_style2  STYLE_DOT
#property indicator_style3  STYLE_DOT
#property indicator_style4  STYLE_DOT
#property indicator_style5  STYLE_DOT
#property indicator_style6  STYLE_DOT
#property indicator_style7  STYLE_DOT

//
//
//
//
//

extern int    BandsPrice       = 0;
extern int    BandsPeriod      = 14;
extern double BandsDeviations1 = 1;
extern double BandsDeviations2 = 2;
extern double BandsDeviations3 = 3;

//
//
//
//
//

double up3[];
double up2[];
double up1[];
double mid[];
double dn1[];
double dn2[];
double dn3[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//

int init()
{
   SetIndexBuffer(0,up3);
   SetIndexBuffer(1,up2);
   SetIndexBuffer(2,up1);
   SetIndexBuffer(3,mid);
   SetIndexBuffer(4,dn1);
   SetIndexBuffer(5,dn2);
   SetIndexBuffer(6,dn3);
   return(0);
}
      
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//

int start()
{
   int i,limit,counted_bars=IndicatorCounted();

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = MathMin(Bars-counted_bars,Bars-1);

   //
   //
   //
   //
   //

   for(i=limit; i>=0; i--)
   {
      double dev = iStdDev(NULL,0,BandsPeriod,0,MODE_SMA,BandsPrice,i);
         mid[i] = iMA(NULL,0,BandsPeriod,0,MODE_SMA,BandsPrice,i);
         
         if (BandsDeviations1>0) { up1[i] = mid[i]+BandsDeviations1*dev; dn1[i] = mid[i]-BandsDeviations1*dev; }
         if (BandsDeviations2>0) { up2[i] = mid[i]+BandsDeviations2*dev; dn2[i] = mid[i]-BandsDeviations2*dev; }
         if (BandsDeviations3>0) { up3[i] = mid[i]+BandsDeviations3*dev; dn3[i] = mid[i]-BandsDeviations3*dev; }
   }
   return(0);
}