//+------------------------------------------------------------------+
//|                                               ay-TrendFinder.mq4 |
//|                      Copyright © 2010, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property description "edited6 by eevviill"
#property description "fstf ind,TF,view set,HA"

#property indicator_chart_window
#define fstf  0
#define UPCLR    DimGray
#define DOWNCLR  DarkGoldenrod
#define OTHERCLR Gold


//---- input parameters
extern string   spr0             = "»» Max NumBars: 30";
extern int      NumBars          = 19
              , MaxColumn        = 6;

extern ENUM_TIMEFRAMES TimeFrame_0        = PERIOD_CURRENT;
extern string SymbolList       = "AUDCAD,AUDCHF,AUDJPY,AUDNZD,AUDUSD,CADCHF,CADJPY,CHFJPY,EURAUD,EURCHF,EURGBP,EURJPY,EURNZD,EURUSD,GBPCAD,GBPCHF,GBPJPY,GBPUSD,GBPAUD,NZDUSD,USDCAD,USDCHF,USDJPY,XAUUSD";
extern string   spr2             = "»» FpsF Setting";
extern string ind1_name = "Heiken_Ashi";
extern int ind1_shift = 1;
extern string   spr3             = "»» Alert";
extern bool     AlertAndSendMail = true;
extern int      CloseAlertMinute = 5
              , MinSameColor     = 3;

extern string emp1 = "//////////////View settings///////////////";
extern int X_add = 0;
extern int Y_add = 0;
extern string identif_add = "1";



int iBar0Sym = 129;

string asPairs[];

//array indicator func, order must match IDXxxx Constant   
string asIndic[] = {""};   

int iTf;
string TimeFrame;
string identif=identif_add+"Fpsbalalab";

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
 string name_delete;
 for(int i=ObjectsTotal()-1;i>=0;i--)
 {
 name_delete=ObjectName(i);
 if(StringFind(name_delete,identif)!=-1) ObjectDelete(name_delete);
 }


//---- indicators
iTf = TimeFrame_0; if(TimeFrame_0==0) iTf=Period();
TimeFrame=TF_str_f(TimeFrame_0);


if (NumBars>30) NumBars=30;

//parsing SymbolList to asPairs[]

   int idx, count_idx, last_idx;
   string str;
   for(;;)
   {
      idx = StringFind(SymbolList, ",", last_idx);
      
      if (idx >= 0) 
      {
         str = StringTrimRight(StringTrimLeft(StringSubstr(SymbolList, last_idx, idx-last_idx)));
         last_idx = idx+1;
      }else      
         str = StringTrimRight(StringTrimLeft(StringSubstr(SymbolList, last_idx, StringLen(SymbolList)-last_idx)));           
      
      count_idx +=1; 
      ArrayResize(asPairs, count_idx);
      asPairs[count_idx-1] = str;

      if (idx < 0) break;
   }   

   //Draw..... 
   layout();
//----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 string name_delete;
 for(int i=ObjectsTotal()-1;i>=0;i--)
 {
 name_delete=ObjectName(i);
 if(StringFind(name_delete,identif)!=-1) ObjectDelete(name_delete);
 }

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int i,j,k;
   static bool balert, startup = true; 
   datetime t = iTime(NULL,iTf,0) + iTf * 60 - TimeCurrent();
   
   if (TimeHour(t) > 0 && TimeMinute(t) > CloseAlertMinute) balert = false;
   


   string smailmsg;
   for(i=0; i<ArraySize(asPairs); i++)
   {
      int    cntu=0, cntd=0;
      string salert="";
      
      for (j=0; j<ArraySize(asIndic); j++) //indicators
      {         
         for (k=0; k<NumBars; k++)
         {
            //EURUSD-AO-Bar1
            string objname = asPairs[i]+"-"+asIndic[j]+"-Bar"+k;
            //getColor(int f, int shift, string sym)
            color c = getColor(j, k, asPairs[i]);
            ObjectSet(objname+identif, OBJPROP_COLOR, c);
            
            if (k==0 && c==UPCLR)   cntu++;
            if (k==0 && c==DOWNCLR) cntd++;
         }    
      }
      
      if (TimeHour(t) == 0 && TimeMinute(t) <= CloseAlertMinute && AlertAndSendMail && !balert && !startup)
      {         
         if (cntu >= MinSameColor) salert = asPairs[i] + ": " + cntu + " Indicators is UP";
         if (cntd >= MinSameColor) salert = asPairs[i] + ": " + cntd + " Indicators is DOWN";         
         
         if (StringLen(salert) !=0 )
         {            
            Alert(StringConcatenate(CloseAlertMinute + " [", TimeFrame, "], ", salert));
            smailmsg = StringConcatenate(smailmsg, "\n", salert);                        
         }
      }
            
   }   
   
   if (StringLen(smailmsg) != 0 && !balert  && !startup)
   {
      balert = true;
      SendMail(
         TimeFrame + " Multipair TrendFinder"
       , TimeFrame + ", " + CloseAlertMinute + " minute to bar close: \n " + smailmsg   
       );
   }
   
   if (startup) startup = false;
   
   return(0);
}

void layout()
{   
   int i,j,k, xpair, y, x;//, miny;
   int row;
  int miny1=50, miny2=200, miny3=500;
   int miny[] = {40,200,360,540,720,600,700,800};
   //{100,200,350,500,650,800,950,1100};
   
    objCreate("tleft", -100+X_add, +Y_add, TimeFrame + " »" + timeLeft(), 0,"");
      
   for(i=0; i<ArraySize(asPairs); i++) //pair
   {      
      row = MathCeil(i/MaxColumn);      
      xpair = ( (i-(row*MaxColumn)) *230)+-20+X_add;      
      y=miny[row]+Y_add;
      
      //draw pair label
      objCreate(asPairs[i], xpair+30, y , asPairs[i]+","+TimeFrame, 5,"",Silver);
      
      x =xpair+30;
      for (k=NumBars-1; k>=0; k--)
      {
         objCreate(asPairs[i]+"-Bar"+k, x, y-17, CharToStr(iBar0Sym+k),11,DimGray);
         x+=11;
      }
            
      for (j=0; j<ArraySize(asIndic); j++) //indicators
      {     
         x =xpair;
         objCreate(asPairs[i]+"-"+asIndic[j], x, y, asIndic[j],6,"Verdana Bold",DimGray); 
         x +=30;
         for (k=NumBars-1; k>=0; k--) //indicator color of bar 0 to Numbars-1
         {                                     
            objCreate(asPairs[i]+"-"+asIndic[j]+"-Bar"+k, x, y-2, "n",11,"Wingdings",DimGray);             
            x+=11;   
         }
         y+=12;
     } 
   }
   
   
} 

void objCreate(string name_, int x, int y, string text="-", int size=42,
               string font="Arial", color colour=CLR_NONE)
{
string name=name_+identif;

   ObjectCreate(name,OBJ_LABEL,0,0,0);
   ObjectSet(name,OBJPROP_CORNER,0);
   ObjectSet(name,OBJPROP_COLOR,colour);
   ObjectSet(name,OBJPROP_XDISTANCE,x);
   ObjectSet(name,OBJPROP_YDISTANCE,y);
   ObjectSetText(name,text,size,font,colour);
}  

//color function wrapper
////////////////////////////////////////////////////////////////////////
color getColor(int f, int shift, string sym)
{
   switch (f)
   {
      case fstf  : return(get_fstf_Color (shift, sym));

   }
   //else
   return(OTHERCLR);     
}


///////////////////////////////////////////////////////////////////////////
color get_fstf_Color(int shift, string sym)
{
   double HA1=iCustom(sym,iTf,ind1_name,0,shift);
double HA2=iCustom(sym,iTf,ind1_name,1,shift);
   
   if(HA1<HA2) return(UPCLR);
   else if(HA1>HA2) return(DOWNCLR);
   else return(OTHERCLR); 
} 
/*
string getTfName(int tf)
{
  string n;
  switch (tf)
  {
    case PERIOD_MN1:  
      n= "MN1"; break;
    case PERIOD_W1:   
      n= "W1";  break;
    case PERIOD_D1:   
      n= "D1";  break;
    case PERIOD_H4:   
      n= "H4";  break;
    case PERIOD_H1:   
      n= "H1";  break;
    case PERIOD_M30:  
      n= "M30"; break;
    case PERIOD_M15:   
      n= "M15";  break;
    case PERIOD_M5:   
      n= "M5";  break;
    case PERIOD_M1:   
      n= "M1";  break;   
  }  
  return(n);
}
*/
int getTFByName(string TFName)
{
  int m;
  
 

  
  return(m);    
}

string timeLeft()
{
   datetime t = iTime(NULL,iTf,0) + iTf * 60 - TimeCurrent();
   
   return (TimeToStr(t, TIME_MINUTES|TIME_SECONDS));
}
//+------------------------------------------------------------------+
////////////////////////////
string TF_str_f(int tf)
{
string tf_ret="";
int tf_=tf; if(tf==0) tf_=Period();

switch(tf_)
{
case PERIOD_M1:tf_ret="M1";
break;
case PERIOD_M5:tf_ret="M5";
break;
case PERIOD_M15:tf_ret="M15";
break;
case PERIOD_M30:tf_ret="M30";
break;
case PERIOD_H1:tf_ret="H1";
break;
case PERIOD_H4:tf_ret="H4";
break;
case PERIOD_D1:tf_ret="D1";
break;
case PERIOD_W1:tf_ret="W1";
break;
case PERIOD_MN1:tf_ret="MN1";
break;

default:tf_ret="?";
}


return(tf_ret);
}