//+------------------------------------------------------------------+
//|                                        GI_Digger Fibo Levels.mq4 |
//|                        Copyright 2022, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property version   "1.00"

#property  indicator_chart_window

extern color UpColor = Blue;
extern color InColor = White;
extern color DnColor = Yellow;
extern bool  InnerFibs = true;

extern double HiPrice = 1819.92; 
extern double LoPrice = 1760.39; 
double Range;
datetime StartTime;

int init()
{
   return(0);
}

int deinit()
{
   ObjectDelete("FiboUp");
   ObjectDelete("FiboDn");
   ObjectDelete("FiboIn");
   return(0);
}


//+------------------------------------------------------------------+
//| Draw Fibo
//+------------------------------------------------------------------+

int DrawFibo()
{
	if(ObjectFind("FiboUp") == -1)
		ObjectCreate("FiboUp",OBJ_FIBO,0,StartTime,HiPrice+Range,StartTime,HiPrice);
	else
	{
		ObjectSet("FiboUp",OBJPROP_TIME2, StartTime);
		ObjectSet("FiboUp",OBJPROP_TIME1, StartTime);
		ObjectSet("FiboUp",OBJPROP_PRICE1,HiPrice+Range);
		ObjectSet("FiboUp",OBJPROP_PRICE2,HiPrice);
	}
   ObjectSet("FiboUp",OBJPROP_LEVELCOLOR,UpColor);
   ObjectSet("FiboUp",OBJPROP_FIBOLEVELS,18); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+0,0.0);	  ObjectSetFiboDescription("FiboUp",0,"100.0  %$");
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+1,0.068);	  ObjectSetFiboDescription("FiboUp",1.0,"Sub Mid:   %$");  
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+2,0.136);	  ObjectSetFiboDescription("FiboUp",2,"1/1.272:   %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+3,0.204);  ObjectSetFiboDescription("FiboUp",3,"Sub Mid:   %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+4,0.272);	  ObjectSetFiboDescription("FiboUp",4,"1.272:   %$");
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+5,0.3585);  ObjectSetFiboDescription("FiboUp",5,"Sub Mid:  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+6,0.445);   ObjectSetFiboDescription("FiboUp",6,"1.272/1.618:  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+7,0.5315);  ObjectSetFiboDescription("FiboUp",7,"Sub Mid:   %$");
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+8,0.618);	  ObjectSetFiboDescription("FiboUp",8,"1.618:   %$");
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+9,0.868);  ObjectSetFiboDescription("FiboUp",9,"Sub Mid  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+10,1.118);  ObjectSetFiboDescription("FiboUp",10,"1.618/2.618:   %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+11,1.3680); ObjectSetFiboDescription("FiboUp",11,"Sub Mid  %$");
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+12,1.618);  ObjectSetFiboDescription("FiboUp",12,"2.618:   %$");
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+13,2.0225); ObjectSetFiboDescription("FiboUp",13,"Sub Mid  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+14,2.427);  ObjectSetFiboDescription("FiboUp",14,"2.618/4.236:  %$");
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+15,2.8315); ObjectSetFiboDescription("FiboUp",15,"Sub Mid  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+16,3.236);  ObjectSetFiboDescription("FiboUp",16,"4.236  %$"); 

   ObjectSet("FiboUp",OBJPROP_RAY,true);
   ObjectSet("FiboUp",OBJPROP_BACK,true);

	if(ObjectFind("FiboDn") == -1)
		ObjectCreate("FiboDn",OBJ_FIBO,0,StartTime,LoPrice-Range,StartTime,LoPrice);
	else
	{
		ObjectSet("FiboDn",OBJPROP_TIME2, StartTime);
		ObjectSet("FiboDn",OBJPROP_TIME1, StartTime);
		ObjectSet("FiboDn",OBJPROP_PRICE1,LoPrice-Range);
		ObjectSet("FiboDn",OBJPROP_PRICE2,LoPrice);
	}
    ObjectSet("FiboDn",OBJPROP_LEVELCOLOR,DnColor); 
   ObjectSet("FiboDn",OBJPROP_FIBOLEVELS,18);
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+0,0.0);	  ObjectSetFiboDescription("FiboDn",0,"0.0  %$");
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+1,0.068);	  ObjectSetFiboDescription("FiboDn",1,"Mid  %$");  
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+2,0.136);	  ObjectSetFiboDescription("FiboDn",2,"0.0/1.272  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+3,0.2040);  ObjectSetFiboDescription("FiboDn",3,"Sub Mid  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+4,0.272);	  ObjectSetFiboDescription("FiboDn",4,"1.272  %$");
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+5,0.3585);  ObjectSetFiboDescription("FiboDn",5,"Sub Mid  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+6,0.445);   ObjectSetFiboDescription("FiboDn",6,"1.272/1.618 %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+7,0.5315);  ObjectSetFiboDescription("FiboDn",7,"Sub Mid  %$");
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+8,0.618);	  ObjectSetFiboDescription("FiboDn",8,"1.618  %$");
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+9,0.8680);  ObjectSetFiboDescription("FiboDn",9,"Sub Mid  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+10,1.118);  ObjectSetFiboDescription("FiboDn",10,"1.618/2.618  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+11,1.3680); ObjectSetFiboDescription("FiboDn",11,"Sub Mid  %$");
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+12,1.618);  ObjectSetFiboDescription("FiboDn",12,"2.618  %$");
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+13,2.0225); ObjectSetFiboDescription("FiboDn",13,"Sub Mid  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+14,2.427);  ObjectSetFiboDescription("FiboDn",14,"2.618/4.236 %$");
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+15,2.8315); ObjectSetFiboDescription("FiboDn",15,"Sub Mid  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+16,3.236);  ObjectSetFiboDescription("FiboDn",16,"4.236  %$"); 
   ObjectSet("FiboDn",OBJPROP_RAY,true);
   ObjectSet("FiboDn",OBJPROP_BACK,true);

	if(InnerFibs)
	{
		if(ObjectFind("FiboIn") == -1)
			ObjectCreate("FiboIn",OBJ_FIBO,0,StartTime,HiPrice,StartTime,LoPrice);
		else
		{
			ObjectSet("FiboIn",OBJPROP_TIME2, StartTime);
			ObjectSet("FiboIn",OBJPROP_TIME1, StartTime);
			ObjectSet("FiboIn",OBJPROP_PRICE1,HiPrice);
			ObjectSet("FiboIn",OBJPROP_PRICE2,LoPrice);
		}
   	ObjectSet("FiboIn",OBJPROP_LEVELCOLOR,InColor); 
   	ObjectSet("FiboIn",OBJPROP_FIBOLEVELS,7);
   	//ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+0,0.0);	ObjectSetFiboDescription("FiboIn",0,"Q L3 0.0"+"  %$"); 
   	ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+1,0.25);	ObjectSetFiboDescription("FiboIn",1," 25.0"+"  %$"); 
   	//ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+2,0.382);	ObjectSetFiboDescription("FiboIn",2,"38.2  %$");*/ 
   	ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+3,0.500);	ObjectSetFiboDescription("FiboIn",3," 50.0"+"  %$"); 
   	//ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+4,0.618);	ObjectSetFiboDescription("FiboIn",4,"61.8  %$"); 
   	ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+5,0.75);	ObjectSetFiboDescription("FiboIn",5," 75.0"+"  %$"); 
   	//ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+6,1.000);	ObjectSetFiboDescription("FiboIn",6,"100.0  %$");
   	ObjectSet("FiboIn",OBJPROP_RAY,true);
   	ObjectSet("FiboIn",OBJPROP_BACK,true);
   }
   else
	   ObjectDelete("FiboIn");
}

//+------------------------------------------------------------------+
//| Indicator start function
//+------------------------------------------------------------------+

int start()
{
	int shift	= iBarShift(NULL,PERIOD_MN1,Time[0]) ;	// yesterday
	/*HiPrice		= iHigh(NULL,PERIOD_D1,shift);
	LoPrice		= iLow (NULL,PERIOD_D1,shift);*/
	StartTime	= iTime(NULL,PERIOD_MN1,shift+1);
	

	if(TimeDayOfWeek(StartTime)==0/*Sunday*/)
	{//Add fridays high and low
		/*HiPrice = MathMax(HiPrice,iHigh(NULL,PERIOD_D1,shift+1));
		LoPrice = MathMin(LoPrice,iLow(NULL,PERIOD_D1,shift+1));*/
	}

	Range = HiPrice-LoPrice;

	DrawFibo();

	return(0);
}
//+------------------------------------------------------------------+

