Что за ошибка стандартного ZigZag?

 

В эксперте используется ZZ, периодически в логи выводится :

2007.10.22 15:06:37 Zigzag USDCHF,H1: uninit reason 1

Что бы это значило, откуда это? Нигде не нашел...

 
unint reason - это Причины деинициализации

Константа Значение Описание
0Скрипт самостоятельно завершил свою работу
REASON_REMOVE1Программа удалена с графика
REASON_RECOMPILE2Программа перекомпилирована
REASON_CHARTCHANGE3Символ или период графика был изменен
REASON_CHARTCLOSE4График закрыт
REASON_PARAMETERS5Входные параметры были изменены пользователем
REASON_ACCOUNT6Активирован другой счет

В вашем случае это сообщение о том, что Zigzag был удален с графика USDCHF H1.
 
Спасибо, хорошо что не ошибка) Устал код шерстить..)
 
Не дает мне покоя этот ZigZag, пытаюсь загнать в массив значения 10 последних вершин ZZ
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
 
int PrevTime=0;
 
int init()
 {
   return(0);
 }
 
int deinit()
 {
   return(0);
 }
 
int start()
 {
   int cnt1, cnt2=0;
   double ZZ_Mass[10][2],ZZ1,ZZ2;   
   
   if (iTime(NULL,0,0)>PrevTime)
   {
     PrevTime=iTime(NULL,0,0);
     for (cnt1=1;cnt1<iBars(NULL,0);cnt1++)
     {
       ZZ1=iCustom(NULL,0,"ZigZag",12,5,3,1,cnt1);
       ZZ2=iCustom(NULL,0,"ZigZag",12,5,3,2,cnt1);
       if (ZZ1!=0 && ZZ2!=0) Print ("~~~~~~~~~~~~~~~~~~~~~~ZZ1 = ", ZZ1, "  /  ZZ2 = ", ZZ2 );    
       if (ZZ1!=0)
       {       
         ZZ_Mass [cnt2][0]=ZZ1; ZZ_Mass [cnt2][1]=cnt1;
         cnt2++;
       }
       if (ZZ2!=0)
       {       
         ZZ_Mass [cnt2][0]=ZZ2; ZZ_Mass [cnt2][1]=cnt1;
         cnt2++;
       }
       if (cnt2==10) break;    
     }
     //for (cnt2=0; cnt2<10; cnt2++) Print ("----------------Вершина =", cnt2, " = ", ZZ_Mass [cnt2][0]);
   }
   return(0);
 }

Что-то снова делаю не так, ибо вылезает:

1) Каким-то образом на одном баре 2 вершины:

2007.10.26 18:57:41 2007.10.16 11:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1 = 1.4225 / ZZ2 = 1.4157
2007.10.26 18:57:41 2007.10.16 10:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1 = 1.4225 / ZZ2 = 1.4157
2007.10.26 18:57:41 2007.10.12 15:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1 = 1.4208 / ZZ2 = 1.4159
2007.10.26 18:57:41 2007.09.26 00:00 ZigZag EURUSD,H1: loaded successfully

2) По логики ZZ вершины должны чередоваться, т.е если 9>8 то 8<7, 7>6 .... или если 9<8 то 8>7, 7<6 и т.д., у меня снова не так:

2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =9 = 1.3848
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =8 = 1.3828
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =7 = 1.3893
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =6 = 1.3987

2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =5 = 1.3941
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =4 = 1.3935
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =3 = 1.4062
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =2 = 1.4098
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =1 = 1.4119
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =0 = 1.4042

Кто силен? Подскажите, где косяк? Или с ZZ не все так просто, как мне кажется?

Файлы:
testzz.mq4  2 kb
 
Figar0, код не соответствует тому, что ты показываешь. Поясни, пожалуйста, логику того, что сделано в коде, и что в нем должно выводиться. И еще: сравнивать лучше не напрямую с нулем, а, скажем, проверять, больше ли значение индикатора ZZ, чем 0.001.
Или с ZZ не все так просто, как мне кажется?
Ну да, не все так просто. Не всегда вершины чередуются (максимум - минимум - максимум - ...).
 
Mathemat:
Figar0, код не соответствует тому, что ты показываешь. Поясни, пожалуйста, логику того, что сделано в коде, и что в нем должно выводиться. И еще: сравнивать лучше не напрямую с нулем, а, скажем, проверять, больше ли значение индикатора ZZ, чем 0.001.
Или с ZZ не все так просто, как мне кажется?
Ну да, не все так просто. Не всегда вершины чередуются (максимум - минимум - максимум - ...).

Логика должна быть такая, при поступлении нового бара начинаем искать вершины начиная с 1го бара до тех пор пока не найдем 10 вершин или пока не иссякнут доступные бары, найденные значения вершин и номера баров в порядке нахождения заносятся в 2х мерный массив. Printы внесены для контроля и поиска ошибки. Вот и вся логика.

А это реальная ситуация когда вершины не чередуются? при визуальном контроле ZZ а том же интервале такого не наблюдается...

Изменение условия с ZZ!=0 на ZZ>0.0001 ничего не менят, хотя согласен, так вернее

 
Figar0:
Не дает мне покоя этот ZigZag, пытаюсь загнать в массив значения 10 последних вершин ZZ
Кто силен? Подскажите, где косяк? Или с ZZ не все так просто, как мне кажется?


Привет. Я делаю так. Функция ищет три последних вершины.

//-------------------------------------------------------------------+
// Функция Zigzag получает и заносит в массив данные 3-х последних   +
// вершин Зигзага                                                    +
//-------------------------------------------------------------------+
void Zigzag()
{
  int i,j;
  double zz;
  
  for(i=0,j=0;i<Bars && j<3;i++)
  {
    zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
    if(zz!=0)
    {
      zzbar[j]=i;
      zzp[j]=zz;
      j++;
    }
  }
  return;
}
 
Talex:


Привет. Я делаю так. Функция ищет три последних вершины.

Кажется и правда, что-то я перемудрил с буферами, так вроде работает как надо, если не важно какая вершина (верх/низ) ведь есть же нулевой буфер). Хоть ответ и лежал на поверхности - сам увидеть не мог)  СПАСИБО.
 
Figar0:
Не дает мне покоя этот ZigZag, пытаюсь загнать в массив значения 10 последних вершин ZZ
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
 
int PrevTime=0;
 
int init()
 {
   return(0);
 }
 
int deinit()
 {
   return(0);
 }
 
int start()
 {
   int cnt1, cnt2=0;
   double ZZ_Mass[10][2],ZZ1,ZZ2;   
   
   if (iTime(NULL,0,0)>PrevTime)
   {
     PrevTime=iTime(NULL,0,0);
     for (cnt1=1;cnt1<iBars(NULL,0);cnt1++)
     {
       ZZ1=iCustom(NULL,0,"ZigZag",12,5,3,1,cnt1);
       ZZ2=iCustom(NULL,0,"ZigZag",12,5,3,2,cnt1);
       if (ZZ1!=0 && ZZ2!=0) Print ("~~~~~~~~~~~~~~~~~~~~~~ZZ1 = ", ZZ1, "  /  ZZ2 = ", ZZ2 );    
       if (ZZ1!=0)
       {       
         ZZ_Mass [cnt2][0]=ZZ1; ZZ_Mass [cnt2][1]=cnt1;
         cnt2++;
       }
       if (ZZ2!=0)
       {       
         ZZ_Mass [cnt2][0]=ZZ2; ZZ_Mass [cnt2][1]=cnt1;
         cnt2++;
       }
       if (cnt2==10) break;    
     }
     //for (cnt2=0; cnt2<10; cnt2++) Print ("----------------Вершина =", cnt2, " = ", ZZ_Mass [cnt2][0]);
   }
   return(0);
 }

Что-то снова делаю не так, ибо вылезает:

1) Каким-то образом на одном баре 2 вершины:

2007.10.26 18:57:41 2007.10.16 11:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1 = 1.4225 / ZZ2 = 1.4157
2007.10.26 18:57:41 2007.10.16 10:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1 = 1.4225 / ZZ2 = 1.4157
2007.10.26 18:57:41 2007.10.12 15:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1 = 1.4208 / ZZ2 = 1.4159
2007.10.26 18:57:41 2007.09.26 00:00 ZigZag EURUSD,H1: loaded successfully

2) По логики ZZ вершины должны чередоваться, т.е если 9>8 то 8<7, 7>6 .... или если 9<8 то 8>7, 7<6 и т.д., у меня снова не так:

2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =9 = 1.3848
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =8 = 1.3828
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =7 = 1.3893
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =6 = 1.3987

2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =5 = 1.3941
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =4 = 1.3935
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =3 = 1.4062
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =2 = 1.4098
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =1 = 1.4119
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =0 = 1.4042

Кто силен? Подскажите, где косяк? Или с ZZ не все так просто, как мне кажется?


Привет.

А зачем так сложно все. Крутани ЗЗ в цикле с обратным отсчетом от 0 бара и запиши при ненулевых значениях ряд ЗЗ в массив или в 10 разных переменных типа ЗЗ1 ... ЗЗ10

Думаю такой код своять можно минут за 20. Попутного тренда и больших профитов.

 
Figar0:
Кажется и правда, что-то я перемудрил с буферами, так вроде работает как надо, если не важно какая вершина (верх/низ) ведь есть же нулевой буфер). Хоть ответ и лежал на поверхности - сам увидеть не мог) СПАСИБО.

Ты мог увидеть сам. Для этого всего лишь нужно было сделать буферы видимыми на графике. Это описывалось (с картинкой) вот в этой теме: Ищется быстрый ZigZag

 

Кто-нибудь может подсказать как его вообще использовать этот Zig-Zag? Я имею в виду не стратегию, а принцип. Вот это вот значение, которое мы получаем написав

ZZ1=iCustom(NULL,0,"ZigZag",12,5,3,1,cnt1);

Что оно показывает и что с ним  дальше делать? И какие там параметры?

Причина обращения: