//+------------------------------------------------------------------+
//|                                                   Fib Levels.mq4 |
//|                modified by GodfreyH for user defined grid levels |
//|                                Copyright © 2008, Jared aka ItGuy |
//|                                         http://www.tradefibs.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Jared aka ITGuy"
#property link      "http://www.tradefibs.com"
#property indicator_chart_window

extern bool uptrend=true;
extern int LineWidth = 1;
extern string ltype = "-----Line Type-----";
extern string ltype2= "1=Solid,2=Dash,3=Dot";
extern string ltype3= "4=DashDot,5=DashDotDot";
extern int linetype = 2;
extern color LineColor= Green;
color LabelColor= SeaGreen;
bool show_Level=true;
bool show_6765=true;
bool show_10946=true;
string LineName= "Grid";
string LineText="Zone ";
bool LabelLines = false;
int FontSize=8;
extern int Level=30;
extern double STARTING_PRICE = 0.00;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
//----
    if ( UninitializeReason() != REASON_CHARTCHANGE ) {
        Comment("");
        ObjectDelete(LineName);
        ObjectDelete(LineName+" level");
        ObjectDelete(LineName+" Level2");
        ObjectDelete(LineName+" Level3");
        ObjectDelete(LineName+" Level4");
        ObjectDelete(LineName+" Level5");
        ObjectDelete(LineName+" Level6");
        ObjectDelete(LineName+" Level7");
        ObjectDelete(LineName+" Level8");
        ObjectDelete(LineName+" Level9");
        ObjectDelete(LineName+" Level10");
        ObjectDelete(LineName+" Level11");
        ObjectDelete(LineText);
        ObjectDelete(LineText+"  level");
        ObjectDelete(LineText+"  Level2");
        ObjectDelete(LineText+"  Level3");
        ObjectDelete(LineText+"  Level4");
        ObjectDelete(LineText+"  Level5");
        ObjectDelete(LineText+"  Level6");
        ObjectDelete(LineText+"  Level7");
        ObjectDelete(LineText+"  Level8");
        ObjectDelete(LineText+"  Level9");
        ObjectDelete(LineText+"  Level10");
        ObjectDelete(LineText+"  Level11");
     
   
//----
}
   return(0);
}
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
  double locate2 = ObjectGet(LineName,OBJPROP_PRICE1);
  double locatetexts=ObjectGet(LineText,OBJPROP_PRICE1);
  SetLevel(locate2,locatetexts);

//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

void SetLevel(double locate, double locatetext){
string LineName1 = LineName+" level";
string LineName2 = LineName+" Level2";
string LineName3 = LineName+" Level3";
string LineName4 = LineName+" Level4";
string LineName5 = LineName+" Level5";
string LineName6 = LineName+" Level6";
string LineName7 = LineName+" Level7";
string LineName8 = LineName+" Level8";
string LineName9 = LineName+" Level9";
string LineName10 = LineName+" Level10";
string LineName11 = LineName+" Level11";
string LineText1 = LineText+" level";
string LineText2 = LineText+" Level2";
string LineText3 = LineText+" Level3";
string LineText4 = LineText+" Level4";
string LineText5 = LineText+" Level5";
string LineText6 = LineText+" Level6";
string LineText7 = LineText+" Level7";
string LineText8 = LineText+"Level8";
string LineText9 = LineText+" Level9";
string LineText10= LineText+" Level10";
string LineText11= LineText+" Level11";

  if (linetype>1)LineWidth=1;

//datetime Text_Time = iTime(NULL, 0, (WindowBarsPerChart()/3));
datetime Text_Time = Time[1];

if (uptrend==true){
double highlevel=STARTING_PRICE;
//Low[ iLowest(NULL,TimeFrame,MODE_LOW,WindowBarsPerChart(),0)];
  //Create the Fib lines
  ObjectCreate(LineName,OBJ_HLINE,0,0,highlevel);
  ObjectSet(LineName,OBJPROP_STYLE,linetype);
  ObjectSet(LineName,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName,OBJPROP_COLOR,LineColor);
if (show_Level)
 {  
  ObjectCreate(LineName1,OBJ_HLINE,0,0,0);
  ObjectSet(LineName1,OBJPROP_PRICE1,(locate+(Level*Point)));
  ObjectSet(LineName1,OBJPROP_STYLE,linetype);
  ObjectSet(LineName1,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName1,OBJPROP_COLOR,LineColor);
  }
     
  ObjectCreate(LineName2,OBJ_HLINE,0,0,0);
  ObjectSet(LineName2,OBJPROP_PRICE1,(locate+(Level*Point*2)));
  ObjectSet(LineName2,OBJPROP_STYLE,linetype);
  ObjectSet(LineName2,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName2,OBJPROP_COLOR,LineColor);
  
  
  ObjectCreate(LineName3,OBJ_HLINE,0,0,0);
  ObjectSet(LineName3,OBJPROP_PRICE1,(locate+(Level*Point*3)));
  ObjectSet(LineName3,OBJPROP_STYLE,linetype);
  ObjectSet(LineName3,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName3,OBJPROP_COLOR,LineColor);

  
  ObjectCreate(LineName4,OBJ_HLINE,0,0,0);
  ObjectSet(LineName4,OBJPROP_PRICE1,(locate+(Level*Point*4)));
  ObjectSet(LineName4,OBJPROP_STYLE,linetype);
  ObjectSet(LineName4,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName4,OBJPROP_COLOR,LineColor);
  
  
  ObjectCreate(LineName5,OBJ_HLINE,0,0,0);
  ObjectSet(LineName5,OBJPROP_PRICE1,(locate+(Level*Point*5)));
  ObjectSet(LineName5,OBJPROP_STYLE,linetype);
  ObjectSet(LineName5,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName5,OBJPROP_COLOR,LineColor);
  
  
  ObjectCreate(LineName6,OBJ_HLINE,0,0,0);
  ObjectSet(LineName6,OBJPROP_PRICE1,(locate+(Level*Point*6)));
  ObjectSet(LineName6,OBJPROP_STYLE,linetype);
  ObjectSet(LineName6,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName6,OBJPROP_COLOR,LineColor);
  
  ObjectCreate(LineName7,OBJ_HLINE,0,0,0);
  ObjectSet(LineName7,OBJPROP_PRICE1,(locate+(Level*Point*7)));
  ObjectSet(LineName7,OBJPROP_STYLE,linetype);
  ObjectSet(LineName7,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName7,OBJPROP_COLOR,LineColor);
  
  ObjectCreate(LineName8,OBJ_HLINE,0,0,0);
  ObjectSet(LineName8,OBJPROP_PRICE1,(locate+(Level*Point*8)));
  ObjectSet(LineName8,OBJPROP_STYLE,linetype);
  ObjectSet(LineName8,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName8,OBJPROP_COLOR,LineColor);
  
  ObjectCreate(LineName9,OBJ_HLINE,0,0,0);
  ObjectSet(LineName9,OBJPROP_PRICE1,(locate+(Level*Point*9)));
  ObjectSet(LineName9,OBJPROP_STYLE,linetype);
  ObjectSet(LineName9,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName9,OBJPROP_COLOR,LineColor);

if(show_Level)
{  
  ObjectCreate(LineName10,OBJ_HLINE,0,0,0);
  ObjectSet(LineName10,OBJPROP_PRICE1,(locate+(Level*Point*10)));
  ObjectSet(LineName10,OBJPROP_STYLE,linetype);
  ObjectSet(LineName10,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName10,OBJPROP_COLOR,LineColor);
 }
 
if(show_Level)
{
  ObjectCreate(LineName11,OBJ_HLINE,0,0,0);
  ObjectSet(LineName11,OBJPROP_PRICE1,(locate+(Level*Point*11)));
  ObjectSet(LineName11,OBJPROP_STYLE,linetype);
  ObjectSet(LineName11,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName11,OBJPROP_COLOR,LineColor);
}  
  //Create the Line Text
  if(LabelLines==true){
    
  ObjectCreate(LineText,OBJ_TEXT,0,Time[1],0);
  ObjectSetText(LineText,"Base --  "+DoubleToStr(((locate/Point)*Point),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText,OBJPROP_PRICE1,locate);
if(show_Level)
{  
  ObjectCreate(LineText1,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText1,LineText1+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText1,OBJPROP_PRICE1,(locate+(Level*Point)));
 }   
  ObjectCreate(LineText2,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText2,LineText2+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point*2),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText2,OBJPROP_PRICE1,(locate+(Level*Point)));
  
  ObjectCreate(LineText3,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText3,LineText3+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point*3),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText3,OBJPROP_PRICE1,(locate+(Level*Point)));
  
  ObjectCreate(LineText4,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText4,LineText4+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point*4),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText4,OBJPROP_PRICE1,(locate+(Level*Point)));
  
  ObjectCreate(LineText5,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText5,LineText5+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point*5),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText5,OBJPROP_PRICE1,(locate+(Level*Point)));
  
  ObjectCreate(LineText6,OBJ_TEXT,0,0,0);
  ObjectSetText(LineText6,LineText6+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point*6),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText6,OBJPROP_PRICE1,(locate+(Level*Point)));
  
  ObjectCreate(LineText7,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText7,LineText7+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point*7),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText7,OBJPROP_PRICE1,(locate+(Level*Point)));
  
  ObjectCreate(LineText8,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText8,LineText8+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point*8),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText8,OBJPROP_PRICE1,(locate+(Level*Point)));
  
  ObjectCreate(LineText9,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText9,LineText9+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point*9),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText9,OBJPROP_PRICE1,(locate+(Level*Point)));
  
if(show_6765)
{
  ObjectCreate(LineText10,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText10,LineText10+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point*10),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText10,OBJPROP_PRICE1,(locate+(Level*Point)));
}  

if(show_10946)
{ 
  ObjectCreate(LineText11,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText11,LineText11+" --- "+DoubleToStr((((locate/Point)*Point)+Level*Point*11),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText11,OBJPROP_PRICE1,(locate+(Level*Point)));  }
 } 
  }
 
if (uptrend==false){
double lowlevel=STARTING_PRICE;
//High[ iHighest(NULL,TimeFrame,MODE_HIGH,WindowBarsPerChart(),0)];
  
  //Create the Fib Lines
  ObjectCreate(LineName,OBJ_HLINE,0,0,lowlevel);
  ObjectSet(LineName,OBJPROP_STYLE,linetype);
  ObjectSet(LineName,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName,OBJPROP_COLOR,LineColor);
  
  if (show_Level)
 {  
  ObjectCreate(LineName1,OBJ_HLINE,0,0,0);
  ObjectSet(LineName1,OBJPROP_PRICE1,(locate-(Level*Point)));
  ObjectSet(LineName1,OBJPROP_STYLE,linetype);
  ObjectSet(LineName1,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName1,OBJPROP_COLOR,LineColor);
  }
    
  ObjectCreate(LineName2,OBJ_HLINE,0,0,0);
  ObjectSet(LineName2,OBJPROP_PRICE1,(locate-(Level*Point*2)));
  ObjectSet(LineName2,OBJPROP_STYLE,linetype);
  ObjectSet(LineName2,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName2,OBJPROP_COLOR,LineColor);
  
  ObjectCreate(LineName3,OBJ_HLINE,0,0,0);
  ObjectSet(LineName3,OBJPROP_PRICE1,(locate-(Level*Point*3)));
  ObjectSet(LineName3,OBJPROP_STYLE,linetype);
  ObjectSet(LineName3,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName3,OBJPROP_COLOR,LineColor);
  
  ObjectCreate(LineName4,OBJ_HLINE,0,0,0);
  ObjectSet(LineName4,OBJPROP_PRICE1,(locate-(Level*Point*4)));
  ObjectSet(LineName4,OBJPROP_STYLE,linetype);
  ObjectSet(LineName4,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName4,OBJPROP_COLOR,LineColor);
  
  ObjectCreate(LineName5,OBJ_HLINE,0,0,0);
  ObjectSet(LineName5,OBJPROP_PRICE1,(locate-(Level*Point*5)));
  ObjectSet(LineName5,OBJPROP_STYLE,linetype);
  ObjectSet(LineName5,OBJPROP_COLOR,LineColor);
  ObjectSet(LineName5,OBJPROP_WIDTH,LineWidth);
  
  ObjectCreate(LineName6,OBJ_HLINE,0,0,0);
  ObjectSet(LineName6,OBJPROP_PRICE1,(locate-(Level*Point*6)));
  ObjectSet(LineName6,OBJPROP_STYLE,linetype);
  ObjectSet(LineName6,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName6,OBJPROP_COLOR,LineColor);
  
  ObjectCreate(LineName7,OBJ_HLINE,0,0,0);
  ObjectSet(LineName7,OBJPROP_PRICE1,(locate-(Level*Point*7)));
  ObjectSet(LineName7,OBJPROP_STYLE,linetype);
  ObjectSet(LineName7,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName7,OBJPROP_COLOR,LineColor);
  
  ObjectCreate(LineName8,OBJ_HLINE,0,0,0);
  ObjectSet(LineName8,OBJPROP_PRICE1,(locate-(Level*Point*8)));
  ObjectSet(LineName8,OBJPROP_STYLE,linetype);
  ObjectSet(LineName8,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName8,OBJPROP_COLOR,LineColor);
  
  ObjectCreate(LineName9,OBJ_HLINE,0,0,0);
  ObjectSet(LineName9,OBJPROP_PRICE1,(locate-(Level*Point*9)));
  ObjectSet(LineName9,OBJPROP_STYLE,linetype);
  ObjectSet(LineName9,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName9,OBJPROP_COLOR,LineColor);
  
if(show_Level)
{  
  ObjectCreate(LineName10,OBJ_HLINE,0,0,0);
  ObjectSet(LineName10,OBJPROP_PRICE1,(locate-(Level*Point*10)));
  ObjectSet(LineName10,OBJPROP_STYLE,linetype);
  ObjectSet(LineName10,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName10,OBJPROP_COLOR,LineColor);
 }
 
if(show_Level)
{
  ObjectCreate(LineName11,OBJ_HLINE,0,0,0);
  ObjectSet(LineName11,OBJPROP_PRICE1,(locate-(Level*Point*11)));
  ObjectSet(LineName11,OBJPROP_STYLE,linetype);
  ObjectSet(LineName11,OBJPROP_WIDTH,LineWidth);
  ObjectSet(LineName11,OBJPROP_COLOR,LineColor);
}    
  
  //Create the Line Text
  if (LabelLines==true){
  ObjectCreate(LineText,OBJ_TEXT,0,Time[1],0);
  ObjectSetText(LineText,"Base --  "+DoubleToStr(((locate/Point)*Point),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText,OBJPROP_PRICE1,locate);
  
  if(show_Level)
{  
  ObjectCreate(LineText1,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText1,LineText1+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText1,OBJPROP_PRICE1,(locate-(Level*Point)));
 }   
  
  ObjectCreate(LineText2,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText2,LineText2+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point*2),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText2,OBJPROP_PRICE1,(locate-(Level*Point)));
  
  ObjectCreate(LineText3,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText3,LineText3+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point*3),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText3,OBJPROP_PRICE1,(locate-(Level*Point)));
  
  ObjectCreate(LineText4,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText4,LineText4+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point*4),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText4,OBJPROP_PRICE1,(locate-(Level*Point)));
  
  ObjectCreate(LineText5,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText5,LineText5+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point*5),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText5,OBJPROP_PRICE1,(locate-(Level*Point)));
  
  ObjectCreate(LineText6,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText6,LineText6+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point*6),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText6,OBJPROP_PRICE1,(locate-(Level*Point)));
  
  ObjectCreate(LineText7,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText7,LineText7+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point*7),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText7,OBJPROP_PRICE1,(locate-(Level*Point)));
  
  ObjectCreate(LineText8,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText8,LineText8+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point*8),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText8,OBJPROP_PRICE1,(locate-(Level*Point)));
  
  ObjectCreate(LineText9,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText9,LineText9+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point*9),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText9,OBJPROP_PRICE1,(locate-(Level*Point)));
if(show_Level)
{
  ObjectCreate(LineText10,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText10,LineText10+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point*10),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText10,OBJPROP_PRICE1,(locate-(Level*Point)));
}  

if(show_Level)
{ 
  ObjectCreate(LineText11,OBJ_TEXT,0,Text_Time,0);
  ObjectSetText(LineText11,LineText11+" --- "+DoubleToStr((((locate/Point)*Point)-Level*Point*11),Digits),FontSize,"Times New Roman",LabelColor);
  ObjectSet(LineText11,OBJPROP_PRICE1,(locate-(Level*Point)));  }
   
  }
  
  }
 // string trend;
 // if (uptrend==true)trend = "Long";
 // if (uptrend==false)trend = "Short";
 // Comment("Current Trend Direction is "+trend);
  }
  