Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 6
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Практически каждый метод, основанный на структуре рынка, начинается с одного и того же вопроса: какие максимумы и минимумы действительно имеют значение? Все последующее — структура рынка, BOS и CHoCH, блоки ордеров, уровни ликвидности — строится на основе ответа на этот единственный вопрос, поэтому выбранное вами определение определяет, что будет видно в ходе остального анализа.
Существует несколько распространенных способов ответить на этот вопрос. Наиболее известен паттерн из 3 свечей (фрактал): свеча, максимум которой выше максимумов обеих соседних свечей, является максимумом колебания. Этот подход симметричен, прост в расчёте и используется большинством индикаторов колебаний. Другие расширяют окно до 5 или 7 свечей либо фильтруют кандидаты по минимальному движению в пунктах или по ATR.
Этот индикатор использует другое определение — определение отката, применяемое в Trading Hub 3.0. Вместо того чтобы спрашивать, выше ли свеча соседних, он проверяет, вернулась ли цена и отклонила ли эту свечу. Максимум становится свинг-максимумом только после того, как рынок вновь пробивает минимум той свечи, которая его сформировала. Ничто не определяется формой; всё определяется тем, как ведёт себя цена впоследствии.
Практическое отличие заключается в следующем: фрактал описывает геометрию, а откат — событие. Поскольку откат является событием, он также указывает, когда колебание стало действительным — и именно эта временная метка делает возможной реализацию без перерисовки.
Как работает правило
Детектор никогда не ищет обе стороны одновременно. Он ищет по одной стороне за раз и хранит ровно три элемента информации:
| Состояние | Значение |
|---|---|
| Направление | какая сторона в данный момент ищется — высокая или низкая |
| Отслеживаемое экстремальное значение | самый высокий максимум (или самый низкий минимум), зафиксированный на данный момент в текущем отрезке |
| Ориентир | противоположный край свечи, сформировавшей данное экстремум |
Ориентир — это важная часть. Когда свеча устанавливает новый максимальный максимум, эта же свеча также определяет уровень, который позже подтвердит его: свой собственный минимум. Цена должна вернуться ниже этого минимума, чтобы максимум считался действительным.
Интерпретация рисунка:
- A — начинается импульс. Отслеживаемый максимум и эталонный минимум относятся к одной и той же свече.
- B — каждый последующий более высокий максимум заменяет оба значения. Максимум пока остается предварительным; ничего не отмечается.
- C — свеча, наконец, торгуется ниже контрольного минимума. Это откат, и он подтверждает отслеживаемый максимум как колебательный максимум.
- D — подтверждающая свеча немедленно инициирует поиск минимума по аналогичной схеме: отслеживается самый низкий минимум, ориентиром служит его максимум, прорыв выше подтверждает его.
Поскольку подтверждение одной стороны всегда переключает поиск на другую, колебательные максимумы и минимумы чередуются автоматически. Для этого не существует отдельного правила, и не проводится сравнение с предыдущими колебаниями.
Правила, свеча за свечой
При закрытии каждой свечи детектор задает два независимых вопроса: установила ли эта свеча новый экстремум? и пробила ли она ориентир? Возможны четыре комбинации в каждом направлении.
| # | Текущий тренд | Текущая свеча | Действие 1 | Действие 2 |
|---|---|---|---|---|
| 1 | В поисках МАКСИМУМА | Внутренний бар — нового максимума нет, контрольный минимум сохраняется | ничего | ничего |
| 2 | Ожидается МАКСИМУМ | Новый максимум, контрольный минимум сохраняется | отслеживаемый максимум = максимум этой свечи | базовый минимум = минимум данной свечи |
| 3 | Ищем МАКСИМУМ | Прорыв — нет нового максимума, но торгуется ниже контрольного минимума | подтвердить отслеживаемый максимум как максимум колебания | переключение на МИНИМУМ: отслеживаемый минимум = минимум данной свечи, эталонный максимум = максимум данной свечи |
| 4 | Ищем МАКСИМУМ | Внешний бар — новый максимум и пробой контрольного минимума | подтвердить максимум этой же свечи как максимум колебания | переключение на НИЗ: отслеживаемый минимум = минимум данной свечи, эталонный максимум = максимум данной свечи |
| 5 | Ищем М ИНИМУМ | Внутренний бар — нет нового минимума, эталонный максимум сохраняется | ничего | ничего |
| 6 | Ищем М ИНИМУМ | Новый минимум, референтный максимум сохранен | отслеживаемый минимум = минимум этой свечи | референтный максимум = максимум данной свечи |
| 7 | Ищем М ИНИМУМ | Прорыв — нет нового минимума, но цена торгуется выше контрольного максимума | подтвердить отслеживаемый минимум как минимум колебания | переход к МАКСИМУМУ: отслеживаемый максимум = максимум данной свечи, эталонный минимум = минимум данной свечи |
| 8 | Ищем М ИНИМУМ | Внешний бар — новый минимум и пробой контрольного максимума | подтвердить минимум данной свечи в качестве минимума колебания | переключение на HIGH: отслеживаемый максимум = максимум данной свечи, опорный минимум = минимум данной свечи |
Строки 1–4 и 5–8 являются точным зеркальным отражением, поэтому весь алгоритм занимает всего несколько десятков строк.
Редкий случай: свеча, пробивающая в обоих направлениях
Строки 4 и 8 заслуживают отдельного пояснения. Обычно свеча либо продлевает тренд, либо пробивает отсчетный уровень. Внешняя свеча может делать и то, и другое одновременно — она устанавливает новый максимум и торгуется ниже отсчетного минимума в пределах одной и той же свечи.
В этом случае оба правила претендуют на неё, и они противоречат друг другу. Рассматривая её как продолжение, мы упускаем реальный прорыв; рассматривая её как прорыв, мы подтверждаем максимум, который эта самая свеча уже превысила.
Решение заключается в том, чтобы считать саму свечу колебанием:
- её собственный максимум подтверждается как максимум колебания — а не более старый отслеживаемый максимум, который она только что преодолела.
- Затем эта же свеча открывает противоположный отрезок: отслеживаемый минимум становится её минимумом, а контрольный уровень — её максимумом.
Таким образом, одна свеча несет в себе и максимум колебания, и начало нисходящего участка. На графике это отображается в виде маркеров выше и ниже одного и того же бара с вертикальным участком между ними — что именно и произошло внутри этой свечи.
This is also why the legs are drawn as trend-line objects rather than a DRAW_SECTION buffer. A section plot stores one value per bar and could not hold two points on the same candle.
Она не перерисовывается
Отслеживаемый экстремум является предварительным и никогда не рисуется. Свинг наносится на график только на той свече, которая его подтверждает, и после нанесения он никогда не сдвигается, не перекрашивается и не удаляется. Оцениваются только закрытые свечи; формирующаяся свеча полностью игнорируется.
Компромисс очевиден и заслуживает упоминания: задержка подтверждения. Новейший свинг появляется только после прорыва, который его подтверждает. Если вам нужен маркер в тот самый момент, когда фиксируется новый максимум, этот инструмент вам не подойдет — такой маркер пришлось бы перемещать позже, а это и есть перерисовка.
Параметры
Обнаружение
| Входные данные | По умолчанию | Как работает |
|---|---|---|
| Начните с поиска | Поиск максимума колебания | В какую сторону ищет самый первый отрезок. Это влияет только на самые старые бары на графике; после первого подтверждения направление полностью определяется пробоями. Не трогайте этот параметр, если только первый свинг в вашей истории не выглядит неверным. |
| Прорыв подтверждается | «Wick» | «Wick» использует максимум/минимум свечи — буквальное правило Trading Hub и более чувствительную настройку. «Close» требует, чтобы свеча закрылась за отметкой, что игнорирует однократные «проколы» фитиля и дает заметно меньше, но более крупных колебаний. |
Как выбрать: начните с «Wick». Если вы работаете на таймфреймах M1–M15 или с инструментом с длинными «шумными» фитилями, таким как золото или CFD на индекс, переключитесь на «Close» — это устраняет большинство колебаний, вызванных единичным всплеском, не изменяя логику в остальном. Ещё один способ получить более крупную структуру — использовать более высокий таймфрейм; у самого правила нет настроек чувствительности или периода, которые нужно регулировать.
Отображение
| Входные данные | По умолчанию | Что делает |
|---|---|---|
| Рисует маркеры колебаний | true | Включает или выключает стрелки. Буферы остаются заполненными в любом случае, поэтому iCustom по-прежнему возвращает каждый размах. |
| Код стрелки — пик/минимум колебания | 217 / 218 | Коды шрифта Wingdings. Распространённые альтернативы:234/233,241/242, 159 для точек. |
| Расстояние от стрелки до шкалы | 10 | Расстояние в пикселях между свечой и стрелкой. Увеличивайте его на плотных графиках. |
| Рисовать отрезки между колебаниями | true | Пунктирная линия зигзага, соединяющая последовательные колебания. Отключите эту опцию, если у вас уже нарисован зигзаг. |
| Цвет / стиль / ширина отрезков | серебристый, пунктирный, 1 | Внешний вид отрезков. |
Отключение как маркеров, так и линий оставляет чисто вычислительный объект — это полезно, когда советник считывает буферы, а на графике ничего отображать не нужно.
Оповещения
| Входные данные | По умолчанию | Что это делает |
|---|---|---|
| Всплывающее оповещение о подтвержденном колебании | false | Всплывающее окно в терминале при подтверждении колебания. |
| Push-уведомление о подтверждённом колебании | false | Отправляется на MetaQuotes ID, заданный в меню «Инструменты» → «Настройки» → «Уведомления». |
Сигналы срабатывают только при обновлении данных в реальном времени, никогда — во время загрузки исторических данных индикатором, и только один раз за каждый свинг.
Использование в советнике
Два буфера, оба из которых не пусты только при подтвержденных колебаниях (пустое значение — 0,0):
| Буфер | Содержимое |
|---|---|
| 0 | цена подтверждённого максимума колебания |
| 1 | цена подтвержденного минимума колебания |
int h = iCustom(_Symbol, _Period, "SMC_Pullback"); double buf[]; CopyBuffer(h, 0, 0, 100, buf); // максимумы колебаний
Механизм обнаружения реализован в одном автономном классе CPullbackDetector, не зависящем ни от графика, ни от буфера — он принимает массивы цен и сообщает о подтвержденных колебаниях, поэтому его можно скопировать прямо в советник, если вы предпочитаете не использовать iCustom.
Чего он сознательно не делает
Этот индикатор останавливается на точках колебаний. Он не помечает HH/HL/LH/LL и не вычисляет BOS, CHoCH, IDM, блоки ордеров или уровни ликвидности. Это отдельные этапы, для которых сначала требуется надёжный набор колебаний — а именно это и предоставляет данный индикатор.
Проект поддерживается на MQL5 Algo Forge. Код и будущие обновленияможно найти по ссылке ниже.
Репозиторий находится здесь: https://forge.mql5.io/SandroBegashvil/SMC-Pullback-CodeBase
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/76451
SuperTrend Indicator
Пользовательский индикатор SuperTrend, созданный с нуля, сочетающий в себе полосу волатильности на основе ATR с механизмом «трещотки» для построения четкой линии тренда, не подверженной перерисовке. Управление внутренним рекурсивным состоянием осуществляется с помощью надлежащим образом зарегистрированных буферов вычислений, что позволяет избежать ошибок потери состояния, характерных для реализаций с массивами, управляемыми вручную. Из серии статей «Создание пользовательских индикаторов для начинающих».
Fisher Transform Indicator
Осциллятор на основе преобразования Фишера, построенный с учетом основных статистических принципов: цена нормализуется в ограниченный диапазон, после чего к ней применяется логарифмическое преобразование, что позволяет получать четкие и ясно выраженные сигналы разворота вместо постепенных изменений тренда, характерных для традиционных осцилляторов. Внутреннее рекурсивное состояние обрабатывается с помощью специальных буферов вычислений, что обеспечивает надёжную и корректную работу при тестировании на исторических данных. Из серии статей «Создание пользовательских индикаторов для начинающих».
PropFirm Equity Protector — Institutional Risk Manager (с открытым исходным кодом)
Профессиональный утилитарный советник (EA) для управления рисками в проп-фирмах. Он обеспечивает ежедневный мониторинг собственного капитала, поэтапное снижение рисков по убыточным позициям и абсолютные жесткие стоп-лимиты с помощью самовосстанавливающейся графической панели управления.
YURAZ_MCCH
Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.




