//+------------------------------------------------------------------+
//|                                         SmoothCandle S v1.00.mq4 |
//|                                 Copyright © 2005, Varus Henschke |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2005, Varus Henschke"

//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 4
#property  indicator_color1  Red
#property  indicator_color2  DimGray
#property  indicator_color3  DimGray
#property  indicator_color4  Blue

//---- indicator parameters
extern int SMA=5;

//---- indicator buffers
double     nOpen[];
double     nHigh[];
double     nLow[];
double     nClose[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexStyle(3,DRAW_LINE);
   
//---- line shifts when drawing
   SetIndexShift(0,SMA);
   SetIndexShift(1,SMA);
   SetIndexShift(2,SMA);
   SetIndexShift(3,SMA);

//---- indicator buffers mapping
   if(!SetIndexBuffer(0,nOpen) && !SetIndexBuffer(1,nHigh) && !SetIndexBuffer(2,nLow) && !SetIndexBuffer(3,nClose))
      Print("cannot set indicator buffers!");

//---- name for DataWindow and indicator subwindow label
   //IndicatorShortName("SmoothCandle S SMA ( " +SMA+ " )");
   //SetIndexLabel(0,"Open");
   //SetIndexLabel(1,"High");
   //SetIndexLabel(2,"Low");
   //SetIndexLabel(3,"Close");
   
//---- initialization done
   return(0);
  }
  
//+------------------------------------------------------------------+
//| Moving Averages of Candlestick                                   |
//+------------------------------------------------------------------+

int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
   
//---- check for possible errors
   if(counted_bars<0) return(-1);
   
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars-SMA-1;

   for(int i=SMA; i<limit; i++){    // Does not work if i=0 so included SetIndexShift above.  That does my head in.
   
      nOpen[i]  = 0;
      nHigh[i]  = 0;
      nLow[i]   = 0;
      nClose[i] = 0;
      
      for(int j=i-SMA; j<i; j++){
      
         nOpen[i]  = nOpen[i]  + (Open[j]  / SMA);
         nHigh[i]  = nHigh[i]  + (High[j]  / SMA);
         nLow[i]   = nLow[i]   + (Low[j]   / SMA);
         nClose[i] = nClose[i] + (Close[j] / SMA);
      }
      
   }
 
 //---- done
   return(0);
  }