Dinapoli Zig Zag - кто подскажет с кодом?

 

Здравствуйте!

Пытаюсь поставить звуковой сигнал на ZZ Dinapoli, чтобы он сигналил при появлении новой линии, но не получается.

То не сигналит вообще, то сигналит на каждом баре...:(

Посмотрите код плиз - может у кого-то появятся "светлые мысли"... Я уже выдохлась с идеями...

//+------------------------------------------------------------------+
//| Dinapoli ZZ (ZigZag).mq4 |
//| rewritten by CrazyChart |
//| |
//+------------------------------------------------------------------+
#property copyright "rewritten by CrazyChart"
#property link ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//---- input parameters
extern int barn=500;
extern int Length=6;
extern int SoundON=1; // 0=false 1=true
//---- buffers
double ExtMapBuffer1[];
static datetime lastbar;
bool NewBar;
//double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
  SetIndexEmptyValue(0,0.0);
  //SetIndexDrawBegin(0, barn);
  SetIndexStyle(0,DRAW_SECTION);
  SetIndexBuffer(0,ExtMapBuffer1);
   
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
  {

  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
  {
  int counted_bars=IndicatorCounted();
  if (counted_bars < 0)
  return (-1);
   
  int shift,Swing,Swing_n,uzl,i,zu,zd,mv;
  double LL,HH,BH,BL,NH,NL; 
  double Uzel[10000][3]; 
  string text;
// loop from first bar to current bar (with shift=0) 
  Swing_n=0;Swing=0;uzl=0; 
  BH =High[barn];BL=Low[barn];zu=barn;zd=barn; 

for (shift=barn;shift>=0;shift--) { 
  LL=10000000;HH=-100000000; 
  for (i=shift+Length;i>=shift+1;i--) { 
  if (Low[i]< LL) {LL=Low[i];} 
  if (High[i]>HH) {HH=High[i];} 
  } 


  if (Low[shift]<LL && High[shift]>HH){ 
  Swing=2; 
  if (Swing_n==1) {zu=shift+1;} 
  if (Swing_n==-1) {zd=shift+1;} 
  } else { 
  if (Low[shift]<LL) {Swing=-1;} 
  if (High[shift]>HH) {Swing=1;} 
  } 

  if (Swing!=Swing_n && Swing_n!=0) { 
  if (Swing==2) {
  Swing=-Swing_n;BH = High[shift];BL = Low[shift]; 
  } 
  uzl=uzl+1; 
  if (Swing==1) {
  Uzel[uzl][1]=zd;
  Uzel[uzl][2]=BL;
  } 
  if (Swing==-1) {
  Uzel[uzl][1]=zu;
  Uzel[uzl][2]=BH; 
  } 
  BH = High[shift];
  BL = Low[shift]; 
  } 

  if (Swing==1) { 
  if (High[shift]>=BH) {BH=High[shift];zu=shift;}} 
  if (Swing==-1) {
  if (Low[shift]<=BL) {BL=Low[shift]; zd=shift;}} 
  Swing_n=Swing; 
  } 
  for (i=1;i<=uzl;i++) { 
  //text=DoubleToStr(Uzel[i][1],0);
  //text=;
  mv=StrToInteger(DoubleToStr(Uzel[i][1],0));
  ExtMapBuffer1[mv]=Uzel[i][2];
  } 

  bool NewBar=isNewBar();
  if (SoundON==1 && ExtMapBuffer1[1] != EMPTY_VALUE && NewBar)
  {
  PlaySound("alert.wav");
  }

  return(0);
  }
  
  bool isNewBar()
  {
  
  datetime curbar = Time[0];
  if(lastbar!=curbar)
  {
  lastbar=curbar;
  return (true);
  }
  else
  {
  return(false);
  }
}  
  
  
//+------------------------------------------------------------------+

 
Надо циклом проходить от первого бара влево как будет найдено значение не равное 0 - запомнить время, это будет время конца зигзага, если на следующем баре время изменилось, значит сигналим.
 
Integer >>:
Надо циклом проходить от первого бара влево как будет найдено значение не равное 0 - запомнить время, это будет время конца зигзага, если на следующем баре время изменилось, значит сигналим.

Простите, я в программировании пока на самом начальном уровне... 

Подскажите, пожалуйста, какая функция определяет время, когда значение не равно нулю? И время текущего бара - как его определить?

 
ElenD писал(а) >>

Простите, я в программировании пока на самом начальном уровне...

Подскажите, пожалуйста, какая функция определяет время, когда значение не равно нулю? И время текущего бара - как его определить?

https://docs.mql4.com/ru/series/iTime

 
ElenD писал(а) >>

Простите, я в программировании пока на самом начальном уровне...

Подскажите, пожалуйста, какая функция определяет время, когда значение не равно нулю? И время текущего бара - как его определить?

static datetime lt=0;

for(int i=1;i<Bars;i++){

   if(ExtMapBuffer1[i]!=0){

      if(lt!=Time[i]{

         PlaySound(...);

         lt=Time[i]

      }

      break;

   }  

}
 
To   DDFedor  и  Integer  - спасибо за помощь!
 

ОГРОМНОЕ СПАСИБО!!! РАБОТАЕТ!

Я еще Alert добавила, чтобы писал на какой паре и в какое время был сигнал:)

 
ElenD писал(а) >>

ОГРОМНОЕ СПАСИБО!!! РАБОТАЕТ!

Я еще Alert добавила, чтобы писал на какой паре и в какое время был сигнал:)

поделитесь пож. индикатором.

 
Пытаюсь поставить звуковой сигнал на ZZ Dinapoli как и вы, но чего-то не получается подскажите как вы это сделали
Причина обращения: