Помещу здесь цитату с сайта
]]>]]>http://codebase.mql4.com]]>]]> с кратким описанием индикатора ZigZag.
ZigZag отслеживает и соединяет между собой крайние точки графика отстоящие друг от друга не менее чем на заданный процент по шкале цены.
Depth это минимальное кол-во баров, на котором не будет второго максимума (минимума) меньше (больше) на Deviation пипсов, чем предыдущего, то есть расходиться ZigZag может всегда, а сходится (либо сдвинуться целиком) больше, чем на Deviation, ZigZag может только после Depth баров. Backstep это минимальное количество баров между максимумами (минимумами).
После того, как ZigZag зафиксировал нижнюю точку, он начинает искать точку разворота до тех пор, пока откат вниз от максимального значения не превысит параметра. Как только откат вниз превысит параметр, вторая (в нашем случае верхняя точка считается зафиксированной) и ZigZag начинает искать третью (в нашем случае нижнюю точку) и так далее.
Это описание авторов ZigZag. Противоречивое описание. Даже из этого описания не следует, что где-то в коде присутствует
заданный процент. Всего три параметра задаются. И ни один параметр не имеет отношения к процентам. Также и в коде индикатора имеется путаница...
Backstep - странный параметр. Когда подробно разбирался с формированием точек перелома в ZigZag, выяснилось, что на некоторых барах он формирует (при начальном поиске пиков) и максимум и минимум. (Такая ситуация может возникнуть во время выхода серьезных новостей.) А далее просто поступает. Выбирает на данном баре максимум. И все. Поэтому иногда он может показать подряд два максимума без минимума между ними.
Вот кусочек кода:
for(shift=Bars-1; shift>=0; shift--)
{
if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
else
{
res=ExtMapBuffer2[shift];
if(res!=0.0) ExtMapBuffer[shift]=res; }
}
ExtMapBuffer - массив минимумов
ExtMapBuffer2 - массив максимумов.
Это последние строчки индикатора. И здесь видно, что если есть максимум на баре, то он просто переписывается в массив с минимумами. И потом массив ExtMapBuffer выводится в виде зигзага на график.
Для чего пишу об этом? Присутствует большое сомнение, что стандартный ZigZag правильно работает. Поэтому в ZUP и были вставлены два альтернативных ZigZag-a.
В авторском описании есть слова: Backstep это минимальное количество баров между максимумами (минимумами).
Но в коде индикатора в начальном цикле расчета минимумы и максимумы рассчитываются независимо. Параметр Backstep никак не вяжется с тем, что говорят авторы.
Для себя делаю такой вывод из всего выше сказанного. Авторы стандартного зигзага до конца не понимали, что делают. Поэтому и получился индикатор, вызывающий много вопросов. Такое ощущение, что создавался индикатор мимоходом, в перерыве между какими-то другими делами.
=========================
И второй - главный вывод. Надо сделать зигзаг, точно соответствующий описанию. Авторскому описанию.
=========================
Putnik задает параметры ZigZag: 21-13-34.
Возникает вопрос. А что они означают, эти параметры? 13 - показывает, что на количестве баров равном Depth не будет второго максимума меньше чем на 13 пипсов (тоже самое и для минимумов). Числа 21-13-34 взяты из ряда Фибоначчи. Но смысл.... Ладно бы эти числа (все) означали количество баров. Но ведь здесь смесь из баров и пипсов.
Наверное, из-за непонимания, как работает ZigZag (стандартный) и возникают непонятки с его применением...
=========================
Зная все выше сказанное, испытываю большой дискомфорт, когда появляется необходимость сделать что-то на основе стандартного ZigZag.
DT-ZigZag создан на основе стандартного ZigZag. Есть еще мультитаймфреймовый ZigZag - #MTF_Zigzag.mq4. Он также берет данные из стандартного. ZigZag-ов сделано большое количество. Большинство - на основе стандартного.
В ZUP ZigZag Алекса - оригинальная разработка Александра. Он лишен недостатков стандартного. Но и алгоритм несколько другой. Его алгоритм основан на определении отклонения средней цены бара на заданную величину. И у него, кстати, есть возможность построения ZigZag-a при изменении цены на заданный процент. Чего нет в стандартном, хотя и заявлено. Но ZigZag должен исследовать максимумы и минимумы баров, а не среднюю величину бара. В этом заложен немного спорный момент.
ZigZag подобный применяемому в Ensign - моя разработка. Во многом по мотивам Алекса сделан. В нем еще один алгоритм, отличается и от стандартного и от Алекса. Здесь основа алгоритма взята из определения тренда. С некоторыми доработками... Но он не до конца отлажен. Говорю об этом, чтобы была полная ясность. Не отлажен момент определения перелома. Перелом определяется после закрытия бара. И здесь нет четкости в алгоритме. При работе в реальном времени. На истории - работает нормально. А в реальном времени на последних барах может неправильно прорисовываться. Но не часто. Кто работает с индикатором, наверное,заметили. При переводе на другой таймфрейм и обратно - картинка становится нормальная.
=================================