//+------------------------------------------------------------------+
//|   #SpudFibo.mq4 - downloaded from ultimaforex.com
//+------------------------------------------------------------------+
#property  indicator_chart_window

extern string note1 = "Fibonacci colors";
extern color UpperFiboColor = White;
extern color MainFiboColor = White;
extern color LowerFiboColor = White;
extern string note2 = "Draw main Fibonacci lines?";
extern bool  InnerFibs = false;

double HiPrice, LoPrice, Range;
datetime StartTime;

int init()
{
   return(0);
}

int deinit()
{
   ObjectDelete("SFiboUp");
   ObjectDelete("SFiboDn");
   ObjectDelete("SFiboIn");
   return(0);
}


//+------------------------------------------------------------------+
//| Draw Fibo
//+------------------------------------------------------------------+

int DrawFibo()
{
	if(ObjectFind("SFiboUp") == -1)
		ObjectCreate("SFiboUp",OBJ_FIBO,0,StartTime,HiPrice,StartTime,HiPrice);
	else
	{
		ObjectSet("SFiboUp",OBJPROP_TIME2, StartTime);
		ObjectSet("SFiboUp",OBJPROP_TIME1, StartTime);
		ObjectSet("SFiboUp",OBJPROP_PRICE1,HiPrice);
		ObjectSet("SFiboUp",OBJPROP_PRICE2,HiPrice);
	}
   ObjectSet("SFiboUp",OBJPROP_LEVELCOLOR,UpperFiboColor);
   ObjectSet("SFiboUp",OBJPROP_FIBOLEVELS,13);
   ObjectSet("SFiboUp",OBJPROP_FIRSTLEVEL+0,0.0);	ObjectSetFiboDescription("SFiboUp",0,"%$"); 
  
   
   ObjectSet("SFiboUp",OBJPROP_RAY,false);
   ObjectSet("SFiboUp",OBJPROP_BACK,false);

	if(ObjectFind("SFiboDn") == -1)
		ObjectCreate("SFiboDn",OBJ_FIBO,0,StartTime,LoPrice,StartTime,LoPrice);
	else
	{
		ObjectSet("SFiboDn",OBJPROP_TIME2, StartTime);
		ObjectSet("SFiboDn",OBJPROP_TIME1, StartTime);
		ObjectSet("SFiboDn",OBJPROP_PRICE1,LoPrice);
		ObjectSet("SFiboDn",OBJPROP_PRICE2,LoPrice);
	}
   ObjectSet("SFiboDn",OBJPROP_LEVELCOLOR,LowerFiboColor); 
   ObjectSet("SFiboDn",OBJPROP_FIBOLEVELS,19);
   ObjectSet("SFiboDn",OBJPROP_FIRSTLEVEL+0,0.0);	ObjectSetFiboDescription("SFiboDn",0,"%$"); 
  
  
   ObjectSet("SFiboDn",OBJPROP_RAY,false);
   ObjectSet("SFiboDn",OBJPROP_BACK,false);

	if(InnerFibs)
	{
		if(ObjectFind("SFiboIn") == -1)
			ObjectCreate("SFiboIn",OBJ_FIBO,0,StartTime,HiPrice,StartTime+PERIOD_H1*60,LoPrice);
		else
		{
			ObjectSet("SFiboIn",OBJPROP_TIME2, StartTime);
			ObjectSet("SFiboIn",OBJPROP_TIME1, StartTime+PERIOD_H1*60);
			ObjectSet("SFiboIn",OBJPROP_PRICE1,HiPrice);
			ObjectSet("SFiboIn",OBJPROP_PRICE2,LoPrice);
		}
   	ObjectSet("SFiboIn",OBJPROP_LEVELCOLOR,MainFiboColor); 
   	ObjectSet("SFiboIn",OBJPROP_FIBOLEVELS,7);
   	ObjectSet("SFiboIn",OBJPROP_FIRSTLEVEL+0,0.0);	ObjectSetFiboDescription("SFiboIn",0," (0.0) -  %$"); 
   	
   	
   	
   	ObjectSet("SFiboIn",OBJPROP_FIRSTLEVEL+6,1.000);	ObjectSetFiboDescription("SFiboIn",6," (100.0) -  %$"); 
   	ObjectSet("SFiboIn",OBJPROP_RAY,true);
   	ObjectSet("SFiboIn",OBJPROP_BACK,true);
   }
   else
	   ObjectDelete("SFiboIn");
}

//+------------------------------------------------------------------+
//| Indicator start function
//+------------------------------------------------------------------+

int start()
{
	int shift, indHigh, indLow;
	
	shift	= iBarShift(NULL,PERIOD_H1,Time[0]) + 2;	// PREVIOUS 2 HOUR
	indHigh = iHighest(NULL, PERIOD_H1, MODE_HIGH, 2, 1);
	HiPrice		= iHigh(NULL,PERIOD_H1,indHigh);
	indLow = iLowest(NULL, PERIOD_H1, MODE_LOW, 2, 1);
	LoPrice		= iLow (NULL,PERIOD_H1,indLow);
	StartTime	= iTime(NULL,PERIOD_H1,shift);

	if(TimeDayOfWeek(StartTime)==0/*Sunday*/)         // This is NOT modified from Daily code, EXCEPT for Period_H1
	{//Add fridays high and low
	   
		HiPrice = MathMax(HiPrice,iHigh(NULL,PERIOD_H1,shift+1));
		LoPrice = MathMin(LoPrice,iLow(NULL,PERIOD_H1,shift+1));
	}

	Range = HiPrice-LoPrice;

	DrawFibo();

	return(0);
}
//+------------------------------------------------------------------+

