Помогите с ЗигЗагом...

 

Я в ступоре... Хочу определить несколько последних экстремумов обычного ZigZag'а:

HandleZig = iCustom(Symbol(),PERIOD_CURRENT,"Examples\\ZigZag");

Затем получаю в массив Zig, например, последние 10 ячеек буфера индикатора:

CopyBuffer(HandleZig,0,0,10,Zig)

Смотрю полученные данные в массиве и не пойму, то все нули при имеющихся вершинах, то проскакивают вершины, но совсем не последние...

Просто таким же образом нахожу вершины Fractals и проблем нет...

Как образуются данные в буфере ЗигЗага? Что должно появлятся в нулевой ячейке, первой, второй и т.д.? 

 
Doozer2:

Я в ступоре... Хочу определить несколько последних экстремумов обычного ZigZag'а:

Затем получаю в массив Zig, например, последние 10 ячеек буфера индикатора:

Смотрю полученные данные в массиве и не пойму, то все нули при имеющихся вершинах, то проскакивают вершины, но совсем не последние...

Просто таким же образом нахожу вершины Fractals и проблем нет...

Как образуются данные в буфере ЗигЗага? Что должно появлятся в нулевой ячейке, первой, второй и т.д.? 

а код по фракталам можно? 

ЗЫ, строятся именно вершины, стало быть в первой ячейке может быть вершина а может быть пусто.  

 

Проще использовать ZigzagColor.  

ZigzagPeakBuffer и ZigzagLawnBuffer - High и low. Соответственно, есть значение - экстремум.


 
Doozer2:

Я в ступоре... Хочу определить несколько последних экстремумов обычного ZigZag'а:

Затем получаю в массив Zig, например, последние 10 ячеек буфера индикатора:

Смотрю полученные данные в массиве и не пойму, то все нули при имеющихся вершинах, то проскакивают вершины, но совсем не последние...

Просто таким же образом нахожу вершины Fractals и проблем нет...

Как образуются данные в буфере ЗигЗага? Что должно появлятся в нулевой ячейке, первой, второй и т.д.? 

Конструкция которую вы описали запрашивает не 10 последних вершин зигзага, а значение зигзага на 10 последних барах.  То есть на всех этих 10 барах он может быть равен 0. Не нулю он равен на том баре где есть вершина. Так вершины и ищут: запрашивают побольше баров, потом перебирают их и смотрят где не 0.


По фракталам вы скорее всего тоже не правильно запрограммировали, там принцип поиска фрактала точно такой же как в зигзаге, но с небольшим уточнением: бар, на котором нет фрактала будет иметь не нулевое значение, а EMPTY_VALUE, (эта такая константа, которой отмечают пустые индикаторные значения(как правило)). 



И еще, если вы рассматриваете отсчет баров справа налево то перед записью значений индикаторов в массивы, сами массивы нужно подготовить, а именно

double Zig[];
ArraySetAsSeries(Zig,true);
 

Я в курсе всего этого, иначе бы мой вопрос был бы в ветке для начинающих...

Вот простой текст:

input int      Z1 = 12;
input int      Z2 = 5;
input int      Z3 = 3;

int      HandleZig;
double   Zig[10];

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void OnInit()
{
   HandleZig = iCustom(Symbol(),PERIOD_CURRENT,"Examples\\ZigZag",Z1,Z2,Z3);
   if(HandleZig < 0) { Print("Ошибка при создании индикатора ZigZag ",Symbol()," - номер ошибки: ",GetLastError()); return; }

   ArraySetAsSeries(Zig,true);

   return;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void OnTick()
{
   if(CopyBuffer(HandleZig,0,0,10,Zig) != 10) { Print("CopyBuffer ERROR"); return; };
   
   Comment("Zig[0] = ",Zig[0],"   Zig[1] = ",Zig[1],"   Zig[9] = ",Zig[9]);
   
   return;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 Для контроля просматриваю ячейки Zig. Там появляются то нули, то в нулевой ячейке непонятные вершины.

Сами проверьте, не пойму в чём дело... 

 

вы объявляете массив

double   Zig[10];

Я же написал как это делается.. Размерность не надо указывать.. просто

double   Zig[];


И в итоге получится значение зигзага на 10 барах, а не 10 вершин

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
_Techno_:

вы объявляете массив

Я же написал как это делается.. Размерность не надо указывать.. просто


И в итоге получится значение зигзага на 10 барах, а не 10 вершин

Я проверил, разницы нет.
 

Отправте скрин графика с зигзагом, и то что отображается в инфе
 
Doozer2:

...Там появляются то нули, то в нулевой ячейке непонятные вершины...

Вообще, когда этой темой занимался, пришел к выводу, что зигзаг вытаскивает значения вершин из буфера каким-то алгоритмом в коде,

т. е., значения буфера - это не конечный результат, а промежуточный, для расчетов, собственно экстремумов.

 

Я тоже так думаю. Как тогда использовать стандартный Зигзаг в эксперте?

Может подскажите другой Зигзаг, где экстремумы нормально выводятся в буфер, подобно фракталам... 

 
Doozer2:

Я тоже так думаю. Как тогда использовать стандартный Зигзаг в эксперте?

Может подскажите другой Зигзаг, где экстремумы нормально выводятся в буфер, подобно фракталам... 

вы скрин отправите, или ответ не нужен на вопрос ?