Auto TL 05 Line Chart





//+------------------------------------------------------------------+
//|Auto TL 04.mq4 
//|Copyright © 2008, Todd Geiger aka fxid10t@yahoo.com (tageiger@comcast.net)
//|http://www.metaquotes.net
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Todd Geiger aka fxid10t@yahoo.com (tageiger@comcast.net)"
#property link      "http://www.metaquotes.net"

#property indicator_chart_window

extern int     period      =1440;
extern int     Sensitivity =3;//see note below *
extern color   Color       =Magenta;
extern bool    Draw.Fibo?  =false;

/*Sensitivity is the number of bars from the current bar to the 2nd point of the last trendline
  that triggers a new trendline creation.  If the trendlines are too close, increase the value.
  Too far, then decrease the value.*/

int s;
double   L1,L2,H1,H2;
double   df1,df2,uf1,uf2;
datetime LT1,LT2,HT1,HT2;
datetime dft1,dft2,uft1,uft2;
string hn,ln,dfn,ufn;

int init()  {  
   dfn="start";
   ufn="start";
   s=Sensitivity;
return(0);  }

int deinit(){ 
//delete all indicator created TL's
   for(int i=ObjectsTotal();i>=0;i--)  {
      if(StringSubstr(ObjectName(i),0,5)=="Lo TL" ||
         StringSubstr(ObjectName(i),0,5)=="Hi TL" ||
         StringSubstr(ObjectName(i),0,5)=="Bear " ||
         StringSubstr(ObjectName(i),0,5)=="Bull ")  {
         ObjectDelete(ObjectName(i));  }  }
return(0);  }

int start() {
if(period<Period()) { period=0; }
//.....trendline breach handling.....
//.....get most recent TL names
if(ObjectsTotal()>0) {
   string lt,ht;
   ln="Lo TL 1970.01.01 00:00";
   hn="Hi TL 1970.01.01 00:00";
   for(int i=ObjectsTotal();i>=0;i--)  {
      if(StringSubstr(ObjectName(i),0,5)=="Lo TL") {
         lt=ObjectName(i);
         if(ObjectGet(lt,2)>StrToTime(StringSubstr(ln,6,16)))   { 
            ln=lt;
            LT1=ObjectGet(ln,0);
            L1=ObjectGet(ln,1);
            LT2=ObjectGet(ln,2);
            L2=ObjectGet(ln,3);
            for(int iii=1; iii<iBarShift(Symbol(),Period(),ObjectGet(ln,2)); iii++) {
               if(Close[iii]<ObjectGetValueByShift(ln,iii))  {
                  ObjectDelete(ln); ln="Lo TL 1970.01.01 00:00";   }  }  }  }
      if(StringSubstr(ObjectName(i),0,5)=="Hi TL") {
         ht=ObjectName(i);
         if(ObjectGet(ht,2)>StrToTime(StringSubstr(hn,6,16)))   {
            hn=ht;
            HT1=ObjectGet(hn,0);
            H1=ObjectGet(hn,1);
            HT2=ObjectGet(hn,2);
            H2=ObjectGet(hn,3);
            for(int ii=1; ii<iBarShift(Symbol(),Period(),ObjectGet(hn,2)); ii++) {
               if(Close[ii]>ObjectGetValueByShift(hn,ii))   {
                  ObjectDelete(hn); hn="Hi TL 1970.01.01 00:00";  }  }  }  }  }  }

   if(L2<L1 || LT1==LT2 || L2==0 || L1==0)   {
      ObjectDelete(ln);
      L1=0; L2=0; LT1=0; LT2=0; ln="Lo TL 1970.01.01 00:00";   }
   if(H2>H1 || HT1==HT2 || H2==0 || H1==0)   {
      ObjectDelete(hn);
      H1=0; H2=0; HT1=0; HT2=0; hn="Hi TL 1970.01.01 00:00";   }
//if no TL's, make some...
   if(ObjectFind(hn)<0  || iBarShift(Symbol(),period,HT2)>s) { HTL(); }
   if(ObjectFind(ln)<0  || iBarShift(Symbol(),period,LT2)>s) { LTL(); }
if(Draw.Fibo?) {  FIB();   }
return(0);}

//+------------------------------------------------------------------+
void FIB()  {
   if(LT1<HT1) {
      if(ObjectFind(dfn)>-1)  {  ObjectDelete(dfn);   }
      dft1=Time[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1),0)];
      df1=Close[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1),0)];
      dft2=Time[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,dft1),0)];
      df2=Close[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,dft1),0)];
      dfn="Bear Fib "+TimeToStr(dft1,TIME_DATE|TIME_MINUTES);

      if(ObjectFind(ufn)>-1)  {  ObjectDelete(ufn);   }
      uft2=Time[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1),0)];
      uf2=Close[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1),0)];
      uft1=Time[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1)+5,0)];
      uf1=Close[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1)+5,0)];
      ufn="Bull Fib "+TimeToStr(uft1,TIME_DATE|TIME_MINUTES);   }

   if(HT1<LT1) {
      if(ObjectFind(ufn)>-1)  {  ObjectDelete(ufn);   }
      uft1=Time[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1),0)];
      uf1=Close[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1),0)];
      uft2=Time[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,uft1),0)];
      uf2=Close[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,uft1),0)];
      ufn="Bull Fib "+TimeToStr(uft1,TIME_DATE|TIME_MINUTES);

      if(ObjectFind(dfn)>-1)  {  ObjectDelete(dfn);   }
      dft2=Time[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1),0)];
      df2=Close[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1),0)];
      dft1=Time[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1)+5,0)];
      df1=Close[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1)+5,0)];
      dfn="Bear Fib "+TimeToStr(dft1,TIME_DATE|TIME_MINUTES);   }

      ObjectCreate(dfn,10,0,dft1,df1,dft2,df2);
      ObjectSet(dfn,9,1);//set as background drawing
      ObjectSet(dfn,201,Crimson);
      ObjectSet(dfn,200,6);
      ObjectSet(dfn,210+0,0);
      ObjectSetFiboDescription(dfn,0,"0 %$");
      ObjectSet(dfn,210+1,0.382);
      ObjectSetFiboDescription(dfn,1,"0.382 %$");
      ObjectSet(dfn,210+2,0.5);
      ObjectSetFiboDescription(dfn,2,"0.5 %$");
      ObjectSet(dfn,210+3,0.618);
      ObjectSetFiboDescription(dfn,3,"0.618 %$");
      ObjectSet(dfn,210+4,0.764);
      ObjectSetFiboDescription(dfn,4,"0.764 %$");
      ObjectSet(dfn,210+5,1.00);
      ObjectSetFiboDescription(dfn,5,"1.00 %$");
      
      ObjectCreate(ufn,10,0,uft1,uf1,uft2,uf2);
      ObjectSet(ufn,9,1);//set as background drawing
      ObjectSet(ufn,6,Green);
      ObjectSet(ufn,201,Green);
      ObjectSet(ufn,200,6);
      ObjectSet(ufn,210+0,0);
      ObjectSetFiboDescription(ufn,0,"0 %$");
      ObjectSet(ufn,210+1,0.382);
      ObjectSetFiboDescription(ufn,1,"0.382 %$");
      ObjectSet(ufn,210+2,0.5);
      ObjectSetFiboDescription(ufn,2,"0.5 %$");
      ObjectSet(ufn,210+3,0.618);
      ObjectSetFiboDescription(ufn,3,"0.618 %$");
      ObjectSet(ufn,210+4,0.764);
      ObjectSetFiboDescription(ufn,4,"0.764 %$");
      ObjectSet(ufn,210+5,1.00);
      ObjectSetFiboDescription(ufn,5,"1.00 %$");   }//end FIB();


void HTL()  {
   if(HT1==0)   {
      HT1=iTime(Symbol(),period,iHighest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1));
      H1=iClose(Symbol(),period,iHighest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1));
      HT2=iTime(Symbol(),period,iHighest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1)-1);
      H2=iClose(Symbol(),period,iHighest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1)-1);
      if(H2==0) H2=H1-1*Point;
      hn="Hi TL "+TimeToStr(HT1,TIME_DATE|TIME_MINUTES);
      create.hi(); }
   if(HT1>0)   {
      HT1=HT2;
      H1=H2;
      HT2=Time[iBarShift(Symbol(),Period(),HT1)-1];
      H2=Close[iBarShift(Symbol(),Period(),HT1)-1];
      hn="Hi TL "+TimeToStr(HT1,TIME_DATE|TIME_MINUTES);
      create.hi();}  }//end HTL();

void LTL()  {
   if(LT1==0)   {
      LT1=iTime(Symbol(),period,iLowest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1));
      L1=iClose(Symbol(),period,iLowest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1));
      LT2=iTime(Symbol(),period,iLowest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1)-1);
      L2=iClose(Symbol(),period,iLowest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1)-1);
      ln="Lo TL "+TimeToStr(LT1,TIME_DATE|TIME_MINUTES);
      create.low(); }
   if(LT1>0)   {
      LT1=LT2;
      L1=L2;
      LT2=Time[iBarShift(Symbol(),Period(),LT1)-1];
      L2=Close[iBarShift(Symbol(),Period(),LT1)-1];
      ln="Lo TL "+TimeToStr(LT1,TIME_DATE|TIME_MINUTES);
      create.low();}  }//end LTL();

void create.low() {
   ObjectCreate(ln,2,0,LT1,L1,LT2,L2);
   ObjectSet(ln,6,Color);//color
   ObjectSet(ln,7,0);//STYLE_DASH
   ObjectSet(ln,8,0);//width
   ObjectSet(ln,9,1);//set as background drawing
   ObjectSet(ln,10,1);//set as ray
   for(int ii=iBarShift(Symbol(),Period(),LT1); ii>0; ii--)  {
      if(Close[ii]<ObjectGetValueByShift(ln,ii)) {
         LT2=Time[ii];
         L2=Close[ii];
         ObjectMove(ln,1,LT2,L2);   }  }  }//create.low();

void create.hi()  {
   ObjectCreate(hn,2,0,HT1,H1,HT2,H2);
   ObjectSet(hn,6,Color);//color
   ObjectSet(hn,7,0);//STYLE_DASH
   ObjectSet(hn,8,0);//width
   ObjectSet(hn,9,1);//set as background drawing
   ObjectSet(hn,10,1);//set as ray
   for(int ii=iBarShift(Symbol(),Period(),HT1); ii>0; ii--)  {
      if(Close[ii]>ObjectGetValueByShift(hn,ii)) {
         HT2=Time[ii];
         H2=Close[ii];
         ObjectMove(hn,1,HT2,H2);   }  }  }//end create.hi();



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: