Индикатор Gann Zig Zag

Сборщик статистики и первоочередного анализа данных по всевозможным изломам индикатора Ганн Зиг Заг (Gann ZigZag) или (GZZ), необходим для подсчета различных параметров за какой либо временной интервал и рассчитывает возможность возникновения предстоящих событий в будущем. В индикаторе Ганна информация выводится графически и в виде текстовых комментариев. Имеет несколько режимов подсчета. Остановимся подробнее на основном принципе в целом и разных в частности.

Анализируемый период задается рамками – вертикальными линиями с именами StartGZZ и StopGZZ. Исходный вид анализируемого участка:

  • Индикатор GZZ – голубая линия.
  • Индикатор GZZ вшит в индикатор GZZA.

Красная вертикальная линия – начало анализируемого участка. Вторую красную линию StopGZZ мы не видим, она справа установлена на 30.10.2009. Если на графике нет линии StopGZZ, то считать от StartGZZ до конца вправо – до последнего завершенного луча (на нем излом).

Сбор статистических данных распределяется на несколько типов. Следование за изломами GZZ Low to High / High to Low.

Красными линиями отмечены участки Low to High, синими High to Low. Касательно восходящих движений Low to High. Записывается информация о разнице в цене между экстремумами. Т.е. разница м/у концом красной линии и началом.
Также считается расстояние между экстремумами в свечах (время). Начало красной линии – нулевая свеча; конец красной линии n-свеча.

Для примера. Если движение всего 2 свечи, то расстояние между ними = 1 – первая свеча нулевая, следующая 1, за ней 2 и т.д.
Касательно нисходящих движений High to Low.

Записывается информация о разнице в цене между экстремумами. Т.е. разница м/у началом синей линии и ее концом.
Также считается расстояние между экстремумами в свечах (время). Начало красной линии – нулевая свеча; конец красной линии n-свеча.

Для примера. Если движение всего 2 свечи, то расстояние между ними = 1 – первая свеча нулевая, следующая 1, за ней 2 и т.д.
После подсчетов движений в заданном периоде имеем следующий массив данных. В пример приведен период на AUD/USD часовой — Н1 за октябрь месяц и число nZonesP = 10.

См. значение Price Range – разница в самой цене меж началом и соответственно концом луча.

  • Time – время в свечах между началом и концом луча.
  • Speed = Price Range / Time – скорость движения. Определяет сколько пунктов в среднем за свечу проходит цена на данном луче.
  • Total – всего восходящих лучей в анализируемом периоде.
  • MaxPrRange – максимальное значение разницы в цене из лучей в заданном диапазоне.
  • MaxTime – максимальное время луча из лучей в заданном диапазоне.
  • MidSpeed – средняя скорость луча. midSpeed = ?Speed / Total

Все вышеприведенное это исходная статистика по Low to High / High to Low. Вычисление интересующих нас величин. Ниже снимок экрана исходной статистики. Слева Статистика по цене / Статистика по времени – это для восходящих лучей. Справа для нисходящих.

Расчеты по цене

Логика дальнейших расчетов. Весь расчет основывается на сравнении полученных величин с максимальным значением. Точкой отсчета будет максимальное значение ценового диапазона из всех найденных лучей. В дальнейшем это значение делится на nZonesP — количество зон по Цене. От 0 до 100% это максимальное значение луча по Цене.

Остальные значения (меньшие лучи) находятся в этом диапазоне. Цель анализатора подсчитать какое количество лучей (за искомый период) закончилось в каждой из зон и вывести процентные соотношения для каждой из зон.

Зоны

Определимся с максимальным диапазоном цен луча. Максимальное значение = 100% для анализируемого массива это MaxPrRange. Чтобы получить nZonesP (количество зон по цене) в этом диапазоне, нужно разделить MaxPrRange на nZonesP.

В общем виде интервал одной зоны (ее размер) определяется по формуле:

ZrangeP = MaxPrRange/nZonesP – интервал зоны (размер по цене). В диапазоне от 0 до 100% этих интервалов может быть произвольное число, указанное в параметре nZonesP.

В общем виде границы i-ой зоны определяются следующим образом.
ZrangeP*(i-1) < Z (i) ? Zrange*i – i-ая зона находится в диапазоне большем, чем граница снизу и меньшем либо равном, чем граница сверху. Например Z1 – первая зона. Логично, что она находится в интервале больше 0 и меньше/равно Zrange*1

ZrangeP*(i-1) < Z (i) ? ZrangeP*(i)
или то же самое

ZrangeP*(1-1) < Z (1) ? ZrangeP*(1)
или то же самое

ZrangeP*(0) < Z (1) ? ZrangeP*(1)
Для зоны Z2

ZrangeP*(2-1) < Z (2) ? ZrangeP*(2)
И т.д. для зоны Z (i)

ZrangeP*(i-1) < Z (i) ? ZrangeP*(i)

В данном случае nZonesP= 10. Получаем ZrangeP = MaxPrRange/nZonesP = 0,00348 /10 = 0,00348 – это диапазон одной зоны.

Таким образом границы зон:

0 < Z1 ? 0,00348;
0,00348 < Z2 ? 0,00348*2
0,00348*2 < Z3 ? 0,00348*3
0,00348*3 < Z4 ? 0,00348*4
0,00348*4 < Z5 ? 0,00348*5
0,00348*5 < Z6 ? 0,00348*6
0,00348*6 < Z7 ? 0,00348*7
0,00348*7 < Z8 ? 0,00348*8
0,00348*8 < Z9 ? 0,00348*9
0,00348*9 < Z10 ? 0,00348*10

Kol_RazvP (i) — количество разворотов в i-ой зоне. Это абсолютный параметр говорит о том, какое количество лучей завершило свое движение в каждой зоне.
%_RazvP (i) – относительный показатель. Показывает сколько % лучей развернулось в каждой зоне.
%_RazvP (i) = Kol_RazvP (i) / (Total/100).
%_Ver_RazvP (i) — вероятность разворота в %. Этот показатель накапливающийся. Иными словами показывает сколько % лучей уже развернулось по пути к данной зоне + % лучей в данной i-ой зоне.
%_Ver_RazvP (i) = %_Ver_RazvP (i-1) + %_RazvP (i)
Например для зоны Z1:
%_Ver_RazvP (Z1) = %_Ver_RazvP*(1-1) + %_RazvP*(1)
Для зоны Z2
%_Ver_RazvP (Z2) = %_Ver_RazvP*(2-1) + %_RazvP*(2)
И т.д. для зоны Z (i):
%_Ver_RazvP (i) = %_Ver_RazvP (i-1) + %_RazvP (i)

Расчеты по времени.

Аналогичные формулы для расчетов по времени. Только теперь все считается по горизонтали.
На рисунках ниже видно, что особой разницы, вверх или вниз движется цена, не существует, т.к. анализируется в данном случае время, прошедшее относительно последнего излома.

Зоны 2

Определимся с максимальным диапазоном времени луча. Максимальное значение = 100% для анализируемого массива это MaxTime. Чтобы получить nZonesT (количество зон по времени) в этом диапазоне, нужно разделить MaxTime на nZonesT.

Интервал одной зоны

ZrangeT = MaxTime/nZonesT – интервал зоны (размер по времени). В диапазоне от 0 до 100% этих интервалов может быть произвольное число, указанное в параметре nZonesT.
В нашем примере nZonesT=10 поэтому получаем ZrangeT=MaxTime/nZonesT =51 / 10 = 5,1 – это диапазон одной зоны по времени.

Таким образом границы зон определяются:

ZrangeT*(i-1) < Z (i) ? ZrangeT*(i)
или то же самое для первой зоны Z1
ZrangeT*(1-1) < Z (1) ? ZrangeT*(1)

0 < Z1? 5,1;
5,1 < Z2 ? 5,1*2
5,1*2 < Z3 ? 5,1*3
5,1*3 < Z4? 5,1*4
5,1*4 < Z5 ? 5,1*5
5,1*5 < Z6 ? 5,1*6
5,1*6 < Z7 ? 5,1*7
5,1*7 < Z8 ? 5,1*8
5,1*8 < Z9 ? 5,1*9
5,1*9 < Z10 ? 5,1*10

Kol_RazvT (i) — количество разворотов в i-ой зоне. Это абсолютный параметр говорит о том, какое количество лучей завершило свое движение в каждой зоне.
%_RazvT (i) – относительный показатель. Показывает сколько % лучей развернулось в каждой зоне.
%_RazvT (i) = Kol_RazvP (i) / (Total/100).
%_Ver_RazvT (i) — вероятность разворота в %. Этот показатель накапливающийся. Иными словами показывает сколько % лучей уже развернулось по пути к данной зоне + % лучей в данной i-ой зоне.
%_Ver_RazvT (i) = %_Ver_RazvT (i-1) + %_RazvT (i)
Исходя из количества зон, изменяется количество столбцов с именем Z1, Z2, Z3 … Z10… Z (i)

Все вышеизложенное представляет интерес в следующем виде на графике. По достижении ценой определенной зоны, рисуются ее границы верхняя и нижняя (ограничивается прямоугольником по аналогии со скриптом AT&C) и выводится комментарий. До тех пор, пока луч не завершился (т.е. не образовался переломом луча в противоположную сторону), он является активным и по нему считается статистика. В данном случае нисходящий луч.

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

  • Красные линии и комментарии – зона вероятности разворота по цене. P=61% — вероятность.
  • Синие линии и комментарии – зона вероятности разворота по времени. Т=43% — вероятность.

Также необходимо рассчитать общую вероятность разворота. В комментарии это РТ=52%. Отображается черным цветом. Подсчитывается очень просто.
РТ=([%_Ver_RazvP(i)] +[%_Ver_RazvT(i)]) / 2
([Вероятность образования перелома в текущей зоне по цене] + [вероятность образования перелома в текущей зоне по времени]) / 2
Данные по скорости изменения цены.
Show Speed = true/false – показывать/не показывать линии скорости.

  • Зеленая линия – средняя скорость изменения цены (среднеарифметическая).
  • Красная линия – максимальное значение скорости изменения цены.
  • Синяя линия – минимальное значение скорости изменения цены.

На данном рисунке не размещены комментарии и уровни в углу экрана. Подразумевается, что они есть. Смысл данного рисунка — отображение линий скорости изменения цены. По сути – это математически расчитанные углы Ганна.

Примечания.
1. Исходная статистика сохранятся в .csv файле по каждому инструменту, на который устанавливался индикатор. Имя файла в папке с индикатором, например AUDUSD60up.csv – подсчеты для восходящей тенденции; AUDUSD60dn.csv – для нисходящей.
Способ хранения исходных данных наглядно представлен на рисунке

Файл является актуальным до тех пор, пока линия/линии с именами StartGZZ и StopGZZ находятся на прежних местах (это отмечается в файле), а также не изменен GSv_range (также отмечается в файле) или параметр nZonesP и nZonesT.
2. Решен вопрос и по принудительному перелому луча индикатора GannZigZag от сигнальной линии, от которой будет производиться расчет текущего положения цены.


Индикатор считает вероятность разворота от последнего излома, но как видно цена уже успела сходить и вниз, и потом опять пошла вверх. А трейдеру, допустим, интересно проанализировать последнее движение вниз (от экстремума, где находится конец луча).
Значит необходимо разместить там линию с именем dn – пунктирная синяя линия. Почему dn? Чтобы индикатор определил, в какую сторону анализировать движение цены (от максимума, где находится линия к минимуму образованному ценой справа от линии). Для анализа вверх задается имя up.


3. Предусмотрена возможность отображения зигзагов от старших ТФ.
При этом статистика берется ТОЛЬКО по ТФ на котором установлен GZZA – рабочем ТФ.

Изгибы зигзагов от старших ТФ отображаются на графике как представлено на рисунке.
Красный – от ТФ Daily Синий – от ТФ Н4
Оранжевый – от ТФ Н1 (это рабочий ТФ — текущий)
В данном примере цвета линий не принципиальны.

-=Основные параметры=-

  • GSv_range = 3 – период индикатора GZZ. По умолчанию =3.
  • nZonesP = 50 – количество зон, на которое делить максимальное значение луча по Цене.
  • nZonesT = 30 – количество зон, на которое делить максимальное значение луча по Времени.
  • Show Speed = true/false – показывать/не показывать линии скорости.
  • Show Zone = true/false – показывать/не показывать зону вероятности. Обозначается бледно розовым прямоугольником. Его границы слева и справа – зона во времени, сверху и снизу – зона по цене.

Show VQuad = true/false – показывать/не показывать квадрат вероятности (все зоны) с описанием вероятности разворота в каждой. Таким образом мы имеем «сетку вероятностей». По умолчанию =false... Начало отсчета – последний образовавшийся излом.
На данной картинке «вырезан» кусок экрана с сеткой вероятностей.


-=GannZigZag’s=-

Show H1 = true/false – показывать/не показывать зигзаги от ТФ Н1, если он является старшим, а рабочий фрейм меньший. Например рабочий фрейм m15 и на нем мы видим зигзаги соответствующие m15. Но если мы захотим увидеть на ТФ m15 зигзаги от ТФ Н1, то нужно будет включить параметр Show H1 = true. При этом если рабочий ТФ Н1, то на него не влияет переключатель true/false, т.к. этот ТФ является рабочим.

Color H1 = — задает цвет зигзага для ТФ Н1.
Show H4 = true/false – показывать/не показывать зигзаги от ТФ Н4, если он является старшим, а рабочий фрейм меньший. По аналогии с предыдущим описанием выше.

Color H4 = — задает цвет зигзага для ТФ Н4.
Show D1 = true/false – показывать/не показывать зигзаги от ТФ D1, если он является старшим, а рабочий фрейм меньший. По аналогии с предыдущим описанием выше.

Color D1 = — задает цвет D1.
Show W1 = true/false – показывать/не показывать зигзаги от ТФ W1, если он является старшим, а рабочий фрейм меньший. По аналогии с предыдущим описанием выше.

Color W1 = — задает цвет зигзага для ТФ W1.
Show MN = true/false – показывать/не показывать зигзаги от ТФ MN, если он является старшим, а рабочий фрейм меньший. По аналогии с предыдущим описанием выше.

Color MN = — задает цвет зигзага для ТФ MN.
Если включен ТФ не из перечисленных выше, например мельче Н1 (м15, м5, м1), то цвет линии зигзага DeepSkyBlue. Цвета для остальных ТФ задаются соответствующим параметром.

Статья: Индикатор Gann Zig Zag