//+------------------------------------------------------------------+
//|                                          KG Average HLCC-S/R.mq4 |
//|                                              modified by marsya7 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Goen n Fans:modified by marsya7"

#property indicator_chart_window
#property indicator_buffers 7

extern int TimePeriod = 1440;
extern color warna4H=DeepSkyBlue,warnaD=LimeGreen,
             warnaW=Magenta,warnaM=Aqua;
extern bool ID=true;
extern int jarak = 3;
extern int Fonts_Size=10;
extern string Note = "4H=240 D=1440 W=10080 M=43200";
color warna = LimeGreen;

string nama_indi="D";
double AvgBuff[],
       R1Buff[],
       S1Buff[],
       R2Buff[],
       S2Buff[],
       R3Buff[],
       S3Buff[];

//+------------------------------------------------------------------+
int init()
  {
  GetPeriod();
  SetIndexStyle(0,DRAW_LINE,0,2,warna);
  SetIndexStyle(1,DRAW_LINE,2,0,warna);
  SetIndexStyle(2,DRAW_LINE,2,0,warna);
  SetIndexStyle(3,DRAW_LINE,2,0,warna);
  SetIndexStyle(4,DRAW_LINE,2,0,warna);
  SetIndexStyle(5,DRAW_LINE,2,0,warna);
  SetIndexStyle(6,DRAW_LINE,2,0,warna);

  SetIndexBuffer(0,AvgBuff);
  SetIndexBuffer(1,R1Buff);
  SetIndexBuffer(2,S1Buff);
  SetIndexBuffer(3,R2Buff);
  SetIndexBuffer(4,S2Buff);
  SetIndexBuffer(5,R3Buff);
  SetIndexBuffer(6,S3Buff);
  
  SetIndexLabel(0,nama_indi+"Avg");
  SetIndexLabel(1,nama_indi+"R1");
  SetIndexLabel(2,nama_indi+"S1");
  SetIndexLabel(3,nama_indi+"R2");
  SetIndexLabel(4,nama_indi+"S2");
  SetIndexLabel(5,nama_indi+"R3");
  SetIndexLabel(6,nama_indi+"S3");
  }

  return(0);
//+------------------------------------------------------------------+
int deinit()
{
  ObjectDelete(nama_indi+"Avg");
  ObjectDelete(nama_indi+"R1");
  ObjectDelete(nama_indi+"S1");
  ObjectDelete(nama_indi+"R2");
  ObjectDelete(nama_indi+"S2");
  ObjectDelete(nama_indi+"R3");
  ObjectDelete(nama_indi+"S3");
//----
  ObjectDelete(nama_indi+"R1 TXT");
  ObjectDelete(nama_indi+"S1 TXT");
  ObjectDelete(nama_indi+"R2 TXT");
  ObjectDelete(nama_indi+"S2 TXT");
  ObjectDelete(nama_indi+"R3 TXT");
  ObjectDelete(nama_indi+"S3 TXT");
return(0);
}
 
//+------------------------------------------------------------------+
int start()
  {
  double Avg,H,L,C;
  int i, shift, counted = IndicatorCounted();
//----
   if(counted < 0) 
       return (-1);
//----  
   if(counted > 0) 
       counted--;
   int limit = Bars - counted;
//----  
for(i = limit - 1; i >= 0; i--)
     {
      shift = iBarShift(Symbol(), TimePeriod, Time[i], false);
      H=iHigh(NULL,TimePeriod,shift+1);
      L=iLow(NULL,TimePeriod,shift+1);
      C=iClose(NULL,TimePeriod,shift+1);
      Avg=(H+L+C+C)/4;
      AvgBuff[i]=Avg;
      R1Buff[i]=Avg+((H+L+C+C)*0.001618);
      S1Buff[i]=Avg-((H+L+C+C)*0.001618);
      R2Buff[i]=Avg+((H+L+C+C)*0.002618);
      S2Buff[i]=Avg-((H+L+C+C)*0.002618);
      R3Buff[i]=Avg+((H+L+C+C)*0.004236);
      S3Buff[i]=Avg-((H+L+C+C)*0.004236);
     if(ID)
     { if(ObjectFind(nama_indi+"Avg") == -1)
       {
			ObjectCreate(nama_indi+"Avg", OBJ_ARROW, 0, Time[i]+(Period()*60*jarak), AvgBuff[i]);
			ObjectSet(nama_indi+"Avg", OBJPROP_COLOR, warna);
			ObjectSet(nama_indi+"Avg", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
		 }
  	    else{
			ObjectSet(nama_indi+"Avg", OBJPROP_TIME1, Time[i]+(Period()*60*jarak));
			ObjectSet(nama_indi+"Avg", OBJPROP_PRICE1, AvgBuff[i]);
			ObjectSet(nama_indi+"Avg", OBJPROP_COLOR, warna);
			ObjectSet(nama_indi+"Avg", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
		  }
		 SET_LABEL(nama_indi+"R1", "R1", Time[i]+(Period()*60*jarak), R1Buff[i], warna);
       SET_LABEL(nama_indi+"S1", "S1", Time[i]+(Period()*60*jarak), S1Buff[i], warna);
       SET_LABEL(nama_indi+"R2", "R2", Time[i]+(Period()*60*jarak), R2Buff[i], warna);
       SET_LABEL(nama_indi+"S2", "S2", Time[i]+(Period()*60*jarak), S2Buff[i], warna);
       SET_LABEL(nama_indi+"R3", "R3", Time[i]+(Period()*60*jarak), R3Buff[i], warna);
       SET_LABEL(nama_indi+"S3", "S3", Time[i]+(Period()*60*jarak), S3Buff[i], warna);
     }
   }
  return(0);
  }

//+------------------------------------------------------------------+
void GetPeriod()
  {
  switch(TimePeriod)
    {
    case 240 : nama_indi = "4H"; warna = warna4H; break;
    case 1440 : nama_indi  = "D"; warna = warnaD; break;
    case 10080 : nama_indi = "W"; warna = warnaW; break;
    case 43200 : nama_indi  = "M" ; warna = warnaM; break;
    }
  }
//+------------------------------------------------------------------+
//| SET LABEL                                                        |
//+------------------------------------------------------------------+
void SET_LABEL(string name,string txt, datetime Tm, double Prc, color clr)
{
 if(ObjectFind(name) == -1)
      {
			ObjectCreate(name, OBJ_ARROW, 0, Tm, Prc);
			ObjectSet(name, OBJPROP_COLOR, clr);
			ObjectSet(name, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
		}
  	 else{
			ObjectSet(name, OBJPROP_TIME1, Tm);
			ObjectSet(name, OBJPROP_PRICE1, Prc);
			ObjectSet(name, OBJPROP_COLOR, clr);
			ObjectSet(name, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
		  }
 	name = name + " TXT";
   	if(ObjectFind(name) == -1){
			ObjectCreate(name, OBJ_TEXT, 0, Tm, Prc);
			ObjectSetText(name, txt, Fonts_Size, "Verdana", clr);
		}
   	else{
			ObjectSet(name, OBJPROP_TIME1, Tm);
			ObjectSet(name, OBJPROP_PRICE1, Prc);
			ObjectSetText(name, txt, Fonts_Size, "Verdana", clr);
		}
}