//+------------------------------------------------------------------+
//|   #H4_Hi_Low_Middle.mq4
//|   Base from spudfibo.Upgrade by Darkkiller
//+------------------------------------------------------------------+
#property  indicator_chart_window

extern string note1 = "Higher,Middle,Lower colors";
extern color H4HigherColor = Yellow;
extern ENUM_LINE_STYLE H4HigherStyle = STYLE_SOLID;
extern int H4HigherWidth = 2;
extern color H4MiddleColor = OrangeRed;
extern ENUM_LINE_STYLE H4MiddleStyle = STYLE_SOLID;
extern int H4MiddleWidth = 2;
extern color H4LowerColor = Yellow;
extern ENUM_LINE_STYLE H4LowerStyle = STYLE_SOLID;
extern int H4LowerWidth = 2;
extern string note2 = "Draw H4 middle?";
extern bool  H4Middle = true;
extern color DownPointerColor = clrRed;
extern ENUM_LINE_STYLE DownPointerStyle = STYLE_SOLID;
extern int DownPointerWidth = 2;
extern color UpPointerColor = clrGreen;
extern ENUM_LINE_STYLE UpPointerStyle = STYLE_SOLID;
extern int UpPointerWidth = 2;
extern color MidPointerColor = clrYellow;
extern ENUM_LINE_STYLE MidPointerStyle = STYLE_SOLID;
extern int MidPointerWidth = 2;

double HiPrice, LoPrice, Range;
datetime StartTime;

int init()
{
   return(0);
}

int deinit()
{
   ObjectDelete("H4Higher");
   ObjectDelete("H4Lower");
   ObjectDelete("H4Middle");
   return(0);
}


//+------------------------------------------------------------------+
//| Draw Fibo
//+------------------------------------------------------------------+

void DrawFibo()
{
	if(ObjectFind("H4Higher") == -1)
		ObjectCreate("H4Higher",OBJ_FIBO,0,StartTime,HiPrice+Range,StartTime,HiPrice);
	else
	{
		ObjectSet("H4Higher",OBJPROP_TIME2, StartTime);
		ObjectSet("H4Higher",OBJPROP_TIME1, StartTime);
		ObjectSet("H4Higher",OBJPROP_PRICE1,HiPrice+Range);
		ObjectSet("H4Higher",OBJPROP_PRICE2,HiPrice);
	}
   ObjectSet("H4Higher",OBJPROP_LEVELCOLOR,H4HigherColor);
   ObjectSet("H4Higher",OBJPROP_FIBOLEVELS,1);
   ObjectSet("H4Higher",OBJPROP_FIRSTLEVEL+0,0.0);	ObjectSetFiboDescription("H4Higher",0,"H4 HIGHER"); 
   ObjectSet("H4Higher",OBJPROP_RAY,true);
   ObjectSet("H4Higher",OBJPROP_BACK,true);
   ObjectSet("H4Higher",OBJPROP_COLOR,UpPointerColor);
   ObjectSet("H4Higher",OBJPROP_STYLE,UpPointerStyle);
   ObjectSet("H4Higher",OBJPROP_WIDTH,UpPointerWidth);
   ObjectSet("H4Higher",OBJPROP_SELECTABLE,false);
   ObjectSet("H4Higher",OBJPROP_LEVELSTYLE,H4HigherStyle);
   ObjectSet("H4Higher",OBJPROP_LEVELWIDTH,H4HigherWidth);

	if(ObjectFind("H4Lower") == -1)
		ObjectCreate("H4Lower",OBJ_FIBO,0,StartTime,LoPrice-Range,StartTime,LoPrice);
	else
	{
		ObjectSet("H4Lower",OBJPROP_TIME2, StartTime);
		ObjectSet("H4Lower",OBJPROP_TIME1, StartTime);
		ObjectSet("H4Lower",OBJPROP_PRICE1,LoPrice-Range);
		ObjectSet("H4Lower",OBJPROP_PRICE2,LoPrice);
	}
   ObjectSet("H4Lower",OBJPROP_LEVELCOLOR,H4LowerColor); 
   ObjectSet("H4Lower",OBJPROP_FIBOLEVELS,1);
   ObjectSet("H4Lower",OBJPROP_FIRSTLEVEL+0,0.0);	ObjectSetFiboDescription("H4Lower",0,"H4 LOWER"); 

   ObjectSet("H4Lower",OBJPROP_RAY,true);
   ObjectSet("H4Lower",OBJPROP_BACK,true);
   ObjectSet("H4Lower",OBJPROP_COLOR,DownPointerColor);
   ObjectSet("H4Lower",OBJPROP_STYLE,DownPointerStyle);
   ObjectSet("H4Lower",OBJPROP_WIDTH,DownPointerWidth);
   ObjectSet("H4Lower",OBJPROP_SELECTABLE,false);
   ObjectSet("H4Lower",OBJPROP_LEVELSTYLE,H4HigherStyle);
   ObjectSet("H4Lower",OBJPROP_LEVELWIDTH,H4HigherWidth);

	if(H4Middle)
	{
		if(ObjectFind("H4Middle") == -1)
			ObjectCreate("H4Middle",OBJ_FIBO,0,StartTime,HiPrice,StartTime+PERIOD_H4*240,LoPrice);
		else
		{
			ObjectSet("H4Middle",OBJPROP_TIME2, StartTime);
			ObjectSet("H4Middle",OBJPROP_TIME1, StartTime+PERIOD_H4*240);
			ObjectSet("H4Middle",OBJPROP_PRICE1,HiPrice);
			ObjectSet("H4Middle",OBJPROP_PRICE2,LoPrice);
		}
   	ObjectSet("H4Middle",OBJPROP_LEVELCOLOR,H4MiddleColor); 
   	ObjectSet("H4Middle",OBJPROP_FIBOLEVELS,1);
   
   	ObjectSet("H4Middle",OBJPROP_FIRSTLEVEL+0,0.500);	ObjectSetFiboDescription("H4Middle",0,"H4 MIDDLE"); 


   	ObjectSet("H4Middle",OBJPROP_RAY,true);
   	ObjectSet("H4Middle",OBJPROP_BACK,true);
   ObjectSet("H4Middle",OBJPROP_COLOR,MidPointerColor);
   ObjectSet("H4Middle",OBJPROP_STYLE,MidPointerStyle);
   ObjectSet("H4Middle",OBJPROP_WIDTH,MidPointerWidth);
   ObjectSet("H4Middle",OBJPROP_SELECTABLE,false);
   ObjectSet("H4Middle",OBJPROP_LEVELSTYLE,H4HigherStyle);
   ObjectSet("H4Middle",OBJPROP_LEVELWIDTH,H4HigherWidth);
   }
   else
	   ObjectDelete("H4Middle");
}

//+------------------------------------------------------------------+
//| Indicator start function
//+------------------------------------------------------------------+

int start()
{
	int shift	= iBarShift(NULL,PERIOD_H4,Time[0]) + 1;	// H4 
	HiPrice		= iHigh(NULL,PERIOD_H4,shift);
	LoPrice		= iLow (NULL,PERIOD_H4,shift);
	StartTime	= iTime(NULL,PERIOD_H4,shift);

	if(TimeDayOfWeek(StartTime)==0/*Sunday*/)
	{//Add fridays high and low
		HiPrice = MathMax(HiPrice,iHigh(NULL,PERIOD_H4,shift+1));
		LoPrice = MathMin(LoPrice,iLow(NULL,PERIOD_H4,shift+1));
	}

	Range = HiPrice-LoPrice;

	DrawFibo();
   ChartRedraw();
	return(0);
}
//+------------------------------------------------------------------+

