Алгоритм(ы) ZZ

Тема в разделе "3. - зиг-заги", создана пользователем wellx, 6 дек 2006.

  1. wellx

    wellx Активный пользователь

    В данной ветке предлагаю описать что означают переменные в заг-заге, какие могут быть варианты работы индикатора, и , попытаться сформулировать алгоритм работы зигзага для последующего создания нормального индикатора ЗЗ для МТ и других платформ. дабы появилась общая точка отсчета для создания МТС.

    Собственно сам вопрос возник при попытке переноса и оптимизации "классического" ЗЗ для МТ4. Его недостатки известны: нагружает процессор, тройной пробег при каждом тике всей истории , невнятное описание принципа работы, недокументированный код и т.д

    Некоторые вещи исправил nen в индикаторе ZUP. Но все равно остались вопросы по логике работы.

    Итак , начнем:
    Здесь прикрепляю рисунок схему зигзага.
    Хотелось бы услышать от сообщества как правильно привязать переменные ЗЗ к указанным отрезкам и вершинам:
    - Depth
    - Deviation
    - Backstep

    ZZ.jpg
     
  2. nen

    nen Профи форума

    Идея алгоритм зигзага, поставляемого с метатрейдером, не плохая. Но не реализована до конца. Из-за ошибок этого зигзага много нареканий на его работу.

    Расчет зигзага за три прохода нагружает процессор. Отказываться от трехпроходного алгоритма сейчас не стоит. На рынке много неопределенности. И каждое последующее движение часто отменяет действия, вызванные предыдущими движениями. Соответственно, требует пересчета ...

    Трехпроходность вызывает нарекания в основном из-за нагрузки на процессор. Элегантное решение по уменьшению нагрузки на процессор предложил micmed. Его предложение заключается в том, чтобы не пересчитывать зигзаг, когда цена перемещается внутри нулевого бара. Только когда цена вышла за хай или лоу нулевого бара требуется пересчет. А также при появлении нового бара. Этот алгоритм сейчас реализован в 51 версии ZUP. Нагрузка на процессор уменьшилась значитьльно. Сейчас почти любое количество экземпляров ZUP в режиме поиска паттернов Gartley почти не тормозит компьютер.
     
  3. wellx

    wellx Активный пользователь

    Для начала приведем текст описания индикатора от Метаквотов:
    Попытаемся понять:
    это, я так понимаю, про Deviation. Но тут уже есть проблема то пункты, то проценты. судя по коду - пункты.

    Далее :
    У Роша есть пояснение :
    И сразу вопрос : в первом случае Depth это по сути кол-во баров слева от текущего, но по Рошу это число и слева и справа от вершины (низа).
    как правильно?
    Далее:
    Тут мне понять трудновато. Т.е. . например,как на рисунке , разность между вершинами 3 и 5 должна быть меньше Deviation? тогда вершина 5 может быть отрисована? или перемещена с позиции 3 на позицию 5? И, почти последнее преположение, данный постулат сильнее того что уже отрисовался низ 4 и он будет вычеркнут при переносе вершины из 3 в 5?
    Или я чего-то тут не понял.
     
  4. wellx

    wellx Активный пользователь

    Это здорово. Да, а отдельный ЗЗ в виде ЗЗ-nen-XX с исправлениями будет? Дабы не лопатить всего монстра 51 го ? ;)
     
  5. nen

    nen Профи форума

    Давай сначала обсудим здесь идеи зигзага. Возможно, найдем свой алгоритм зигзага. Есть что сказать. Часа через три напишу.
     
  6. wellx

    wellx Активный пользователь

    ОК, сразу пара проблем , принципиальных.
    - Начальный алгоритм определения верха - низа, на внешнем баре, порядок опредения тренда для выявления первой начальной вершины (низа).
    - все таки опять про поглощение вершины или низа при переносе вершины (низа). Насколько определившаяся точка перелома значима, можно ли ее удалять. ( В принципе можно сделать это одной из опций, важно лишь понимать, что и зачем делаем).
     
  7. nen

    nen Профи форума

    Приведу кусочек кода, реализующий предложение micmed'a.

    // Объявление переменных в начальном блоке, где объявляются все переменные

    double h0Bar, l0Bar; // переменные для хая и лова нулевого бара
    datetime t0Bar; // переменная для записи времени открытия нулевого бара

    // следующие две строчки вставляются перед основным циклом расчета индикатора

    if (l0Bar<=Close[0] && h0Bar>=Close[0] && t0Bar==Time[0]) return(0);
    else {l0Bar=Low[0]; h0Bar=High[0]; t0Bar=Time[0];}

    Есть вариант:

    if (l0Bar<=Low[0] && h0Bar>=High[0] && t0Bar==Time[0]) return(0);
    else {l0Bar=Low[0]; h0Bar=High[0]; t0Bar=Time[0];}
     
  8. nen

    nen Профи форума

    Есть два варианта прорисовки зигзага на графике.
    1) Используя один индикаторный буфер. Так реализовано в метатрейдеровском зигзаге.
    2) Используя два индикаторных буфера. Отдельно для вершин и впадин зигзага.

    Первый вариант ущербный. При поиске вершин и впадин часто возникают ситуации, когда и вершина, и впадина будут найдены на одном баре. Этот бар называется внешним. То есть предшествующие этому бару один или несколько баров имеют хаи и ловы меньше хая и больше лова нашего внешнего бара.

    При нахождении вершины и впадины на одном баре в метатрейдеровском зигзаге оставляется только вершина. При этом получаются подряд несколько вершин. И зигзаг рисует эти вершины. Еще их называют горбы.
    Нужен еще один просчет зигзага для удаления этих горбов. При этом могут удалиться значимые вершины. И мы теряем счет вершин. Для волновой разметки, например, это не есть гуд.

    При втором варианте прорисовки зигзага вершины и впадины, найденные на одном баре, не теряются. При этом варианте можно создавать не только зигзаг, но индикатор, выводящий полноценные свинги Ганна. Сейчас свинги, частично реализующие свинги Ганна, в ZUP строятся по первому варианту. Свинги, реализованные в ZUP, из-за этого несколько ущербные.
     
  9. nen

    nen Профи форума

    В ZUP используется первый вариант построения зигзагов на графике. Так получилось. Исторически.
    Второй вариант вывода, как мне кажется, использует Profi_r в своем известном индикаторе при построении свингов Ганна. Но мне, к сожалению, не попадался индикатор Profi_r полностью отлаженный. В его индикаторе есть ошибка.
    Также по второму варианту сейчас реализовал зигзаг Николай Косицын (файл в аттаче). За основу ZigZag_new_nen3 был взят зигзаг Николая Косицына (ник Godzilla), но реализованный по первому варианту вывода. Сейчас Николай сделал версию с двумя буферами и выложил его на сайте <span class='inv'><![CDATA[<noindex>]]></span><a href="http://articles.mql4.com/139" target="_blank"><a href="http://articles.mql4.com/139" target="_blank"><a href="http://articles.mql4.com/139" target="_blank"><a href="http://articles.mql4.com/139" target="_blank"><a href="http://articles.mql4.com/139" target="_blank"><a href="http://articles.mql4.com/139" target="_blank"><a href="http://articles.mql4.com/139" target="_blank"><a href="http://articles.mql4.com/139" target="_blank"><a href="http://articles.mql4.com/139" target="_blank"><span class='inv'><![CDATA[<noindex>]]></span><a href="http://www.onix-trade.net/forum/go.php?http://articles.mql4.com/139" rel="nofollow" target="_blank">http://articles.mql4.com/139<span class='inv'><![CDATA[</noindex>]]></span><span class='inv'><![CDATA[</noindex>]]></span></a></a></a></a></a></a></a></a></a></a>
    В обоих вариантах Николая есть ошибка, не исправленная им в метатрейдеровском зигзаге. За основу его зигзага взят метатрейдеровский зигзаг. Ошибка - переломы зигзаг иногда рисует в воздухе. Николай посчитал, что так должно быть. Но разбор алгоритма зигзага, сделанный в ветке Gartley Patterns... , убедил меня, что это - ошибка. Эту ошибку попытался прошедшим летом исправить, кажется, Слава - программист из Метаквотес, один из разработчиков метатрейдера. К сожалению, его вариант перестал в некоторых случаях выводить зигзаг на график.
     

    Вложения:

    • ZigZag_NK.mq4
      Размер файла:
      8,9 КБ
      Просмотров:
      438
  10. nen

    nen Профи форума

    Еще один принципиальный момент хочу здесь затронуть.
    Часто бывает у нескольких расположенных рядом баров одинаковые хаи или ловы. Если зигзаг находит вершину на одном из этих хаев или впадину на одном из этих ловов, то вершина или впадина обязательно должны быть на первом по времени баре.
     
  11. wellx

    wellx Активный пользователь

    Могу уточнить: это одно и тоже, в Мт используют три буфера, с последующим слиянием. именно в алгоритме слияния и видны косяки.
    IMHO. но это лишь проблема реализации МТ. Здесь есть три варианта проблемы:
    - если внешний бар расположен в первых depth барах истории. Тут требуется принять решение о порядке вычисления начальной точки в зависимости от последующей истории. Но уж никак не волевым методом типа если что не так то главное верхнее значение.
    - как отрисовать такую ситуацию если примем возможным ситуацию когда между противоположными вершинами допустимо нулевое значение. Как вариант рисовать другиую вершину на соседнем баре (за неименеем лучшего).
    - это вообще не проблема , т.к. выбор точки отрисовки зависит от предыдущей истории.( Если был низ, то на этом баре выбираем верх и т.д.).
    IMHO. это лечится строгим условием чередования верх/низ.
     
  12. wellx

    wellx Активный пользователь

    Есть подозрение что это не ошибка индикатора или реализации, а самой формулировки индикатора. Попытаюсь объяснить: представим, что вершина 5 из верхнего рисунка находится на расстоянии меньшем depth, тогда ее не надо рисовать. Но в процессе перехода к вершине 6 может нарисоваться некий локальный хай для которого вершина 5 на глубину depth есть максимальная вершина и отстоит от 3 на величину большую depth. потому и рисует в воздух. Вопрос в том, правильно ли так делать и так понимать работу ЗЗ?
     
  13. nen

    nen Профи форума

    Это не одно и то же. Для прорисовки зигзага используется один или два буфера.
    Если используется один буфер, то нет возможности свинги Ганна создать. Если два, то есть возможность. Свинги Ганна часто рисуют вершину и впадину на одном баре. Обычный зигзаг на это не способен. Впрочем, я описал это выше.

    В МТ используется не три, а два буфера. И один из этих буферов используется для вывода зигзага. А второй вспомогательный. Вариант два предполагает использование двух буферов для вывода линии зигзага на график. В этом варианте оба буфера основные. Нет вспомогательных.

    Три буфера использовано в ZUP. На момент начала создания ZUP так виделось оптимально.
     
  14. nen

    nen Профи форума

    Это будет уже не зигзаг. А что-то, напоминающее по форме зигзаг.
     
  15. wellx

    wellx Активный пользователь

    А что такое ЗЗ? ;) :)

    А если серьезно, то если не чередование , то тогда что? Рисуем горбы? насчет 2 или 3 буфера - согласен, формально в Мт 2 буфера, но пытаются их использовать как три, создавая лишнюю сущность и внося путаницу. в нен3 это выведено в нормальный вид.

    З.Ы. интересно, кому-нибудь вообще интересно то что обсуждаем здесь вдвоем? Ведь по сути, пытаемся понят основу всей деятельности ZUP'a .....
     
  16. nen

    nen Профи форума

    Зигзаг нужен, чтобы уловить все существенные пики и впадины.
    Если задача получить чередование пиков и впадит, то будут пропущены существенные точки, на которые многие оринтируются при торговле. Я сейчас на КПК просто визуально выделяю последние пики и впадины. Строю от них фибы. И цена удивительным образом ходит четко по фибам. Иногда чередования пиков и впадин нет. И пик, и впадина находятся на одном баре. Нельзя такие ситуации исключать.
     
  17. Putnik_odessa

    Putnik_odessa Профи форума

  18. wellx

    wellx Активный пользователь

    ОК, ЗЗ это чередование существенных пиков и впадин. Если они выпадают на один бар, то это тоже ОК, просто частный случай для backstep=0 , как отрисовывать это уже вторично. Я все больше прихожу к выводу, что значимы 2 параметра - depth & deviation.
     
  19. tovaroved

    tovaroved Профи форума

    можно проще:
    Код:
    bool newb()  {static int knw; if (Time[0]==knw) return(false); knw=Time[0]; return(true); }
    использую примерно так:

    Код:
    int start(){ 
    	 if(newb()){ //новый бар возник
    		  ZZ_calc(Bars,1); //   пересчитаем
    	 }else{
    		  return(0); //ни чего не надо - выходим
    	 }
    }
    т.е. здесь нулевой бар вообще не используется.

    кстати, большое спасибо за компанию в Москве! ;)
    хороший пример показываешь своим отношением к жизни..


    приехал домой отдохнувший, не смотря на 17 часов на плацкарте и разборки с пограничниками... :)
     
  20. nen

    nen Профи форума

    Товаровед, твой кусочек кода позволяет рассчитывать зигзаг (и любой другой индикатор) один раз на бар на первом тике бара. Но здесь есть маленькая некорректность. Все-таки на нулевом баре на первом тике идет расчет. А надо, в некоторых случаях, значения цены на нулевом баре вообще исключать из расчета.

    Это необходимо учитывать при исключении из расчета нулевого бара.

    Для зигзага, на мой взгляд, можно оставлять расчет и на нулевом баре с условием пересчета при выходе цены за минимум или максимум бара. При этом будем получать в реальном времени значение максимума или минимума, если они изменились. Все равно этот минимум или максимум будет найден, если не рассчитывать нулевой бар, на первом тике следующего бара. Но с потерей во времени.
     

Поделиться этой страницей