
#property indicator_chart_window
 string Sound = "alert.wav";
extern bool EmailAlert = TRUE;
extern bool PopupAlert = TRUE;
 bool SoundAlert = TRUE;
int myBars;
int  DistanceCloseTrend = 0;
string FullDescr="";
double ObjPRICE_Prior2,OldMainDistance,rsi,cci,ObjPRICE_Prior;
int barra;
string auxTrendLineName="";
int init() {
   int Digitos = MarketInfo(Symbol(), MODE_DIGITS);
   int NumDigitosPar;
   if (Digitos == 2 || Digitos == 4 ) NumDigitosPar = 1;
   if (Digitos == 3 || Digitos == 5 ) NumDigitosPar = 10;
   if (DistanceCloseTrend!=0) DistanceCloseTrend = NormalizeDouble(DistanceCloseTrend * NumDigitosPar , Digits);
   return (0);
}
int deinit() {
   return (0);
}
int start() {
if (!isNewBar())return;
  string ObjectNam;
   double Preco;
   int ObjectOK;
   int dif;
   string auxS;
   for (int i = ObjectsTotal() - 1; i >= 0; i--)
   {
      ObjectNam = ObjectName(i);
      Preco = getObjectPrice(ObjectNam);
      if (Preco != -9999.0)
      {
         ObjectOK = getObjectAlert(ObjectNam);
         if (ObjectOK != -9999)
         {
          dif = MathAbs(Close[1] - Preco) / Point;
          if (  (Open[1]>=Preco  && Close[1]<=Preco) || (Open[1]<=Preco  && Close[1]>=Preco)  )
          {
            auxS = "Alert triggered: " + Symbol() + " Trendline Breakout  "+DoubleToStr(Preco,Digits);
            if (SoundAlert) PlaySound(Sound);
            if (PopupAlert) Alert(auxS);
            if (EmailAlert) SendMail("Alert on " + Symbol(), auxS);
            clearObjectAlert(ObjectNam);
          }
         }
      }
   }
   return (0);
}
double getObjectPrice(string ObjNAME2) {
   int tipoobj = ObjectType(ObjNAME2);
   if (tipoobj == 1)
   {
    double a=ObjectGet(ObjNAME2, OBJPROP_PRICE1);
    ObjPRICE_Prior=a;
    ObjPRICE_Prior2=a;
    return (a);
   }
   if (tipoobj == 2)
   {
   ObjPRICE_Prior=ObjectGetValueByShift(ObjNAME2, 1);
   ObjPRICE_Prior2=ObjectGetValueByShift(ObjNAME2, 2);
           return (ObjectGetValueByShift(ObjNAME2, 0));
   }
   return (-9999);
}
int getObjectAlert(string ObjNAME2) {
   string Descricao = ObjectDescription(ObjNAME2);
   if (StringLen(Descricao)<=0)    return (-9999);
    else
   return (1);
}
void clearObjectAlert(string ObjNAME2) {
      ObjectSetText(ObjNAME2,"");
      ObjectSetText(ObjNAME2,"");
      return;
}
bool isNewBar()  {
   bool res=false;
   if (myBars!=Bars)
      {
      myBars=Bars;
      res=true;
      }
return(res);
}
