Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Левитин Сергей В.
5163
Левитин Сергей В.  

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

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

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

Rashid Umarov
Админ
12400
Rashid Umarov  
unint reason - это Причины деинициализации

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

В вашем случае это сообщение о том, что Zigzag был удален с графика USDCHF H1.
Левитин Сергей В.
5163
Левитин Сергей В.  
Спасибо, хорошо что не ошибка) Устал код шерстить..)
Левитин Сергей В.
5163
Левитин Сергей В.  
Не дает мне покоя этот 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
Sceptic Philozoff
Модератор
17841
Sceptic Philozoff  
Figar0, код не соответствует тому, что ты показываешь. Поясни, пожалуйста, логику того, что сделано в коде, и что в нем должно выводиться. И еще: сравнивать лучше не напрямую с нулем, а, скажем, проверять, больше ли значение индикатора ZZ, чем 0.001.
Или с ZZ не все так просто, как мне кажется?
Ну да, не все так просто. Не всегда вершины чередуются (максимум - минимум - максимум - ...).
Левитин Сергей В.
5163
Левитин Сергей В.  
Mathemat:
Figar0, код не соответствует тому, что ты показываешь. Поясни, пожалуйста, логику того, что сделано в коде, и что в нем должно выводиться. И еще: сравнивать лучше не напрямую с нулем, а, скажем, проверять, больше ли значение индикатора ZZ, чем 0.001.
Или с ZZ не все так просто, как мне кажется?
Ну да, не все так просто. Не всегда вершины чередуются (максимум - минимум - максимум - ...).

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

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

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

Александр
1080
Александр  
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;
}
Левитин Сергей В.
5163
Левитин Сергей В.  
Talex:


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

Кажется и правда, что-то я перемудрил с буферами, так вроде работает как надо, если не важно какая вершина (верх/низ) ведь есть же нулевой буфер). Хоть ответ и лежал на поверхности - сам увидеть не мог)  СПАСИБО.
Vladimir
183
Vladimir  
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. Попутного тренда и больших профитов.

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

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

Gobo
43
Gobo  

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

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

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий