Поиск единого для двух индикаторов ZigZag экстремума в советнике

 

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

Я не могу найти программно в функции поиск общего экстремума на одном баре (0 экстремум - "висячий"). 

Помогите, пожалуйста.

 

Если программно не получается, поищите вручную ))

Ну а по сути: "общий экстремум" - это максимум и минимум на одном баре? Насколько я помню, в ZigZag такое невозможно. Покажите на скрине пример такого "общего экстремума".

 
Ihor Herasko #:

Если программно не получается, поищите вручную ))

Ну а по сути: "общий экстремум" - это максимум и минимум на одном баре? Насколько я помню, в ZigZag такое невозможно. Покажите на скрине пример такого "общего экстремума".

нет, у меня два ZZ,  два индикатора.. Два пика имел ввиду на одном баре или две впадины и присваивать экстремум в переменную double и время в datetime переменную

 

для меня ZZ самый непривычный индикатор, в цикле i = № это номер узла, где 0 незавершенный, а 1 это не прошлый бар, а прошлый сформированный уже узел, но мне нужен 0, но сходящий оба пика или дна в одном экстремуме

 
Desperate #:

для меня ZZ самый непривычный индикатор, в цикле i = № это номер узла, где 0 незавершенный, а 1 это не прошлый бар, а прошлый сформированный уже узел, но мне нужен 0, но сходящий оба пика или дна в одном экстремуме

Как раз наоборот. В цикле производится перебор именно баров по индексам. Причем экстремум будет не на  каждом баре. Поэтому задача сводится к тому, чтобы перебрать в цикле бары и узнать, на каких из них есть экстремумы ZZ. Когда экстремум найден, определяется его тип: максимум или минимум. Это если стандартный ZZ. А вот с ZZColor даже немного проще, т. к. там для максимумов и минимумов определены отдельные буферы. Но для программного поиска ZZColor - излишен, достаточно стандартного ZZ.

Если нужно найти два совпадающих экстремума от копий индикатора с разными параметрами, то реализация та же самая: ведем поиск по барам до тех пор, пока не найдем одинаковый тип экстремума от двух ZZ на одном баре.

 
Ihor Herasko #:

Как раз наоборот. В цикле производится перебор именно баров по индексам. Причем экстремум будет не на  каждом баре. Поэтому задача сводится к тому, чтобы перебрать в цикле бары и узнать, на каких из них есть экстремумы ZZ. Когда экстремум найден, определяется его тип: максимум или минимум. Это если стандартный ZZ. А вот с ZZColor даже немного проще, т. к. там для максимумов и минимумов определены отдельные буферы. Но для программного поиска ZZColor - излишен, достаточно стандартного ZZ.

Если нужно найти два совпадающих экстремума от копий индикатора с разными параметрами, то реализация та же самая: ведем поиск по барам до тех пор, пока не найдем одинаковый тип экстремума от двух ZZ на одном баре.

Спасибо, я видимо совсем попутал все с этим ZZ )

Простите за наглость, однако, не могли бы вы подсказать, как реализовать этот момент в онтик ?

 
Desperate #:

Спасибо, я видимо совсем попутал все с этим ZZ )

Простите за наглость, однако, не могли бы вы подсказать, как реализовать этот момент в онтик ?

Я так понял, Вы уже пытались это делать. Можете привести отрывок кода, в котором производите поиск двух одинаковых экстремумов? По коду и будет понятно, что делаете не так.

 
Ihor Herasko #:
если стандартный ZZ. А вот с ZZColor даже немного проще, т. к. там для максимумов и минимумов определены отдельные буферы

Практика показала, что оба "зигзага" не вполне зигзаги. У ZZ могут встретится две вершины на одном баре но в разных буферах;

у обоих вершина может не быть экстремумом (например быть выше предыдущей и ниже следующей, эдак посередине)

вручную это просто вызывает эмоции, а для робота это смерть

 
Ihor Herasko #:

Я так понял, Вы уже пытались это делать. Можете привести отрывок кода, в котором производите поиск двух одинаковых экстремумов? По коду и будет понятно, что делаете не так.

Я с психу стер, не могу именно тот код восстановить Ctrl+Z. Да функция у меня на новом баре вызывалась просто в onTick(), но функция была простой, там просто использовались 4 глобальные переменные 2 ценовые переменные статические и 2 временные статические переменные. и в цикле искал с for( i = 0; i < 30; i++) { поиск пиков на одном баре, ниже поиск впадин на одном баре и записывал это в переменные}.. А, ну и в начале перед циклом копирование заданние массива как временного ряда и копирование буферов

 
Господа, мне только это нужно сейчас, найти бар в котором оба пика||дна сходятся. Если иные вопросы будут, то я для этого другую тему создам. Спасибо заранее!
 

Что-то вроде такого (подразумевается, что в OnInit получены хендлы на каждый из ZZ, в коде они названы nHandleZZ1 и nHandleZZ2):

int nTotal = iBars(NULL, PERIOD_CURRENT);
double arrfZZ1[1], arrfZZ2[1];
double fDelta = Point() / 10.0;
for (int i = 0; i < nTotal; ++i)
{
   if (CopyBuffer(nHandleZZ1, 0, i, 1, arrfZZ1) <= 0)
   {
      // ошибка
   }
  
   if (arrfZZ1[0] == 0.0)
        continue;


   if (CopyBuffer(nHandleZZ2, 0, i, 1, arrfZZ2) <= 0)
   {
      // ошибка
   }

   if (arrfZZ2[0] == 0.0)
        continue;

   if (fabs(arrfZZ1[0] - arrfZZ2[0]) < fDelta)
   {
      Print("Общий экстремум ", arrfZZ1[0], ", время: ", iTime(NULL, PERIOD_CURRENT, i));
      break;
   }
}