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

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

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

  • Індикатор GZZ – блакитна лінія.
  • Індикатор GZZ вшитий в індикатор GZZA.

Червона вертикальна лінія – початок аналізованого ділянки. Другу червону лінію StopGZZ ми не бачимо, вона праворуч встановлена на 30.10.2009. Якщо на графіку немає лінії StopGZZ, то рахувати від StartGZZ до кінця вправо – до останнього завершеного променя (на ньому злам).

Збір статистичних даних розподіляється на кілька типів. Слідування за зламами GZZ to High Low / 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

Все вищенаведене це вихідна статистика по to High Low / 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. Кольори для інших ТФ задаються відповідним параметром.

Читай також: