#property copyright "Copyright © 2011, KGForexWorld.com"
#property link      "http://www.kgforexworld.com"

#property indicator_chart_window
#property indicator_buffers 8
extern	string	nomor_indi	= "1",
                  Note1       = "WaveUp->Arah Wave",
                  Note2       = "TP->Level 1.618 Fibonacci";

extern	int		Periode	= 20;
extern	color		Warna	= Lime;
extern	bool		ID 		= true,
                  WaveUp   = true,
						Harga		= true,
						TP       = false;
extern	int		Jarak		= 10;
int		CBar,Per,Par;
double	BSBand_FIBO0500[],
			BSBand_FIBO1000[],
			BSBand_FIBO0000[],
			BSBand_TP[],
			BSBand_FIBO0382[],
			BSBand_FIBO0236[],
			BSBand_FIBO0764[],
			BSBand_FIBO0618[],
			start;

//color		Warna;
string	SEED;
datetime	LINETIME,SAVETIME,TSearch;
string   LabelName,NamaFile;
int handle,SAVE_LINETIME;
//+------------------------------------------------------------------+
//| init()													                     |
//+------------------------------------------------------------------+
int init(){

  LabelName	= "FIBO_WAVE_BANDs_"+nomor_indi+Warna;
	NamaFile		= "FIBO_WAVE_BANDs"+LabelName+Symbol();


	handle	= FileOpen(NamaFile, FILE_BIN|FILE_READ);
	if(handle>=1){
		LINETIME			= FileReadInteger(handle, LONG_VALUE);
		FileClose(handle);
	}
	else if(LINETIME == 0){
		LINETIME = Time[Periode];
	}
	SAVE_LINETIME	= LINETIME;

   

	

Per = Periode;




	Warna	=Warna ;
	SetIndexBuffer(0,BSBand_FIBO0500);
	SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,Warna);
	SetIndexLabel(0,nomor_indi+"BS ");	
	
		SetIndexBuffer(6,BSBand_FIBO1000);
		SetIndexStyle(6,DRAW_LINE,STYLE_DASHDOTDOT,1,Warna);
		SetIndexLabel(6,nomor_indi+"1.00 ");
		
		SetIndexBuffer(7,BSBand_FIBO0000);
		SetIndexStyle(7,DRAW_LINE,STYLE_DASHDOTDOT,1,Warna);
		SetIndexLabel(7,nomor_indi+"0.0 ");
		
		SetIndexBuffer(2,BSBand_FIBO0618);
		SetIndexStyle(2,DRAW_LINE,STYLE_DASHDOT,1,Warna);
		SetIndexLabel(2,nomor_indi+"0.618 ");
		//
		SetIndexBuffer(3,BSBand_FIBO0382);
		SetIndexStyle(3,DRAW_LINE,STYLE_DASHDOT,1,Warna);
		SetIndexLabel(3,nomor_indi+"0.382 ");
		//
		SetIndexBuffer(4,BSBand_FIBO0236);
		SetIndexStyle(4,DRAW_LINE,STYLE_DOT,1,Warna);
		SetIndexLabel(4,nomor_indi+"0.236 ");
		//
		SetIndexBuffer(5,BSBand_FIBO0764);
		SetIndexStyle(5,DRAW_LINE,STYLE_DOT,1,Warna);
		SetIndexLabel(5,nomor_indi+"0.764 ");
	if(TP){
		SetIndexBuffer(1,BSBand_TP);
		SetIndexStyle(1,DRAW_LINE,STYLE_DASHDOTDOT,1,Warna);
		SetIndexLabel(1,nomor_indi+"1.618 ");
	}  
		
}


//+-------------------------------------------------------------------+
//| deinit													                      |
//+-------------------------------------------------------------------+
int deinit(){

	ObjectDelete(nomor_indi+"BSBand_FIBO0500_");
	ObjectDelete(nomor_indi+"BSBand_FIBO1000_");
	ObjectDelete(nomor_indi+"BSBand_FIBO0000_");
	ObjectDelete(nomor_indi+"BSBand_TP_");
	ObjectDelete(nomor_indi+"BSBand_FIBO0382_");
	ObjectDelete(nomor_indi+"BSBand_FIBO0236_");
	ObjectDelete(nomor_indi+"BSBand_FIBO0764_");
	ObjectDelete(nomor_indi+"BSBand_FIBO0618_");
//
	ObjectDelete(nomor_indi+"BSBand_FIBO0500_"+" TXT");
	ObjectDelete(nomor_indi+"BSBand_FIBO1000_"+" TXT");
	ObjectDelete(nomor_indi+"BSBand_FIBO0000_"+" TXT");
	ObjectDelete(nomor_indi+"BSBand_TP_"+" TXT");
	ObjectDelete(nomor_indi+"BSBand_FIBO0236_"+" TXT");
	ObjectDelete(nomor_indi+"BSBand_FIBO0764_"+" TXT");
	ObjectDelete(nomor_indi+"BSBand_FIBO0382_"+" TXT");
	ObjectDelete(nomor_indi+"BSBand_FIBO0618_"+" TXT");
   ObjectDelete(nomor_indi+" LINE");
}


//+------------------------------------------------------------------+
//| start															               |
//+------------------------------------------------------------------+
void start(){

	//if((Per <= 1)){
	//	return(0);
//	}
	
	int		counted_bars	= IndicatorCounted(),
   			i,limit;
	string 	Legend,Sign;
	
	double	HI,LOW,BUYERSELLER,FIBO0382,FIBO0618,FIBO0236,FIBO0764,TPa,TPb;
	
   	bool		LINECREATE = false;
   if (counted_bars < 0)	return(-1);
   if(counted_bars > 0)		counted_bars--;

	limit	= Bars-counted_bars;

	if((CBar!=0) && (limit>=CBar))
		limit=CBar;
	  
		if(ObjectFind(LabelName) == -1){
	   	
		ObjectCreate(nomor_indi+" LINE", OBJ_VLINE,0,LINETIME,0);
		ObjectSet(nomor_indi+" LINE", OBJPROP_COLOR, Warna);
		ObjectSet(nomor_indi+" LINE", OBJPROP_STYLE, STYLE_DOT);
		//LINECREATE = true;
		
//	}
	//	ObjectSet(LabelName, OBJPROP_BACK, true);
	}
	
	
	LINETIME = ObjectGet(nomor_indi+" LINE", OBJPROP_TIME1);
	if (Par!=iBarShift(NULL, 0, LINETIME, false)) {
	  for(i=0; i<=Par; i++){
         BSBand_FIBO0500[i]= 0;
	  		BSBand_FIBO1000[i]	= 0;
			BSBand_FIBO0000[i]	= 0;
			BSBand_TP[i] = 0;
			BSBand_FIBO0382[i] = 0;
			BSBand_FIBO0236[i] = 0;
			BSBand_FIBO0764[i] = 0;
			BSBand_FIBO0618[i] = 0;
		}
	
	}
	Par = iBarShift(NULL, 0, LINETIME, false);
  
   	if((SAVE_LINETIME != LINETIME) || (IndicatorCounted() == 0)){
	//	DELOBJ();
	//	FIRST			= true;
		// SIMPAN POSISI KE FILE
		handle	= FileOpen(NamaFile, FILE_BIN|FILE_WRITE);
		if(handle>=1){
			FileWriteInteger(handle, LINETIME, LONG_VALUE);
			FileClose(handle);
		}
	}
   
   
   for(i=0; i<=Par; i++){
    
   	if (Par==0){
   	     HI=High[0];
   	     LOW=Low[0];
   	    }
   	    else
   	     {
   	     HI			= High[iHighest(NULL,0, MODE_HIGH, Par+1-i, i)];
   	     
   	     LOW			= Low[iLowest(NULL, 0, MODE_LOW, Par+1-i, i)];
   		  
   		  }
   		 // Print("HI =",HI);
   		 // Print("LOW =",LOW);
   	BUYERSELLER	= (HI+LOW)/2;
   	TPa         = HI+(HI-LOW)*0.382;
   	TPb         = LOW-(HI-LOW)*0.382;
   	FIBO0382    = HI-(HI-LOW)*0.618;
      FIBO0236    = HI-(HI-LOW)*0.764;
      FIBO0764    = HI-(HI-LOW)*0.236;
      FIBO0618    = HI-(HI-LOW)*0.382;
//
		   BSBand_FIBO0500[i]= BUYERSELLER;
 		   BSBand_FIBO1000[i]	= HI;
			BSBand_FIBO0000[i]	= LOW;
			BSBand_FIBO0382[i]	= FIBO0382;
			BSBand_FIBO0618[i]	= FIBO0618;
			BSBand_FIBO0236[i]	= FIBO0236;
			BSBand_FIBO0764[i]	= FIBO0764;
    
		if(TP){
			if (WaveUp){
			BSBand_TP[i]	= TPa;
			} else {
			BSBand_TP[i]	= TPb;
			}
		}
   }// END FOR


	if(Harga || ID){
   		SET_LABEL(nomor_indi+"BSBand_FIBO0500_", "0.50  ", Time[0]+(Period()*60*Jarak), BSBand_FIBO0500[0], Warna);
			SET_LABEL(nomor_indi+"BSBand_FIBO1000_", "1.00  ", Time[0]+(Period()*60*Jarak), BSBand_FIBO1000[0], Warna);
			SET_LABEL(nomor_indi+"BSBand_FIBO0000_", "0.00  ", Time[0]+(Period()*60*Jarak), BSBand_FIBO0000[0], Warna);
			SET_LABEL(nomor_indi+"BSBand_FIBO0382_", "0.382   ", Time[0]+(Period()*60*Jarak), BSBand_FIBO0382[0], Warna);
		   SET_LABEL(nomor_indi+"BSBand_FIBO0236_", "0.236   ", Time[0]+(Period()*60*Jarak), BSBand_FIBO0236[0], Warna);
			SET_LABEL(nomor_indi+"BSBand_FIBO0764_", "0.764   ", Time[0]+(Period()*60*Jarak), BSBand_FIBO0764[0], Warna);
			SET_LABEL(nomor_indi+"BSBand_FIBO0618_", "0.618   ", Time[0]+(Period()*60*Jarak), BSBand_FIBO0618[0], Warna);
		if(TP){
			SET_LABEL(nomor_indi+"BSBand_TP_", "1.618   ", Time[0]+(Period()*60*Jarak), BSBand_TP[0], Warna);
		}
	}// END IF

}


//+------------------------------------------------------------------+
//|  SET_LABEL                                                       |
//+------------------------------------------------------------------+
void SET_LABEL(string name,string txt, datetime Tm, double Prc, color clr){
	if(Harga){
		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);
		}
	}

	if(ID){
		name = name + " TXT";
   	if(ObjectFind(name) == -1){
			ObjectCreate(name, OBJ_TEXT, 0, Tm, Prc);
			ObjectSetText(name, txt, 8, "Verdana", clr);
		}
   	else{
			ObjectSet(name, OBJPROP_TIME1, Tm);
			ObjectSet(name, OBJPROP_PRICE1, Prc);
			ObjectSetText(name, txt, 8, "Verdana", clr);
		}
	}

}