//+------------------------------------------------------------------+
//|                                             FTAutoTrendlines.mq4 |
//|                                     Copyright 2015, Forex Taurus |
//|                                  http://ForexTaurus.blogspot.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Forex Taurus"
#property link      "http://ForexTaurus.blogspot.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
extern int SecondsToUpdate=1;
extern color clrBullish=clrBlue;
extern color clrBearish= clrRed;
extern color clrHorizontalTrendline=clrSilver;

double dblMaxHLine=0;
double dblMinHLine=1000;

int intChartObjects;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void UpdateTrendLines()
  {
//Alert("Update");
   int intWidth=1;

   intChartObjects=ObjectsTotal();
   int i;
   for(i=intChartObjects-1;i>=0;i--)
     {
      string name=ObjectName(i);
      string description=ObjectGetString(NULL,name,OBJPROP_TEXT);

      if((ObjectType(name)==OBJ_TREND && StringStartsWith(name,"Trendline "))
         || (ObjectType(name)==OBJ_HLINE && StringStartsWith(name,"Horizontal Line "))
         || (ObjectType(name)==OBJ_VLINE && StringStartsWith(name,"Vertical Line "))
         || (ObjectType(name)==OBJ_FIBO && StringStartsWith(name,"Fibo ")))
        {
         if(Period()>=PERIOD_W1) intWidth=4;
         else if(Period()==PERIOD_D1) intWidth=3;
         else if(Period()>=PERIOD_H1) intWidth=2;
         else intWidth=1;
         ObjectSetInteger(NULL,name,OBJPROP_WIDTH,intWidth);
         ObjectSetString(NULL,name,OBJPROP_TEXT,"     "+PeriodName(Period()));

         ShowInLowerTimeFramesOnly(name);

         //LAST CHANGE OBJECT NAME
         ObjectSetString(NULL,name,OBJPROP_NAME,PeriodName(Period())+" "+name);
        }
      AutoColorTrendlines();

     }

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void AutoColorTrendlines()
  {

   int obj_total=ObjectsTotal();
   int i;
   string objName;

// Cycle Thru Objects
   for(i=obj_total-1;i>=0;i--)
     {
      objName=ObjectName(i);

      if(ObjectType(objName)==OBJ_TREND && ObjectGet(objName, OBJPROP_PRICE1) > ObjectGet(objName, OBJPROP_PRICE2))  ObjectSet(objName,OBJPROP_COLOR,clrBearish);
      if(ObjectType(objName)==OBJ_TREND && ObjectGet(objName, OBJPROP_PRICE1) < ObjectGet(objName, OBJPROP_PRICE2))  ObjectSet(objName,OBJPROP_COLOR,clrBullish);


      if(ObjectType(objName)==OBJ_CHANNEL && ObjectGet(objName, OBJPROP_PRICE1) > ObjectGet(objName, OBJPROP_PRICE2))  ObjectSet(objName,OBJPROP_COLOR,clrBearish);
      if(ObjectType(objName)==OBJ_CHANNEL && ObjectGet(objName, OBJPROP_PRICE1) < ObjectGet(objName, OBJPROP_PRICE2))  ObjectSet(objName,OBJPROP_COLOR,clrBullish);

      if(ObjectType(objName)==OBJ_HLINE)
        {
         if(ObjectGet(objName, OBJPROP_PRICE1)>dblMaxHLine || dblMaxHLine==0) dblMaxHLine=ObjectGet(objName, OBJPROP_PRICE1);
         if(ObjectGet(objName, OBJPROP_PRICE1)<dblMinHLine || dblMinHLine==0) dblMinHLine=ObjectGet(objName, OBJPROP_PRICE1);
        }

     }

// Cycle Thru Horizontal Lines and set Color
   for(i=obj_total-1;i>=0;i--)
     {
      objName=ObjectName(i);

      if(ObjectType(objName)==OBJ_HLINE)
        {
         if(dblMaxHLine==dblMinHLine) ObjectSet(objName,OBJPROP_COLOR,clrHorizontalTrendline);
         else if(ObjectGet(objName,OBJPROP_PRICE1)>=dblMaxHLine) ObjectSet(objName,OBJPROP_COLOR,clrBearish);
         else if(ObjectGet(objName,OBJPROP_PRICE1)<=dblMinHLine) ObjectSet(objName,OBJPROP_COLOR,clrBullish);
         else ObjectSet(objName,OBJPROP_COLOR,clrHorizontalTrendline);

         //ObjectSet(objName,OBJPROP_WIDTH,clrTrendlineWidth);
        }

     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string PeriodName(int P)
  {
   string result;
   result="Error";
   if(P==PERIOD_D1) result="D1";
   else if(P == PERIOD_H4) result="H4";
   else if(P == PERIOD_H1) result="H1";
   else if(P == PERIOD_MN1) result="MN1";
   else if(P == PERIOD_W1) result="W1";
   else if(P == PERIOD_M1) result="M1";
   else if(P == PERIOD_M5) result="M5";
   else if(P == PERIOD_M15) result="M15";
   else if(P == PERIOD_M30) result="M30";
   return (result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool StringStartsWith(string TheString,string SearchFor)
  {
   bool result=False;
   int StringLength=0;
   StringLength=StringLen(SearchFor);
   if(StringSubstr(TheString,0,StringLength)==SearchFor) result=True;
   return(result);

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowInLowerTimeFramesOnly(string objname)

  {
   if(Period()==PERIOD_W1) ObjectSetInteger(NULL,objname,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M1|OBJ_PERIOD_M5|OBJ_PERIOD_M15|OBJ_PERIOD_M30|OBJ_PERIOD_H1|OBJ_PERIOD_H4|OBJ_PERIOD_D1|OBJ_PERIOD_W1);
   else if(Period()==PERIOD_D1) ObjectSetInteger(NULL,objname,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M1|OBJ_PERIOD_M5|OBJ_PERIOD_M15|OBJ_PERIOD_M30|OBJ_PERIOD_H1|OBJ_PERIOD_H4|OBJ_PERIOD_D1);
   else if(Period()==PERIOD_H4) ObjectSetInteger(NULL,objname,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M1|OBJ_PERIOD_M5|OBJ_PERIOD_M15|OBJ_PERIOD_M30|OBJ_PERIOD_H1|OBJ_PERIOD_H4);
   else if(Period()==PERIOD_H1) ObjectSetInteger(NULL,objname,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M1|OBJ_PERIOD_M5|OBJ_PERIOD_M15|OBJ_PERIOD_M30|OBJ_PERIOD_H1);
   else if(Period()==PERIOD_M30) ObjectSetInteger(NULL,objname,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M1|OBJ_PERIOD_M5|OBJ_PERIOD_M15|OBJ_PERIOD_M30);
   else if(Period()==PERIOD_M15) ObjectSetInteger(NULL,objname,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M1|OBJ_PERIOD_M5|OBJ_PERIOD_M15);
   else if(Period()==PERIOD_M5) ObjectSetInteger(NULL,objname,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M1|OBJ_PERIOD_M5);
   else if(Period()==PERIOD_M1) ObjectSetInteger(NULL,objname,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M1);

  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

//--- return value of prev_calculated for next call

   UpdateTrendLines();
   AutoColorTrendlines();
   Sleep(SecondsToUpdate*1000);
   return(rates_total);
  }
//+------------------------------------------------------------------+
