В данной статье описывается создание надежного индикатора SuperTrend на MQL5 с использованием полос на основе ATR, механизма фиксации полосы и строгого соблюдения индексации как в таймсериях, что позволяет избежать скрытых ошибок рекурсивного расчета и перерисовки на закрытых барах. Мы рассмотрим привязку буферов, управление хэндлом индикатора ATR, задание начальных значений и логику подтверждения стрелок. Сопутствующий торговый советник (EA) демонстрирует практическую интеграцию
SuperTrend — яркий пример классического проекта, над которым работают по выходным: два разработчика могут получить одинаковые технические задания, но в итоге создать совершенно разные реализации. Эта концепция хорошо известна и основана на подходе с использованием полос волатильности (как в каналах Кельтнера или полосах Боллинджера). Однако вместо статической огибающей вокруг цены отображается одна линия, которая располагается то по одну, то по другую сторону от цены в зависимости от направления тренда. Эта концепция сочетает в себе показатель ATR (средний истинный диапазон) с механизмом фиксации — принципом механизма фиксации полосы. Эту логику можно реализовать примерно в двадцати строках кода.
Перерисовка может быть вызвана несколькими различными причинами:
изменением текущего формирующегося бара, что нормально и ожидаемо;
изменением закрытых баров из-за ошибки управления состоянием — именно этому посвящена данная статья;
реальной утечкой данных из будущего, которая представляет собой отдельную и более серьезную проблему.
Более тонкая проблема, характерная для SuperTrend, заключается в том, что значения полос рассчитываются рекурсивно, поэтому каждый бар зависит от сохраненного состояния предыдущего бара. Верхняя полоса текущего бара зависит от верхней полосы и цены закрытия предыдущего бара. Это означает, что бар i нельзя рассчитать изолированно: необходимо знать корректное состояние бара i−1 (или i+1 при индексации как в таймсериях). Поэтому направление обхода в цикле должно соответствовать способу индексации массивов (как в таймсериях или обычному); иначе рекурсивный расчет на исторических данных может незаметно нарушиться.
Опубликована статья Создание пользовательских индикаторов для начинающих (Часть 1): Индикатор SuperTrend:
SuperTrend — яркий пример классического проекта, над которым работают по выходным: два разработчика могут получить одинаковые технические задания, но в итоге создать совершенно разные реализации. Эта концепция хорошо известна и основана на подходе с использованием полос волатильности (как в каналах Кельтнера или полосах Боллинджера). Однако вместо статической огибающей вокруг цены отображается одна линия, которая располагается то по одну, то по другую сторону от цены в зависимости от направления тренда. Эта концепция сочетает в себе показатель ATR (средний истинный диапазон) с механизмом фиксации — принципом механизма фиксации полосы. Эту логику можно реализовать примерно в двадцати строках кода.
Перерисовка может быть вызвана несколькими различными причинами:
Более тонкая проблема, характерная для SuperTrend, заключается в том, что значения полос рассчитываются рекурсивно, поэтому каждый бар зависит от сохраненного состояния предыдущего бара. Верхняя полоса текущего бара зависит от верхней полосы и цены закрытия предыдущего бара. Это означает, что бар i нельзя рассчитать изолированно: необходимо знать корректное состояние бара i−1 (или i+1 при индексации как в таймсериях). Поэтому направление обхода в цикле должно соответствовать способу индексации массивов (как в таймсериях или обычному); иначе рекурсивный расчет на исторических данных может незаметно нарушиться.
Автор: Syed Jawad Hussain Naqvi