#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  Red
#property indicator_color2  Lime
#property indicator_width1  2
#property indicator_width2  2
#property indicator_minimum 0
#property indicator_maximum 0.08

extern string TimeFrame        = "Current time frame";
extern int    AdxPeriod        = 3;
extern int    MomPeriod        = 3;
extern int    MacdFastEma      = 3;
extern int    MacdSlowEma      = 5;
extern int    MacdSignalPeriod = 9;
extern int    MaxBars          = 2000;
extern bool                     AlertPopUp  = false;
extern bool                     AlertSound  = false;
extern bool                     AlertEMail  = false;
extern bool                     AlertNotify = false;


double valueUp[];
double valueDn[];

string indicatorFileName;
bool   returnBars;
int    timeFrame;
string message;
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//

int init()
{
   SetIndexBuffer(0,valueUp); SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(1,valueDn); SetIndexStyle(1,DRAW_HISTOGRAM);
         indicatorFileName = WindowExpertName();
         returnBars        = TimeFrame=="returnBars"; if (returnBars)     { return(0); }
         timeFrame         = stringToTimeFrame(TimeFrame);
   return(0);
}

//
//
//
//
//

int start()
  {
   int i,counted_bars=IndicatorCounted();
      if(counted_bars<0) return(-1);
      if(counted_bars>0) counted_bars--;
         int limit = MathMin(Bars-counted_bars,Bars-1);
         if (returnBars) { valueUp[0] = limit+1; return(0); }
         if (timeFrame != Period()) limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
         
   for (i=limit; i>=0; i--)
   {
      int y = iBarShift(NULL,timeFrame,Time[i]);
            valueDn[i] = iCustom(NULL,timeFrame,"Ganns_Signal_Trend_v4_1",AdxPeriod,MomPeriod,MacdFastEma,MacdSlowEma,MacdSignalPeriod,MaxBars,0,y);
            valueUp[i] = iCustom(NULL,timeFrame,"Ganns_Signal_Trend_v4_1",AdxPeriod,MomPeriod,MacdFastEma,MacdSlowEma,MacdSignalPeriod,MaxBars,1,y);
  
     if(valueUp[2]==0.0000&&valueDn[2]==0.0800&&valueUp[1]==0.0800&&valueDn[1]==0.0800)
      {
     message=_Symbol+TimeFrame+"  Gann signal Sell!";
     AlertOnce(message,0,timeFrame); 
      }
     if(valueUp[2]==0.0800&&valueDn[2]==0.0000&&valueDn[1]==0.0800)
      {
     message=_Symbol+TimeFrame+"  Gann signal Buy!";
     AlertOnce(message,0,timeFrame); 
      } 
  }  
   return(0);
}

//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//

string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

//
//
//
//
//

int stringToTimeFrame(string tfs)
{
   tfs = stringUpperCase(tfs);
   for (int i=ArraySize(iTfTable)-1; i>=0; i--)
         if (tfs==sTfTable[i] || tfs==""+iTfTable[i]) return(MathMax(iTfTable[i],Period()));
                                                      return(Period());
}

//
//
//
//
//

string stringUpperCase(string str)
{
   string   s = str;

   for (int length=StringLen(str)-1; length>=0; length--)
   {
      int tchar = StringGetChar(s, length);
         if((tchar > 96 && tchar < 123) || (tchar > 223 && tchar < 256))
                     s = StringSetChar(s, length, tchar - 32);
         else if(tchar > -33 && tchar < 0)
                     s = StringSetChar(s, length, tchar + 224);
   }
   return(s);
}
//+------------------------------------------------------------------+
int AlertOnce(string alert_msg, int ref, int tf)
{  
int i = 0;


  static int LastAlert[1000];
   
  while (i < 1000)
{
 if (ref == i)
  {
           if( LastAlert[i] == 0 || LastAlert[i] < iBars(NULL,tf) )
        {
           if(AlertPopUp)           Alert(alert_msg);
           if(AlertSound)           PlaySound("alert.wav");
           if(AlertEMail)           SendMail("AbsoluteStrenghtHisto Alert",alert_msg);
           if(AlertNotify)          SendNotification(alert_msg);
           LastAlert[i] = iBars(NULL,tf);
           return (1);
        }
      break;
 }
   
 i = i + 1;
  }
 return(0);  
}
//+------------------------------------------------------------------+