//+------------------------------------------------------------------+
//|                                                 Bemac's ICCE.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Bemac v1.2"

#property indicator_chart_window
#define Prefix "ICCE_"
#define LinePrefixLeft "ICCE_LineLeft"
#define LinePrefixRight "ICCE_LineRight"
#define LinePrefixCenter "ICCE_LineCenter"
#define FibPrefix "ICCE_fib"

double     TopOfRange ;
double     BottomOfRange;
datetime  LeftSide ;
datetime  RightSide ;
extern string note20="These are selection settings ";
extern string     uniqueID="first";
extern bool reverselines=false;
extern color      BotRangeColor= Lime;
extern color      TopRangeColor= Red;

extern color   BoxColor= Pink;
extern color leftsideColor= FireBrick;
extern color rightsideColor= Green;
extern int leftsideWidth= 1;
extern int rightsideWidth= 1;


extern string note17="Click on indie and OK to update fib ";
extern bool       drawfib=true;
extern string note15="0 =cobra, 1 = traditional fib "; 
extern int fibstyle = 0; //0 =cobra, 1 = traditiona fib
extern string note21="These are parallel line settings ";
extern int    NumberOfLinesAbove = 3;
extern int    NumberOfLinesBelow = 3;
extern string note13="Draw lines below center line ";
extern bool drawright=true;
extern string note14="Draw lines above center line ";  
extern bool drawleft=true;
extern bool drawcenter=true;
extern bool  drawExtensions=true;
extern string note30="Parallel lines settings "; 
extern int          plinestyleRange = 0 ;
extern int          pwidth     = 1 ;
extern color        pRangeColorTop= C'132,67,19' ; 
extern color        pRangeColorBottom= DarkSlateGray; 
extern color        pRangeColorCenter= FireBrick;

extern double     TopPercent = 52.8;
extern double     BottomPercent = 47.2;
extern bool       TextRightShift = true;
extern int        TextOffset = 25;
extern int        FontSize = 7; 
extern string     note1="0=line, 1=dash, 2=dot";      
extern int        linestyle = 2 ;
extern int        linestyleRange = 0 ;
extern int        width     = 1 ;
extern int        LabelColor= Olive;

extern string note18="These are for Cobra fib ";
extern double     Fib1      = 0.00;
extern color      Fib1Color = C'160,0,0';
extern double     Fib2      = 14.6;
extern color      Fib2Color = C'140,0,0';
extern double     Fib3      = 23.6;
extern color      Fib3Color = C'120,0,0';
extern double     Fib4      = 161;
extern color      Fib4Color = CLR_NONE;
extern double     Fib5      = 38.2;
extern color      Fib5Color = C'100,0,0';
extern double     Fib6      = 50.0;
extern color      Fib6Color = Olive;
extern double     Fib7      = 61.8;
extern color      Fib7Color = C'0,80,0';
extern double     Fib8      = 76.4;
extern color      Fib8Color = C'0,100,0';
extern double     Fib9      = 85.4;
extern color      Fib9Color = C'0,120,0';
extern double     Fib10     = 100;
extern color      Fib10Color= C'0,140,0';
extern double     Fib11     = 127;
extern color      Fib11Color= CLR_NONE;






extern string note16="These are for traditional fib ";

extern double     tTopPercent = 52.8;
extern double     tBottomPercent = 47.2;
double            tFib1      = 0.00;
extern double     tFib2      = 14.6;
extern double     tFib3      = 23.6;
extern double     tFib4      = 38.2;
extern double     tFib5      = 50;
extern double     tFib6      = 61.8;
extern double     tFib7      = 76.4;
extern double     tFib8      = 85.4;
double            tFib9      = 100;
extern double     tFib10     = 161.6;
extern double     tFib11     = -12.5;
extern int     fibdigits =2;   
extern color FibColor= Green;

string UniqueIDFib        = "ICCE_ASFib"; 
string UniqueIDBox= "ICCE_Box";





extern string note19="If t,deletes all objects on exit or init ";
extern bool DeleteAllObjects;
extern string note9="Set to T if u r totally messed up ";
extern bool ResetSelectedArea=false;


double            pf,range,unit,pd,pd1,pd2,piptotal,fp1,fp2,fp3,fp4,fp5,fp6,fp7,fp8,fp9,fp10,fp11,mult=1,
                  TextAboveLine;
string            filler = "";
int ChartPeriod;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int deinit()
  {
//----
       
     if (DeleteAllObjects ==true )
     {
     DeleteAll();
     }
      DeleteObj(uniqueID+Prefix);
      Comment("");   
//----
   return(0);
  }




int init()
  {
 
 if ( Digits == 3 || Digits == 5 )
         mult = 10;
      TextAboveLine = NormalizeDouble(iATR(NULL,0,100,0)*0.50,Digits);   
      
      if ( TextRightShift )
         {
            filler = "                                  ";
            TextOffset = 0;
         }    
      

   
  if (ResetSelectedArea==true)// if screwed assign a default
 {

  ResetVars();
  }
  bool testrange = checkforRange();
  
 if (testrange == false)
{
 Comment(testrange);
 ResetVars();
}
  
 else
{
   
      DeleteObj(uniqueID+Prefix); 
   TopOfRange    = ObjectGet(uniqueID+"fib"+12,OBJPROP_PRICE1);
  
   BottomOfRange = ObjectGet(uniqueID+"fib"+13,OBJPROP_PRICE1);
   LeftSide    = ObjectGet(uniqueID+"LS",OBJPROP_TIME1);
   RightSide = ObjectGet(uniqueID+"RS",OBJPROP_TIME1);
   
   CreateBox(uniqueID+UniqueIDBox, BoxColor); 
   MoveBox(uniqueID+UniqueIDBox, RightSide,BottomOfRange , LeftSide, TopOfRange);
  
  
  if (drawfib==true)
  {
   if (fibstyle==0)
   {
    DrawFib();
    }
    else
    {
    DrawtFib();
   }
  
  }
  else
  {
  
   ObjectDelete("fib"+12);
      ObjectCreate(uniqueID+"fib"+12, OBJ_HLINE , 0,Time[0], TopOfRange);   
      ObjectSet(uniqueID+"fib"+12, OBJPROP_STYLE, linestyleRange);   
      ObjectSet(uniqueID+"fib"+12, OBJPROP_COLOR, TopRangeColor);
      ObjectSet(uniqueID+"fib"+12, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"text"+12);
      ObjectCreate(uniqueID+"text"+12,OBJ_TEXT,0,Time[TextOffset],TopOfRange+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"text"+12,uniqueID+" "+"TOP "+DoubleToStr(TopPercent,2)+"%  "+DoubleToStr(TopOfRange,Digits),FontSize,"Arial",TopRangeColor);      
      
      ObjectDelete(uniqueID+"fib"+13);
      ObjectCreate(uniqueID+"fib"+13, OBJ_HLINE , 0,Time[0], BottomOfRange);   
      ObjectSet(uniqueID+"fib"+13, OBJPROP_STYLE, linestyleRange);   
      ObjectSet(uniqueID+"fib"+13, OBJPROP_COLOR, BotRangeColor);
      ObjectSet(uniqueID+"fib"+13, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"text"+13);
      ObjectCreate(uniqueID+"text"+13,OBJ_TEXT,0,Time[TextOffset],BottomOfRange+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"text"+13,uniqueID+" "+"BOT "+DoubleToStr(BottomPercent,2)+"%  "+DoubleToStr(BottomOfRange,Digits),FontSize,"Arial",BotRangeColor); 
  
  }
   DrawLine( uniqueID+"ICCE_Line", NumberOfLinesAbove,NumberOfLinesBelow);
  
  
   
 }
 
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+

  

 int start()
  { 
         reinit(); 
   return(0);      
  }
//+------------------------------------------------------------------+

void DrawFib()
{
        
      if ( TopOfRange <= BottomOfRange )
         {
            Comment (TopOfRange,"",BottomOfRange,"Cobra style fib TOP OF RANGE MUST BE GREATER THAN BOTTOM OF RANGE. TRY AGAIN!");
            ResetVars();
            
         }
     
      pf    = TopPercent-BottomPercent;
      range = TopOfRange-BottomOfRange;
      unit  = range/pf;
      
//TopOfRange and BottomOfRange===============
      ObjectDelete(uniqueID+"fib"+12);
      ObjectCreate(uniqueID+"fib"+12, OBJ_HLINE , 0,Time[0], TopOfRange);   
      ObjectSet(uniqueID+"fib"+12, OBJPROP_STYLE, linestyleRange);   
      ObjectSet(uniqueID+"fib"+12, OBJPROP_COLOR, TopRangeColor);
      ObjectSet(uniqueID+"fib"+12, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"text"+12);
      ObjectCreate(uniqueID+"text"+12,OBJ_TEXT,0,Time[TextOffset],TopOfRange+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"text"+12,uniqueID+" "+"TOP "+DoubleToStr(TopPercent,2)+"%  "+DoubleToStr(TopOfRange,Digits),FontSize,"Arial",TopRangeColor);      
      
      ObjectDelete(uniqueID+"fib"+13);
      ObjectCreate(uniqueID+"fib"+13, OBJ_HLINE , 0,Time[0], BottomOfRange);   
      ObjectSet(uniqueID+"fib"+13, OBJPROP_STYLE, linestyleRange);   
      ObjectSet(uniqueID+"fib"+13, OBJPROP_COLOR, BotRangeColor);
      ObjectSet(uniqueID+"fib"+13, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"text"+13);
      ObjectCreate(uniqueID+"text"+13,OBJ_TEXT,0,Time[TextOffset],BottomOfRange+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"text"+13,uniqueID+" "+"BOT "+DoubleToStr(BottomPercent,2)+"%  "+DoubleToStr(BottomOfRange,Digits),FontSize,"Arial",BotRangeColor); 
        
//Fib1=======================================      
      pd       = MathAbs(TopPercent-Fib1);
      piptotal = unit*pd;
      if ( Fib1 < TopPercent )
         fp1 = TopOfRange-piptotal;  
      else 
         fp1 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+1);
      ObjectCreate(uniqueID+"ICCE_fib"+1, OBJ_HLINE , 0,Time[0], fp1);   
      ObjectSet(uniqueID+"ICCE_fib"+1, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+1, OBJPROP_COLOR, Fib1Color);
      ObjectSet(uniqueID+"ICCE_fib"+1, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+1);
      ObjectCreate(uniqueID+"ICCE_text"+1,OBJ_TEXT,0,Time[TextOffset],fp1+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+1,uniqueID+" "+DoubleToStr(Fib1,2)+"%  "+DoubleToStr(fp1,Digits),FontSize,"Arial",LabelColor);  
      
//Fib2=======================================      
      pd       = MathAbs(TopPercent-Fib2);
      piptotal = unit*pd;
      if ( Fib2 < TopPercent )
         fp2 = TopOfRange-piptotal;  
      else 
         fp2 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+2);
      ObjectCreate(uniqueID+"ICCE_fib"+2, OBJ_HLINE , 0,Time[0], fp2);   
      ObjectSet(uniqueID+"ICCE_fib"+2, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+2, OBJPROP_COLOR, Fib2Color);
      ObjectSet(uniqueID+"ICCE_fib"+2, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+2);
      ObjectCreate(uniqueID+"ICCE_text"+2,OBJ_TEXT,0,Time[TextOffset],fp2+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+2,uniqueID+" "+DoubleToStr(Fib2,2)+"%  "+DoubleToStr(fp2,Digits),FontSize,"Arial",LabelColor);               
      
//Fib3=======================================      
      pd       = MathAbs(TopPercent-Fib3);
      piptotal = unit*pd;
      if ( Fib3 < TopPercent )
         fp3 = TopOfRange-piptotal;  
      else 
         fp3 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+3);
      ObjectCreate(uniqueID+"ICCE_fib"+3, OBJ_HLINE , 0,Time[0], fp3);   
      ObjectSet(uniqueID+"ICCE_fib"+3, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+3, OBJPROP_COLOR, Fib3Color);
      ObjectSet(uniqueID+"ICCE_fib"+3, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+3);
      ObjectCreate(uniqueID+"ICCE_text"+3,OBJ_TEXT,0,Time[TextOffset],fp3+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+3,uniqueID+" "+DoubleToStr(Fib3,2)+"%  "+DoubleToStr(fp3,Digits),FontSize,"Arial",LabelColor);               

//Fib4=======================================      
      pd       = MathAbs(TopPercent-Fib4);
      piptotal = unit*pd;
      if ( Fib4 < TopPercent )
         fp4 = TopOfRange-piptotal;  
      else 
         fp4 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+4);
      ObjectCreate(uniqueID+"ICCE_fib"+4, OBJ_HLINE , 0,Time[0], fp4);   
      ObjectSet(uniqueID+"ICCE_fib"+4, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+4, OBJPROP_COLOR, Fib4Color);
      ObjectSet(uniqueID+"ICCE_fib"+4, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+4);
      ObjectCreate(uniqueID+"ICCE_text"+4,OBJ_TEXT,0,Time[TextOffset],fp4+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+4,uniqueID+" "+DoubleToStr(Fib4,2)+"%  "+DoubleToStr(fp4,Digits),FontSize,"Arial",LabelColor);               
      
//Fib4=======================================      
      pd       = MathAbs(TopPercent-Fib4);
      piptotal = unit*pd;
      if ( Fib4 < TopPercent )
         fp4 = TopOfRange-piptotal;  
      else 
         fp4 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+4);
      ObjectCreate(uniqueID+"ICCE_fib"+4, OBJ_HLINE , 0,Time[0], fp4);   
      ObjectSet(uniqueID+"ICCE_fib"+4, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+4, OBJPROP_COLOR, Fib4Color);
      ObjectSet(uniqueID+"ICCE_fib"+4, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+4);
      ObjectCreate(uniqueID+"ICCE_text"+4,OBJ_TEXT,0,Time[TextOffset],fp4+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+4,uniqueID+" "+DoubleToStr(Fib4,2)+"%  "+DoubleToStr(fp4,Digits),FontSize,"Arial",LabelColor);               
      
//Fib4=======================================      
      pd       = MathAbs(TopPercent-Fib4);
      piptotal = unit*pd;
      if ( Fib4 < TopPercent )
         fp4 = TopOfRange-piptotal;  
      else 
         fp4 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+4);
      ObjectCreate(uniqueID+"ICCE_fib"+4, OBJ_HLINE , 0,Time[0], fp4);   
      ObjectSet(uniqueID+"ICCE_fib"+4, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+4, OBJPROP_COLOR, Fib4Color);
      ObjectSet(uniqueID+"ICCE_fib"+4, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+4);
      ObjectCreate(uniqueID+"ICCE_text"+4,OBJ_TEXT,0,Time[TextOffset],fp4+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+4,uniqueID+" "+DoubleToStr(Fib4,2)+"%  "+DoubleToStr(fp4,Digits),FontSize,"Arial",LabelColor);               

//Fib5=======================================      
      pd       = MathAbs(TopPercent-Fib5);
      piptotal = unit*pd;
      if ( Fib5 < TopPercent )
         fp5 = TopOfRange-piptotal;  
      else 
         fp5 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+5);
      ObjectCreate(uniqueID+"ICCE_fib"+5, OBJ_HLINE , 0,Time[0], fp5);   
      ObjectSet(uniqueID+"ICCE_fib"+5, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+5, OBJPROP_COLOR, Fib5Color);
      ObjectSet(uniqueID+"ICCE_fib"+5, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+5);
      ObjectCreate(uniqueID+"ICCE_text"+5,OBJ_TEXT,0,Time[TextOffset],fp5+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+5,uniqueID+" "+DoubleToStr(Fib5,2)+"%  "+DoubleToStr(fp5,Digits),FontSize,"Arial",LabelColor);               

//Fib6=======================================      
      pd       = MathAbs(TopPercent-Fib6);
      piptotal = unit*pd;
      if ( Fib6 < TopPercent )
         fp6 = TopOfRange-piptotal;  
      else 
         fp6 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+6);
      ObjectCreate(uniqueID+"ICCE_fib"+6, OBJ_HLINE , 0,Time[0], fp6);   
      ObjectSet(uniqueID+"ICCE_fib"+6, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+6, OBJPROP_COLOR, Fib6Color);
      ObjectSet(uniqueID+"ICCE_fib"+6, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+6);
      ObjectCreate(uniqueID+"ICCE_text"+6,OBJ_TEXT,0,Time[TextOffset],fp6+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+6,uniqueID+" "+DoubleToStr(Fib6,2)+"%  "+DoubleToStr(fp6,Digits),FontSize,"Arial",LabelColor);               

//Fib7=======================================      
      pd       = MathAbs(TopPercent-Fib7);
      piptotal = unit*pd;
      if ( Fib7 < TopPercent )
         fp7 = TopOfRange-piptotal;  
      else 
         fp7 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+7);
      ObjectCreate(uniqueID+"ICCE_fib"+7, OBJ_HLINE , 0,Time[0], fp7);   
      ObjectSet(uniqueID+"ICCE_fib"+7, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+7, OBJPROP_COLOR, Fib7Color);
      ObjectSet(uniqueID+"ICCE_fib"+7, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+7);
      ObjectCreate(uniqueID+"ICCE_text"+7,OBJ_TEXT,0,Time[TextOffset],fp7+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+7,uniqueID+" "+DoubleToStr(Fib7,2)+"%  "+DoubleToStr(fp7,Digits),FontSize,"Arial",LabelColor);               

//Fib8=======================================      
      pd       = MathAbs(TopPercent-Fib8);
      piptotal = unit*pd;
      if ( Fib8 < TopPercent )
         fp8 = TopOfRange-piptotal;  
      else 
         fp8 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+8);
      ObjectCreate(uniqueID+"ICCE_fib"+8, OBJ_HLINE , 0,Time[0], fp8);   
      ObjectSet(uniqueID+"ICCE_fib"+8, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+8, OBJPROP_COLOR, Fib8Color);
      ObjectSet(uniqueID+"ICCE_fib"+8, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+8);
      ObjectCreate(uniqueID+"ICCE_text"+8,OBJ_TEXT,0,Time[TextOffset],fp8+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+8,uniqueID+" "+DoubleToStr(Fib8,2)+"%  "+DoubleToStr(fp8,Digits),FontSize,"Arial",LabelColor);               

//Fib9=======================================      
      pd       = MathAbs(TopPercent-Fib9);
      piptotal = unit*pd;
      if ( Fib9 < TopPercent )
         fp9 = TopOfRange-piptotal;  
      else 
         fp9 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+9);
      ObjectCreate(uniqueID+"ICCE_fib"+9, OBJ_HLINE , 0,Time[0], fp9);   
      ObjectSet(uniqueID+"ICCE_fib"+9, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+9, OBJPROP_COLOR, Fib9Color);
      ObjectSet(uniqueID+"ICCE_fib"+9, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+9);
      ObjectCreate(uniqueID+"ICCE_text"+9,OBJ_TEXT,0,Time[TextOffset],fp9+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+9,uniqueID+" "+DoubleToStr(Fib9,2)+"%  "+DoubleToStr(fp9,Digits),FontSize,"Arial",LabelColor);               

//Fib10=======================================      
      pd       = MathAbs(TopPercent-Fib10);
      piptotal = unit*pd;
      if ( Fib10 < TopPercent )
         fp10 = TopOfRange-piptotal;  
      else 
         fp10 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+10);
      ObjectCreate(uniqueID+"ICCE_fib"+10, OBJ_HLINE , 0,Time[0], fp10);   
      ObjectSet(uniqueID+"ICCE_fib"+10, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+10, OBJPROP_COLOR, Fib10Color);
      ObjectSet(uniqueID+"ICCE_fib"+10, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+10);
      ObjectCreate(uniqueID+"ICCE_text"+10,OBJ_TEXT,0,Time[TextOffset],fp10+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+10,uniqueID+" "+DoubleToStr(Fib10,2)+"%  "+DoubleToStr(fp10,Digits),FontSize,"Arial",LabelColor);               

//Fib11=======================================      
      pd       = MathAbs(TopPercent-Fib11);
      piptotal = unit*pd;
      if ( Fib11 < TopPercent )
         fp11 = TopOfRange-piptotal;  
      else 
         fp11 = TopOfRange+piptotal;
      
      ObjectDelete(uniqueID+"ICCE_fib"+11);
      ObjectCreate(uniqueID+"ICCE_fib"+11, OBJ_HLINE , 0,Time[0], fp11);   
      ObjectSet(uniqueID+"ICCE_fib"+11, OBJPROP_STYLE, linestyle);   
      ObjectSet(uniqueID+"ICCE_fib"+11, OBJPROP_COLOR, Fib11Color);
      ObjectSet(uniqueID+"ICCE_fib"+11, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"ICCE_text"+11);
      ObjectCreate(uniqueID+"ICCE_text"+11,OBJ_TEXT,0,Time[TextOffset],fp11+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"ICCE_text"+11,uniqueID+" "+DoubleToStr(Fib11,2)+"%  "+DoubleToStr(fp11,Digits),FontSize,"Arial",LabelColor);               
 

}

void DeleteObj(string ObjName)
   {
      
      
      
      
      for (int i=ObjectsTotal()-1; i >= 0; i--) 
     {
     string name = ObjectName(i);
     if (StringFind(name, ObjName) > -1) ObjectDelete(name);
      }
      
      
      
      return(0);
   } 
   
   
void CreateBox(string no, color cl) {
  ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
  ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
  ObjectSet(no, OBJPROP_COLOR, cl);
  ObjectSet(no, OBJPROP_BACK, True);
}   

void MoveBox(string no, datetime t1, double p1, datetime t2, double p2)
{

  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
  
 



} 

bool  checkforRange()
{


 double cktop=ObjectGet(uniqueID+"fib"+12, OBJPROP_PRICE1); 
 double ckbottom=ObjectGet(uniqueID+"fib"+13, OBJPROP_PRICE1);
 double ckRS =ObjectGet(uniqueID+"RS", OBJPROP_TIME1); 
 double ckLS =ObjectGet(uniqueID+"LS", OBJPROP_TIME1); 
 
 bool theAnswer;
         if(cktop==0||ckbottom==0||ckRS==0||ckLS==0)
         {
         theAnswer=false;
         }
         else
         {
          theAnswer=true;

         }
       
   return (theAnswer);
}

void DeleteAll()
{
 DeleteObj(uniqueID+Prefix); 
ObjectDelete(uniqueID+"RS");
ObjectDelete(uniqueID+"LS");
ObjectDelete(uniqueID+"fib12");
ObjectDelete(uniqueID+"fib13");
ObjectDelete(uniqueID+"text12");
ObjectDelete(uniqueID+"text13");
}

void ResetVars()
{

         DeleteAll();
          
          TopOfRange=Open[0]+50*Point;
          BottomOfRange=Open[0]-50*Point;
          RightSide=iTime(NULL,0,0) ;  
          LeftSide=iTime(NULL,0,3);
        
       
       
         ObjectCreate(uniqueID+"RS", OBJ_VLINE , 0,RightSide, TopOfRange); 
         ObjectSet(uniqueID+"RS", OBJPROP_STYLE, linestyleRange);   
        ObjectSet(uniqueID+"RS", OBJPROP_COLOR, rightsideColor);
        ObjectSet(uniqueID+"RS", OBJPROP_WIDTH, rightsideWidth);
      
        ObjectCreate(uniqueID+"LS", OBJ_VLINE , 0,LeftSide, TopOfRange);
        ObjectSet(uniqueID+"LS", OBJPROP_STYLE, linestyleRange);   
        ObjectSet(uniqueID+"LS", OBJPROP_COLOR, leftsideColor);
        ObjectSet(uniqueID+"LS", OBJPROP_WIDTH, leftsideWidth);
         ObjectDelete(uniqueID+UniqueIDBox);
        CreateBox(uniqueID+UniqueIDBox, BoxColor);
        MoveBox(uniqueID+UniqueIDBox, RightSide,BottomOfRange , LeftSide, TopOfRange);
        if (drawfib==true)
          {
          if (fibstyle==0)
          {
           DrawFib();
           }
           else
           {
           DrawtFib();
          }
        }  
     else
      {
  
       ObjectDelete(uniqueID+"fib"+12);
          ObjectCreate(uniqueID+"fib"+12, OBJ_HLINE , 0,Time[0], TopOfRange);   
          ObjectSet(uniqueID+"fib"+12, OBJPROP_STYLE, linestyleRange);   
          ObjectSet(uniqueID+"fib"+12, OBJPROP_COLOR, TopRangeColor);
          ObjectSet(uniqueID+"fib"+12, OBJPROP_WIDTH, width);
      
          ObjectDelete(uniqueID+"text"+12);
          ObjectCreate(uniqueID+"text"+12,OBJ_TEXT,0,Time[TextOffset],TopOfRange+(TextAboveLine*Point*mult));
	       ObjectSetText(uniqueID+"text"+12,uniqueID+" "+"TOP "+DoubleToStr(TopPercent,2)+"%  "+DoubleToStr(TopOfRange,Digits),FontSize,"Arial",TopRangeColor);      
      
          ObjectDelete(uniqueID+"fib"+13);
          ObjectCreate(uniqueID+"fib"+13, OBJ_HLINE , 0,Time[0], BottomOfRange);   
          ObjectSet(uniqueID+"fib"+13, OBJPROP_STYLE, linestyleRange);   
          ObjectSet(uniqueID+"fib"+13, OBJPROP_COLOR, BotRangeColor);
          ObjectSet(uniqueID+"fib"+13, OBJPROP_WIDTH, width);
      
          ObjectDelete(uniqueID+"text"+13);
          ObjectCreate(uniqueID+"text"+13,OBJ_TEXT,0,Time[TextOffset],BottomOfRange+(TextAboveLine*Point*mult));
	       ObjectSetText(uniqueID+"text"+13,uniqueID+" "+"BOT "+DoubleToStr(BottomPercent,2)+"%  "+DoubleToStr(BottomOfRange,Digits),FontSize,"Arial",BotRangeColor); 
  
      }
  
          
          
         DrawLine( "ICCE_Line", NumberOfLinesAbove,NumberOfLinesBelow);
       
     
}
   
void DrawLine( string label, int NumberOfLinesAbove, int  NumberOfLinesBelow)
 
  {
            DeleteObj(uniqueID+LinePrefixRight);
            DeleteObj(uniqueID+LinePrefixLeft);
            DeleteObj(uniqueID+LinePrefixCenter);
           double lowest,highest;
           datetime TL,TR;
           highest    = ObjectGet(uniqueID+"fib"+12,OBJPROP_PRICE1);
           lowest = ObjectGet(uniqueID+"fib"+13,OBJPROP_PRICE1);
           TL    = ObjectGet(uniqueID+"LS",OBJPROP_TIME1);
           TR = ObjectGet(uniqueID+"RS",OBJPROP_TIME1);
      
                 
            datetime  storetimesRightR[],storetimesRightL[],storetimesleftR[],storetimesleftL[]; 
            ArrayResize(storetimesRightR, NumberOfLinesBelow+1);
             ArrayResize(storetimesRightL, NumberOfLinesBelow+1);
            ArrayResize(storetimesleftR, NumberOfLinesAbove+1);
            ArrayResize(storetimesleftL, NumberOfLinesAbove+1);
            double lowP,highP;
            datetime Tdiff;
            int i,k;
            
           
            datetime thetime,endDateTime;
            if (reverselines==true)
             {
             lowP=highest;
             highP=lowest;
             }
            else if (reverselines==false)
            
           {
             lowP=lowest;
             highP=highest;
           }
             
        
          
            
               int      posL=iBarShift(NULL,0,TL);
               int      posR=iBarShift(NULL,0,TR);
             
                double priceDif=highest-lowest;
              int Posdiff=MathAbs(posL-posR  );
              
             
              
              
         if (drawright ==true)
         {   
         
              
                            
                
                 for (  i=1; i<=NumberOfLinesBelow; i++) 
                           
                 {
    
               
                 ObjectCreate(uniqueID+label+"Right"+i,OBJ_TREND,0,TL,lowP-(priceDif*i),TR,highP-(priceDif*i));
                
                 ObjectSet(uniqueID+label+"Right"+i, OBJPROP_STYLE, plinestyleRange);   
                 ObjectSet(uniqueID+label+"Right"+i, OBJPROP_COLOR, pRangeColorBottom);
                 ObjectSet(uniqueID+label+"Right"+i, OBJPROP_WIDTH, pwidth);
                 ObjectSet(uniqueID+label+"Right"+i,OBJPROP_RAY,1);
              
                }
             
                
         
               if (drawExtensions==true) 
                {
                  
                   for (  i=1; i<=NumberOfLinesBelow; i++) 
                    {
                    
                  
                      ObjectCreate(uniqueID+label+"Right"+"e"+i,OBJ_TREND,0,TR,highP-(priceDif*i),TL,lowP-(priceDif*i));
                  
                     ObjectSet(uniqueID+label+"Right"+"e"+i, OBJPROP_STYLE, plinestyleRange);   
                     ObjectSet(uniqueID+label+"Right"+"e"+i, OBJPROP_COLOR, pRangeColorBottom);
                     ObjectSet(uniqueID+label+"Right"+"e"+i, OBJPROP_WIDTH, pwidth);
                  
                  }
              
                  
                 }
     
         
         
         
           
              
             } 
              
                 
     
         else
         {
         DeleteObj(uniqueID+LinePrefixRight);
         }
           
         
          if (drawleft ==true) 
          {
              
                
                
                
                
                 for (  i=1; i<=NumberOfLinesAbove; i++) 
                           
              {
    
               
                 ObjectCreate(uniqueID+label+"left"+i,OBJ_TREND,0,TL,lowP+(priceDif*i),TR,highP+(priceDif*i));
               ObjectSet(uniqueID+label+"left"+i, OBJPROP_STYLE, plinestyleRange);   
               ObjectSet(uniqueID+label+"left"+i, OBJPROP_COLOR, pRangeColorTop);
               ObjectSet(uniqueID+label+"left"+i, OBJPROP_WIDTH, pwidth);
               ObjectSet(uniqueID+label+"left"+i,OBJPROP_RAY,1);
             }
     
     
                 if (drawExtensions==true) 
                             {
                               for (  i=1; i<=NumberOfLinesAbove; i++) 
           
                                {
                       
                                ObjectCreate(uniqueID+label+"left"+"e"+i,OBJ_TREND,0,TR,highP+(priceDif*i),TL,lowP+(priceDif*i));
                                 ObjectSet(uniqueID+label+"left"+"e"+i, OBJPROP_STYLE, plinestyleRange);   
                                   ObjectSet(uniqueID+label+"left"+"e"+i, OBJPROP_COLOR, pRangeColorTop);
                                   ObjectSet(uniqueID+label+"left"+"e"+i, OBJPROP_WIDTH, pwidth);
                               }
                  
                         }
     
            
       }  
       
        else
         {
         DeleteObj(uniqueID+LinePrefixLeft);
         }
         
         
         
      if (drawcenter==true)
           {
            ObjectCreate(uniqueID+label+"Center"+0,OBJ_TREND,0,TL,lowP,TR,highP);
                
               ObjectSet(uniqueID+label+"Center"+0, OBJPROP_STYLE, plinestyleRange);   
               ObjectSet(uniqueID+label+"Center"+0, OBJPROP_COLOR, pRangeColorCenter);
               ObjectSet(uniqueID+label+"Center"+0, OBJPROP_WIDTH, pwidth);
               ObjectSet(uniqueID+label+"Center"+0,OBJPROP_RAY,1);
              
                if (drawExtensions==true) 
                {
               
                     ObjectCreate(uniqueID+label+"Centere"+0,OBJ_TREND,0,TR,highP,TL,lowP);
                
                    ObjectSet(uniqueID+label+"Centere"+0, OBJPROP_STYLE, plinestyleRange);   
                    ObjectSet(uniqueID+label+"Centere"+0, OBJPROP_COLOR, pRangeColorCenter);
                    ObjectSet(uniqueID+label+"Centere"+0, OBJPROP_WIDTH, pwidth);
                    ObjectSet(uniqueID+label+"Centere"+0,OBJPROP_RAY,1);  
               }
             
               
           }
           
           
            
           else
         {
         DeleteObj(uniqueID+LinePrefixCenter);
         }    
         
 }
 
 
 void DrawtFib()
{  


       TopOfRange    = ObjectGet(uniqueID+"fib"+12,OBJPROP_PRICE1);
  
      BottomOfRange = ObjectGet(uniqueID+"fib"+13,OBJPROP_PRICE1);
      
      //TopOfRange and BottomOfRange===============
      ObjectDelete(uniqueID+"fib"+12);
      ObjectCreate(uniqueID+"fib"+12, OBJ_HLINE , 0,Time[0], TopOfRange);   
      ObjectSet(uniqueID+"fib"+12, OBJPROP_STYLE, linestyleRange);   
      ObjectSet(uniqueID+"fib"+12, OBJPROP_COLOR, TopRangeColor);
      ObjectSet(uniqueID+"fib"+12, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"text"+12);
      ObjectCreate(uniqueID+"text"+12,OBJ_TEXT,0,Time[TextOffset],TopOfRange+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"text"+12,uniqueID+" "+"TOP "+DoubleToStr(TopPercent,2)+"%  "+DoubleToStr(TopOfRange,Digits),FontSize,"Arial",TopRangeColor);      
      
      ObjectDelete(uniqueID+"fib"+13);
      ObjectCreate(uniqueID+"fib"+13, OBJ_HLINE , 0,Time[0], BottomOfRange);   
      ObjectSet(uniqueID+"fib"+13, OBJPROP_STYLE, linestyleRange);   
      ObjectSet(uniqueID+"fib"+13, OBJPROP_COLOR, BotRangeColor);
      ObjectSet(uniqueID+"fib"+13, OBJPROP_WIDTH, width);
      
      ObjectDelete(uniqueID+"text"+13);
      ObjectCreate(uniqueID+"text"+13,OBJ_TEXT,0,Time[TextOffset],BottomOfRange+(TextAboveLine*Point*mult));
	   ObjectSetText(uniqueID+"text"+13,uniqueID+" "+"BOT "+DoubleToStr(BottomPercent,2)+"%  "+DoubleToStr(BottomOfRange,Digits),FontSize,"Arial",BotRangeColor); 
        
        
      
      pf    = tTopPercent-tBottomPercent;
      range = TopOfRange-BottomOfRange;
      unit  = range/pf;
     
     
        
//Fib1=======================================      
      pd1       = MathAbs(TopPercent-tFib1);
      piptotal = unit*pd1;
      if ( tFib1 < TopPercent )
         fp1 = TopOfRange-piptotal;  
      else 
         fp1 = TopOfRange+piptotal;
       
                  

//Fib9=======================================      
      pd2       = MathAbs(TopPercent-tFib9);
      piptotal = unit*pd2;
      if ( tFib9 < TopPercent )
         fp9 = TopOfRange-piptotal;  
      else 
         fp9 = TopOfRange+piptotal;
      


//draw fibs

          
            datetime T1,T2;
            T1= ObjectGet(uniqueID+"RS", OBJPROP_TIME1);
            T2=ObjectGet(uniqueID+"LS", OBJPROP_TIME1);
           
            
                ObjectCreate(uniqueID+UniqueIDFib, OBJ_FIBO, 0, T2, fp1, T1, fp9);
           
  
   double  tfib2,tfib3,tfib4,tfib5,tfib6,tfib7,tfib8,tfib9,tfib10,tfib11,ttopPercent,tbottomPercent;
  tfib2=tFib2/100;
   tfib3=tFib3/100;
   tfib4=tFib4/100;
   tfib5=tFib5/100;
   tfib6=tFib6/100;
   tfib7=tFib7/100;
   tfib8=tFib8/100;
   tfib9=tFib9/100;
   tfib10=tFib10/100;
   tfib11=tFib11/100;
   ttopPercent=tTopPercent/100;
   tbottomPercent=tBottomPercent/100;
  

            string fiboobjname = uniqueID+UniqueIDFib;
            ObjectSet(fiboobjname, OBJPROP_FIBOLEVELS, 12);
            
            ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL, tFib1);
               ObjectSetFiboDescription(fiboobjname,0,DoubleToStr(tFib1,fibdigits)+"    %$");
               
             
                ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+1, tfib2);
               ObjectSetFiboDescription(fiboobjname,1,DoubleToStr(tFib2,fibdigits)+"    %$");
   
              
                ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+2, tfib3);
              ObjectSetFiboDescription(fiboobjname,2,DoubleToStr(tFib3,fibdigits)+"    %$");
               
             
              ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+3, tfib4);
               ObjectSetFiboDescription(fiboobjname,3,DoubleToStr(tFib4,fibdigits)+"    %$");
   
              ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+4, tbottomPercent);
              ObjectSetFiboDescription(fiboobjname,4,DoubleToStr(tbottomPercent*100,fibdigits)+"    %$");
   
             
               ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+5, tfib5);
              ObjectSetFiboDescription(fiboobjname,5,DoubleToStr(tFib5,fibdigits)+"    %$");
   
             ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+6, ttopPercent);
               ObjectSetFiboDescription(fiboobjname,6,DoubleToStr(ttopPercent*100,fibdigits)+"    %$");
   
             
                ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+7, tfib6);
               ObjectSetFiboDescription(fiboobjname,7,DoubleToStr(tFib6,fibdigits)+"    %$");
             
   
             
               ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+8, tfib7);
           ObjectSetFiboDescription(fiboobjname,8,DoubleToStr(tFib7,fibdigits)+"    %$");
   
             
              ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+9, tfib8);
           ObjectSetFiboDescription(fiboobjname,9,DoubleToStr(tFib8,fibdigits)+"    %$");
             
           
          ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+10, tfib9);
           ObjectSetFiboDescription(fiboobjname,10,DoubleToStr(tFib9,fibdigits)+"    %$");
           
           
   
             
            
                ObjectSet(fiboobjname, OBJPROP_FIRSTLEVEL+11, tfib10);
           ObjectSetFiboDescription(fiboobjname,11,DoubleToStr(tFib10,fibdigits)+"    %$");
   
    
   
               ObjectSet( fiboobjname, OBJPROP_LEVELCOLOR, FibColor) ;
             
               
 
   return(0); 
   } 
int reinit()
{
  
   init();
  
}
    
 
  