Исправить Alert для параболика

 

Здравствуйте! Обращаюсь с просьбой к знатокам добавить сигнальный блок в коде параболика (звенит когда попало, т.е. не тогда, когда надо). Надо:

1. Переход параболика НАД первой свечой = 1 сигнал (Alert("UP")) на закрытие этой свечи на текущем таймфрейме.

2. Переход параболика ПОД первую свечку = 1 сигнал (Alert("DOWN")) на закрытие этой свечи на текущем таймфрейме.

3. Без звонков при переключении таймфреймов.

У самого знаний не хватает. Помогите пожалуйста с кодом.

#property indicator_chart_window     
#property indicator_buffers 1
#property indicator_color1 Green
extern double step = 0.1;
extern double AFmax = 0.2;
extern bool Sound=true;
extern string Sound_Type="alert.wav";
int gi_92 = 1;
double gd_96;
double gd_104;
double gd_112;
double g_ibuf_120[];
int k,k1;

int init()
{
   SetIndexStyle(0, DRAW_ARROW,EMPTY,0,Green); 
   SetIndexArrow(0, 159); 
   SetIndexBuffer(0, g_ibuf_120);
   return (0);
}
int deinit() {
   return (0);
}
switch
int start()
{
k1=k;
   for (int li_0 = Bars - 2; li_0 >= 0; li_0--)  
    {
        if (li_0 == Bars - 2)
           {
            g_ibuf_120[li_0] = Low[li_0] - 10.0 * Point;
            gi_92 = 1;
            gd_96 = step;
            gd_104 = High[li_0];
            gd_112 = Low[li_0];
           }
         else
           {
            if (Close[li_0] > gd_104)
              {
                gd_104 = Close[li_0];
                if (gi_92 == 1 && gd_96 <= AFmax - step)
                    gd_96 += step;
                k=1;
              }          
            if (Close[li_0] < gd_112)
              {
                gd_112 = Close[li_0];
                if (gi_92 == -1 && gd_96 <= AFmax - step)
                    gd_96 += step;
                k=2;
              }
            if (gi_92 == 1)
                g_ibuf_120[li_0] = g_ibuf_120[li_0 + 1] + gd_96 * (gd_104 - (g_ibuf_120[li_0 + 1]));
            else
                g_ibuf_120[li_0] = g_ibuf_120[li_0 + 1] + gd_96 * (gd_112 - (g_ibuf_120[li_0 + 1]));
      
            if ((g_ibuf_120[li_0 + 1] < Close[li_0 + 1] && g_ibuf_120[li_0] > Close[li_0]) || (g_ibuf_120[li_0 + 1] > Close[li_0 + 1] && g_ibuf_120[li_0] < Close[li_0]))
              {
                gd_96 = step;
                if (gi_92 == 1)
                    g_ibuf_120[li_0] = gd_104;
                else
                    g_ibuf_120[li_0] = gd_112;
               gd_112 = Close[li_0];
               gd_104 = Close[li_0];
               gi_92 = -1 * gi_92;
             }
          }
    }
if(k1!=k)
  {

   if(Sound==true)
      PlaySound(Sound_Type);
      Alert("crossing"," ",Symbol()," ",Period());
  }   
   return (0);
}
 
Мне знаний не хватает поправить этот, а тот, что по ссылке немного отличается в показаниях. Боюсь скажется на результатах. Но все равно спасибо за желание помочь! :)
 
toha153:
Мне знаний не хватает поправить этот, а тот, что по ссылке немного отличается в показаниях. Боюсь скажется на результатах. Но все равно спасибо за желание помочь! :)
Файлы:
 

Спасибо! Не могли бы Вы подправить, как понимаю, эти строчки, что бы сигналило не при открытии свечи, а на ее закрытии?

if(pre_signal >= 0 && g_ibuf_120[1]<Close[1] && g_ibuf_120[0]>Close[0])  // для селлов
if(pre_signal <= 0 && g_ibuf_120[1]>Close[1] && g_ibuf_120[0]<Close[0] )  // для баев
 
if(pre_signal <= 0 && g_ibuf_120[2]>Close[2] && g_ibuf_120[1]<Close[1] )
 
Спасибо за помощь! Пока работает нормально!
Причина обращения: