18+
реклама
18+
Бургер менюБургер меню

Ярослав Суков – Структура против Хаоса: Трендовый индикатор ZigZag (страница 3)

18

1. Запустите классический (перерисовывающийся) ZigZag на исторических данных.

2. Найдите все случаи, когда он перерисовал вершину (удалил старый пик и поставил новый выше).

3. Проанализируйте, какие паттерны (объем, свечной анализ, FVG) предшествовали такому перерисовыванию.

Результат: Вы получите вероятностный фильтр. Вы узнаете, что когда цена формирует локальный пик, а объем падает на 30% — вероятность перерисовки (т.е. ложного пробоя) составляет 82%. И вы не будете входить в сделку против этого.

Перерисовка — это не ошибка Бога. Это его подсказка о неуверенности толпы.

Для читателя, который хочет прямо сейчас применить знания:

1. Определите свой горизонт:

- Если держите позицию от 2 часов до 2 дней: возьмите `Depth = ATR(14) * 0.618` на H1.

- Если держите позицию от 10 минут до 2 часов: возьмите `Depth = 12 пунктов` на M15 для EURUSD.2.

Выберите тип ZigZag:

- Для ручного входа с подтверждением от FVG: используйте классический (перерисовывающийся), но только для анализа завершенных сессий.

- Для советника/робота: используйте non-repainting с `backstep = 3`.3.

Проверьте чувствительность:

Если количество вершин за 100 баров > 15 — вы слишком мелки.

Если < 3 — вы слишком крупны.4.

Интеграция с FVG: Ищите Fair Value Gaps только на сегментах между противоположными вершинами ZigZag.

Если FVG находится внутри звена импульса — он имеет высокую вероятность закрытия.

Если FVG находится в зоне перерисовки (вершина индикатора смещается) — игнорируйте его как ложный.

Итоги: (Для коучей и инженеров)

| Понятие | Метафора | Итог |

| `Depth` (минимальное движение) | Крупность сита для просеивания муки | Определяет, что для вас «шум», а что «тренд» |

| Перерисовка | Индикатор-хамелеон, меняющий цвет прошлого | Если вы человек — учитесь на перерисовке. Если вы алгоритм — избегайте её через `backstep` |

| Non-repainting | Фотография, сделанная с задержкой | Цена детерминизма — отставание на несколько баров. Приемлемая цена |

ГЛАВА 3. Математика и алгоритм: Как рождается скелет рынка

До сих пор мы говорили о ZigZag как о магическом фильтре. Теперь мы засучим рукава и разберем его алгоритмическую плоть.

Если вы не программист — не бойтесь. Я проведу вас через формулы так, что вы почувствуете логику каждой цифры.

Если вы программист — вы получите готовый псевдокод для имплементации.

Центральная истина главы: ZigZag — это не просто линии. Это дискретизация времени по ценовому признаку. Он превращает непрерывный поток тиков в конечный набор значимых событий.

В математической статистике экстремум — это точка, в которой функция достигает максимума или минимума на заданном интервале. В мире цен (дискретный временной ряд) экстремум — это бар, чей High выше, чем у `k` соседей слева и `k` соседей справа, при условии ценового отступа.

Формальное определение (строгое)

Пусть `P_high[i]` — максимальная цена бара `i`. Бар `i` является локальным максимумом для параметра `K` (радиус поиска, обычно `K = 2` или `K = 3`), если:

P_high[i] >= P_high[i-1], P_high[i-2], ..., P_high[i-K]

И

P_high[i] >= P_high[i+1], P_high[i+2], ..., P_high[i+K]

Однако этого недостаточно для ZigZag. Мы добавляем условие значимости: разница между этим кандидатом и предыдущим зафиксированным экстремумом должна быть не меньше заданного порога `Depth`.

Алгоритм пошагово (упрощенная логика, не перерисовывающаяся версия)

Вход: Ценовой ряд bars[0..N-1], параметры:

- depth (минимальное изменение цены в абсолютных единицах или процентах)

- backstep (количество баров для подтверждения)

Выход: Массив вершин ZZ (каждая вершина: индекс бара, цена, тип (High/Low))

Инициализация:

last_extremum = bars[0] // первый бар как начальная точка

last_type = (bars[0].high - bars[0].low > 0 ? 'high' : 'low') // условно

Для i от 1 до N-1:

// Поиск кандидата на High

если last_type == 'low' (мы ищем следующий High):

ищем бар j в интервале [i, min(i+backstep, N-1)] с максимальным High

если найденный High - last_extremum.price >= depth:

добавляем вершину (High) в массив

last_extremum = (High, j)

last_type = 'high'

i = j + 1 // смещаемся после найденной вершины

иначе:

// продолжаем поиск, расширяя окно до тех пор, пока не накопится движение

// (реализуется через скользящий максимум)

// Симметрично для Low

Ключевой момент: Экстремум не фиксируется, пока не пройдет `backstep` баров без его побития. Это и есть устранение перерисовки.

Реальный пример на гипотетических данных

Бар | High | Low | Примечание

1 | 100 | 99 | Начало

2 | 102 | 101 |

3 | 105 | 104 | Кандидат в High (локальный пик)

4 | 104 | 103 |

5 | 103 | 102 |

6 | 107 | 106 | Новый кандидат — он выше 3, значит 3 отбрасывается