Алерты в индикаторах

 

Мужики помогите как убрать алерт в индекаторе? При пересечении линии пищит на каждое движение пипсов до того момента пока снова не уйдет за линию. Нужно сделать так чтобы индикатор пищал один раз при пересечении линии. В програмировании делаю первые шаги. вот код

//+------------------------------------------------------------------+
//|                                              Envelopess alert.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 PowderBlue
#property indicator_color2 PowderBlue
#property indicator_width1 3
#property indicator_width2 3
extern bool Al_upper_price_over=true;
extern bool Alarm_lower_price_below=true;


extern int      LookbackCandles    = 500;
extern int      MAperiod           = 20;
extern int      MAmethod           = 0;
extern int      AppliedPrice       = 0;
extern double   DeviationPercent   = 0.06;
extern int      AlertCandle        = 0;
extern bool     ChartAlert         = true;
extern string   EmailSubject       = "";

double   ind_buffer0[], ind_buffer1[];

datetime alert_time;

//+------------------------------------------------------------------+
int init()  {
//+------------------------------------------------------------------+
  SetIndexBuffer(0,ind_buffer0);
  SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,White);
  SetIndexDrawBegin(0,0);

  SetIndexBuffer(1,ind_buffer1);
  SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,White);
  SetIndexDrawBegin(1,0);

 // alert_time = 2;
  return(0);
}

//+------------------------------------------------------------------+
int deinit()  {
//+------------------------------------------------------------------+
  return(0);
}

//+------------------------------------------------------------------+
int start()  {
//+------------------------------------------------------------------+
  // Plot envelopes.......
  if (LookbackCandles >= 0)   {
    for (int i=MathMin(Bars-MAperiod,LookbackCandles); i>=0; i--)   {
      ind_buffer0[i] = iEnvelopes(NULL,0,MAperiod,MAmethod,0,AppliedPrice,DeviationPercent,1,i);    
      ind_buffer1[i] = iEnvelopes(NULL,0,MAperiod,MAmethod,0,AppliedPrice,DeviationPercent,2,i);    
  } }    
  // Alerts.......
  double upper = iEnvelopes(NULL,0,MAperiod,MAmethod,0,AppliedPrice,DeviationPercent,1,AlertCandle);
  double lower = iEnvelopes(NULL,0,MAperiod,MAmethod,0,AppliedPrice,DeviationPercent,2,AlertCandle);
  if (Close[AlertCandle] > upper) 
  
  
   {
   // if (Time[0] > alert_time)
    if ( Al_upper_price_over==true)
    {
     // alert_time = Time[0];
      string alert_text = Symbol() + "," + TFToStr(Period()) + ":  Above upper envelope";
      if (ChartAlert)          Alert(alert_text);
      if (EmailSubject > "")   SendMail(EmailSubject, alert_text);
  } }
  if (Close[AlertCandle] < lower)
  if ( Alarm_lower_price_below==true)  {
   // if (Time[0] > alert_time)
     {
     // alert_time = Time[0];
      alert_text = Symbol() + "," + TFToStr(Period()) + ":  Below lower envelope";
      if (ChartAlert)          Alert(alert_text);
      if (EmailSubject > "")   SendMail(EmailSubject, alert_text);
  } }
  return(0);
}

string TFToStr(int tf)
//+------------------------------------------------------------------+
// Converts a MT4-numeric timeframe to its descriptor string
// Usage:   string s=TFToStr(15) returns s="M15"
{
  switch (tf)  {
    case     1 :  return("M1");
    case     5 :  return("M5");
    case    15 :  return("M15");
    case    30 :  return("M30");
    case    60 :  return("H1");
    case   240 :  return("H4");
    case  1440 :  return("D1");
    case 10080 :  return("W1");
    case 43200 :  return("MN");
  }  
  return("");
}  
 
RamsesBor:

Мужики помогите как убрать алерт в индекаторе? При пересечении линии пищит на каждое движение пипсов до того момента пока снова не уйдет за линию. Нужно сделать так чтобы индикатор пищал один раз при пересечении линии. В програмировании делаю первые шаги. вот код

Код нужно вставлять так: Правильно вставляем код на форуме (Ваше сообщение я исправил).
 
RamsesBor:

Мужики помогите как убрать алерт в индекаторе? При пересечении линии пищит на каждое движение пипсов до того момента пока снова не уйдет за линию. Нужно сделать так чтобы индикатор пищал один раз при пересечении линии. В програмировании делаю первые шаги. вот код

Добавьте переменную типа datetime. Перед вызовем функции Alert() проверяйте равна ли эта переменная Time[0]. Если не равно то вызывайте Alert() и переменной типа datetime присваивайте значение Time[0]

datetime TM;
.......

if (TM!=Time[0])
{
   TM=Time[0];
   Alert("...."); 
   .....
}
....

Тогда будет сигналить только при появлении нового бара.