//+------------------------------------------------------------------+
//|   #SpudFibo.mq4 - downloaded from ultimaforex.com
//+------------------------------------------------------------------+
#property  indicator_chart_window

extern string note1 = "Fibonacci colors";
extern color UpperFiboColor = clrDodgerBlue;
extern color MainFiboColor = clrGray;
extern color LowerFiboColor = clrCrimson;
extern string note2 = "Draw main Fibonacci lines?";
extern bool  InnerFibs = true;
extern int textShiftBars = 20;
double HiPrice, LoPrice, Range;
datetime StartTime;
datetime StartTime2;

int init()
{
   return(0);
}

int deinit()
{
   ObjectDelete("FiboUp");
   ObjectDelete("FiboDn");
   ObjectDelete("FiboIn");
   ObjectDelete("FiboUp0");
   ObjectDelete("FiboUp1");
   return(0);
}


//+------------------------------------------------------------------+
//| Draw Fibo
//+------------------------------------------------------------------+

int DrawFibo()
{


      
      
	if(ObjectFind("FiboUp") == -1)
		ObjectCreate("FiboUp",OBJ_FIBO,0,StartTime2,HiPrice+Range,StartTime2,HiPrice);
	else
	{
		ObjectSet("FiboUp",OBJPROP_TIME1, StartTime);
		ObjectSet("FiboUp",OBJPROP_TIME2, StartTime);
		ObjectSet("FiboUp",OBJPROP_PRICE1,HiPrice+Range);
		ObjectSet("FiboUp",OBJPROP_PRICE2,HiPrice);
	}
   ObjectSet("FiboUp",OBJPROP_LEVELCOLOR,UpperFiboColor);
   ObjectSet("FiboUp",OBJPROP_FIBOLEVELS,13);
   //ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+0,0.0);	ObjectSetFiboDescription("FiboUp",0,"(100.0%) -  %$"); 
   //ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+1,0.236);	ObjectSetFiboDescription("FiboUp",1,"(123.6%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+2,0.272);	ObjectSetFiboDescription("FiboUp",2,"(127.2%) -  %$"); 
   //ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+3,0.500);	ObjectSetFiboDescription("FiboUp",3,"(150.0%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+4,0.618);	ObjectSetFiboDescription("FiboUp",4,"(161.8%) -  %$"); 
   //ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+5,0.764);	ObjectSetFiboDescription("FiboUp",5,"(176.4%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+6,1.000);	ObjectSetFiboDescription("FiboUp",6,"(200.0%) -  %$"); 
   //ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+7,1.236);	ObjectSetFiboDescription("FiboUp",7,"(223.6%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+8,1.500);	ObjectSetFiboDescription("FiboUp",8,"(250.0%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+9,1.618);	ObjectSetFiboDescription("FiboUp",9,"(261.8%) -  %$"); 
   //ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+10,2.000);	ObjectSetFiboDescription("FiboUp",10,"(300.0%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+11,2.610);	ObjectSetFiboDescription("FiboUp",11,"(361.0%) -  %$"); 
   //ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+12,3.000);	ObjectSetFiboDescription("FiboUp",12,"(400.0%) -  %$"); 
   //ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+13,3.500);	ObjectSetFiboDescription("FiboUp",13,"(450.0%) -  %$"); 
   //ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+14,4.000);	ObjectSetFiboDescription("FiboUp",14,"(500.0%) -  %$"); 
   ObjectSet("FiboUp",OBJPROP_RAY,false);
   ObjectSet("FiboUp",OBJPROP_BACK,true);

	if(ObjectFind("FiboDn") !=0)
		ObjectCreate("FiboDn",OBJ_FIBO,0,StartTime2,LoPrice-Range,StartTime2,LoPrice);
	else
	{
		ObjectSet("FiboDn",OBJPROP_TIME1, StartTime);
		ObjectSet("FiboDn",OBJPROP_TIME2, StartTime);
		ObjectSet("FiboDn",OBJPROP_PRICE1,LoPrice-Range);
		ObjectSet("FiboDn",OBJPROP_PRICE2,LoPrice);
	}
   ObjectSet("FiboDn",OBJPROP_LEVELCOLOR,LowerFiboColor); 
   ObjectSet("FiboDn",OBJPROP_FIBOLEVELS,19);
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+0,0.0);	ObjectSetFiboDescription("FiboDn",0,"(0.0%) -  %$"); 
   //ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+1,0.236);	ObjectSetFiboDescription("FiboDn",1,"(-123.6%) -  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+2,0.272);	ObjectSetFiboDescription("FiboDn",2,"(-127.2%) -  %$"); 
   //ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+3,0.500);	ObjectSetFiboDescription("FiboDn",3,"(-150.0%) -  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+4,0.618);	ObjectSetFiboDescription("FiboDn",4,"(-161.8%) -  %$"); 
   //ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+5,0.764);	ObjectSetFiboDescription("FiboDn",5,"(-176.4%) -  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+6,1.000);	ObjectSetFiboDescription("FiboDn",6,"(-200.0%) -  %$"); 
   //ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+7,1.236);	ObjectSetFiboDescription("FiboDn",7,"(-223.6%) -  %$"); 
   //ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+8,1.382);	ObjectSetFiboDescription("FiboDn",8,"(-238.2%) -  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+9,1.500);	ObjectSetFiboDescription("FiboDn",9,"(-250.0%) -  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+10,1.618);	ObjectSetFiboDescription("FiboDn",10,"(-261.8%) -  %$"); 
   //ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+11,1.764);	ObjectSetFiboDescription("FiboDn",11,"(-176.4%) -  %$"); 
   //ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+12,2.000);	ObjectSetFiboDescription("FiboDn",12,"(-200.0%) -  %$"); 
   //ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+13,2.500);	ObjectSetFiboDescription("FiboDn",13,"(-250.0%) -  %$"); 
   //ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+14,3.000);	ObjectSetFiboDescription("FiboDn",14,"(-300.0%) -  %$"); 
   ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+15,3.610);	ObjectSetFiboDescription("FiboDn",15,"(-361.0%) -  %$"); 
   ObjectSet("FiboDn",OBJPROP_RAY,false);
   ObjectSet("FiboDn",OBJPROP_BACK,true);
      if(ObjectFind("FiboUp0") !=0)
			ObjectCreate("FiboUp0",OBJ_FIBO,0,StartTime2,HiPrice,StartTime2,LoPrice);
		else
		{
			ObjectSet("FiboUp0",OBJPROP_TIME1, StartTime);
			ObjectSet("FiboUp0",OBJPROP_TIME2, StartTime);
			ObjectSet("FiboUp0",OBJPROP_PRICE1,HiPrice);
			ObjectSet("FiboUp0",OBJPROP_PRICE2,LoPrice);
			
		}
   	ObjectSet("FiboUp0",OBJPROP_LEVELCOLOR,clrGold); 
   	ObjectSet("FiboUp0",OBJPROP_FIBOLEVELS,7);
   	ObjectSet("FiboUp0",OBJPROP_FIRSTLEVEL+0,0.0);	   ObjectSetFiboDescription("FiboUp0",0,"=="+"(0.0) -  %$"); 
   	ObjectSet("FiboUp0",OBJPROP_FIRSTLEVEL+6,1.000);	ObjectSetFiboDescription("FiboUp0",6,"=="+"(100) -  %$"); 
      ObjectSet("FiboUp0",OBJPROP_RAY,false);
   	ObjectSet("FiboUp0",OBJPROP_BACK,false);
   
   


   	
	if(InnerFibs)
	{
		if(ObjectFind("FiboIn") == -1)
			ObjectCreate("FiboIn",OBJ_FIBO,0,StartTime2,HiPrice,StartTime2,LoPrice);
		else
		{
			ObjectSet("FiboIn",OBJPROP_TIME1, StartTime);
			ObjectSet("FiboIn",OBJPROP_TIME2, StartTime);
			ObjectSet("FiboIn",OBJPROP_PRICE1,HiPrice);
			ObjectSet("FiboIn",OBJPROP_PRICE2,LoPrice);
		}
   	ObjectSet("FiboIn",OBJPROP_LEVELCOLOR,MainFiboColor); 
   	ObjectSet("FiboIn",OBJPROP_FIBOLEVELS,7);
   	//ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+0,0.0);	ObjectSetFiboDescription("FiboIn",0,"(0.0) -  %$"); 
   	ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+1,0.236);	ObjectSetFiboDescription("FiboIn",1,"==(23.6) -  %$"); 
   	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.764);	ObjectSetFiboDescription("FiboIn",5,"==(76.4) -  %$"); 
   	//ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+6,1.000);	ObjectSetFiboDescription("FiboIn",6,"(100) -  %$"); 
      ObjectSet("FiboIn",OBJPROP_RAY,false);
   	ObjectSet("FiboIn",OBJPROP_BACK,false);
   }
   else
	   ObjectDelete("FiboIn");
}

//+------------------------------------------------------------------+
//| Indicator start function
//+------------------------------------------------------------------+

int start()
{
int adjusthpos;
         int wbpc = WindowBarsPerChart();
         int k;
         
         k = Period() * 60;
         
         if (wbpc < 80)  
            adjusthpos = Time[0] + k * 4;
         else if (wbpc < 125)  
            adjusthpos = Time[0] + k * 8;
         else if (wbpc < 250)
            adjusthpos = Time[0] + k * 15;
         else if (wbpc < 480)
            adjusthpos = Time[0] + k * 29;
         else if (wbpc < 950)
            adjusthpos = Time[0] + k * 58;
         else
            adjusthpos = Time[0] + k * 115;
         
         //
      k = Period() * 60 ;
      int shiftA = k * 20;
      int shift2A = k * 25;

int y=TimeYear(TimeCurrent());
int m=TimeMonth(TimeCurrent());
string h= "00:00";
int dbsk=TimeDay(TimeCurrent()+86400);
string besok = StringConcatenate(y ,".", m, ".", dbsk," ",h);


	int shift	= iBarShift(NULL,PERIOD_H1,Time[0]) + 1;	// yesterday
	HiPrice		= iHigh(NULL,PERIOD_D1,shift);
	LoPrice		= iLow (NULL,PERIOD_D1,shift);
	StartTime2	= Time[0]+textShiftBars*60*Period();
	StartTime   = Time[0]+textShiftBars*60*Period();
	
      /*
      int y=TimeYear(TimeCurrent());
      int dbsk=TimeDay(TimeCurrent()+16400);
      int d= dbsk-PERIOD_W1;
      //int dbsk=TimeDay(TimeCurrent()+86400);
      int m=TimeMonth(TimeCurrent());
      string h= "00:00";
      string l= "12:00";
      string sekarang = StringConcatenate(y ,".", m, ".", d," ",h);
      string besok = StringConcatenate(y ,".", m, ".", dbsk," ",h);
      
datetime var1 = StrToTime(sekarang);
      datetime var2 = StrToTime(besok);
        */    
	if(TimeDayOfWeek(StartTime)==0/*Sunday*/)
	{//Add fridays high and low
		HiPrice = MathMax(HiPrice,iHigh(NULL,PERIOD_D1,shift));
		LoPrice = MathMin(LoPrice,iLow(NULL,PERIOD_D1,shift));
	}

	Range = HiPrice-LoPrice;

	DrawFibo();

	return(0);
}
//+------------------------------------------------------------------+

