English Deutsch 日本語
preview
Разработка инструментария для анализа Price Action (Часть 58): Модуль анализа сжатия диапазона и классификации зрелости

Разработка инструментария для анализа Price Action (Часть 58): Модуль анализа сжатия диапазона и классификации зрелости

MetaTrader 5Тестер |
304 0
Christian Benjamin
Christian Benjamin

Содержание



Введение

Одно из самых надежных наблюдений в анализе Price Action одновременно и одно из самых простых: продолжительным расширениям часто предшествуют периоды относительного спокойствия. После сильного направленного движения импульс ослабевает, активность участников выравнивается, диапазоны сужаются, а краткосрочная волатильность снижается. Во многих случаях эта фаза сжатия создает условия для следующего направленного расширения.

Марк Минервини описывает один из вариантов такого поведения с помощью паттерна сжатия волатильности (VCP). Другие трейдеры называют это "плотным Price Action" или "сжатой пружиной", а Джон Боллинджер формализовал часть этой идеи в известной концепции Band Squeeze. Независимо от терминологии, само это поведение встречается на разных рынках – Forex, индексах, акциях и криптовалютах, – потому что цена редко переходит напрямую от одного тренда к другому без промежуточной фазы балансировки.

Практическая задача всегда остается одной и той же: как объективно отличить качественную фазу сжатия, для которой характерны реальное поглощение и многократное взаимодействие с границами, от низкокачественного бокового дрейфа, почти не несущего структурной информации?

Большинство визуальных инструментов решают эту задачу с помощью полос, каналов или показателей волатильности. Хотя эти методы эффективны, они часто опираются на производные индикаторы, которые реагируют уже после того, как структура сформировалась. Трейдеры, работающие с Price Action в дискреционном стиле, решают эту задачу визуально: считают тесты, наблюдают за поведением теней и по опыту оценивают поглощение, но делать это последовательно на нескольких графиках сложно.

Именно поэтому был создан Compression Readiness – легковесный индикатор MQL5, работающий только по закрытым барам и формализующий подход опытных трейдеров, торгующих по Price Action, к оценке сжатия с помощью повторяемых правил и наглядной визуальной обратной связи.

Инструмент выполняет следующее:

  • выявляет структурное сжатие диапазона относительно предыдущего окна;
  • оценивает перекрытие свечей, тесты границ и поведение цены при отбое;
  • классифицирует зрелость сжатия (ранняя / промежуточная / зрелая);
  • оценивает направленность, используя только геометрию свечей (CLV и асимметрию отбоев);
  • исключает диапазоны, которые уже были нарушены или выродились в малоинформативный боковой дрейф.

В этой статье я разберу логику обнаружения, наиболее важные фильтры (усеченные диапазоны, фильтрацию мертвого дрейфа, инвалидацию при закрытии за пределами диапазона), принципы построения оценки зрелости и способы встроить инструмент в анализ Price Action в реальном времени, не воспринимая его как прогнозный сигнал.

Приступим.



Почему сжатие важно в торговле по Price Action

Одно из повторяющихся наблюдений в анализе Price Action состоит в том, что направленным расширениям часто предшествуют периоды сниженной волатильности. В эти фазы ценовые диапазоны сужаются, импульс ослабевает, а активность участников становится более сбалансированной, поскольку рынок переходит от направленного движения к временному равновесию. Этот цикл сжатия и расширения отражает чередование на рынках фаз дисбаланса и ребалансировки.

При отсутствии сильных внешних драйверов – таких как резкие распродажи, крупные макроэкономические публикации или неожиданные новости – волатильность обычно сжимается, а не остается повышенной. В трендовых условиях, особенно при плавном росте, это сжатие усиливается по мере снижения неопределенности, ослабления контртрендовой активности и движения цены в пределах все более узких диапазонов. Со временем этот процесс может создать условия, при которых относительно небольшие изменения в активности участников приводят к непропорционально сильному направленному движению.

Универсальные сетапы сжатия

Это поведение встречается на разных рынках и в разных стилях торговли под разными названиями, но лежащая в его основе механика остается схожей. Паттерн сжатия волатильности (VCP), популяризированный Марком Минервини, описывает консолидации внутри сформировавшихся трендов или баз, где откаты цены становятся все менее глубокими. Ранние откаты могут быть относительно глубокими, а затем по мере сужения диапазона и снижения волатильности следуют все более мелкие коррекции. На этой фазе объем часто сокращается, что указывает на снижение контртрендового давления. Этот паттерн отражает постепенный процесс поглощения, а не единичное событие, и может появляться на нескольких таймфреймах или внутри более широких формаций.

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

Родственные концепции – такие как сжатие полос Боллинджера или сжатая база Price Action – представляют собой вариации одной и той же идеи: по мере консолидации рынка волатильность сжимается, а затем расширяется, когда меняется активность участников. Во всех этих подходах общий принцип один: рынки редко переходят напрямую от одного устойчивого тренда к другому без промежуточной фазы консолидации.

Что определяет качественное сжатие?

Не все консолидации дают значимую структурную информацию. Более качественные фазы сжатия, как правило, имеют несколько общих признаков:

Поглощение

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

Повторное взаимодействие с границами

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

Зрелость сжатия со временем

По мере развития сжатия диапазоны часто сужаются относительно предыдущих периодов, перекрытие свечей увеличивается, а волатильность продолжает снижаться. Может возникать асимметрия, например более высокие минимумы или более низкие максимумы внутри диапазона, отражающая направленное давление без немедленного выхода из него.

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

Вместе эти элементы описывают состояние равновесия, которое становится все более чувствительным к изменениям, а не случайный или застойный боковой рынок.

Типичные ошибки

Анализ на основе сжатия тоже связан с несколькими типичными трудностями:

Низкокачественный дрейф

Очень узкие диапазоны, которые сохраняются без значимых тестов или отбоев, часто отражают слабую вовлеченность участников, а не поглощение. Эти условия, как правило, ведут к затяжному боковому движению, а не к направленному расширению.

Ложные пробои диапазона

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

Чрезмерная интерпретация в пилообразном рынке

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

Ключевое различие определяется структурой, а не внешним видом. Качественное сжатие определяется постепенным сужением, повторяющимся и информативным взаимодействием с границами, а также возникающей асимметрией, а не только узостью диапазона. Инструмент Compression Readiness формализует эти наблюдения, количественно оценивая сжатие, перекрытие, поведение цены при тесте границ и отбоях, нарастание зрелости и направленность на основе поглощения. Его цель не в прогнозировании исхода, а в том, чтобы дать структурированный контекст для оценки того, отражает ли фаза сжатия значимое рыночное равновесие или малоинформативный дрейф.



Ключевые понятия и логика

Индикатор Compression Readiness превращает ранее обсуждавшиеся принципы Price Action в структурированную систему обнаружения. Все расчеты выполняются только на закрытых барах, что обеспечивает стабильную работу без перерисовки и на исторических данных, и в реальном времени.

Процедура DetectCompression оценивает недавнее ценовое окно (по умолчанию: 30 баров) относительно предшествующего опорного окна. Она оценивает сжатие, перекрытие свечей, взаимодействие с границами, поведение цены при отбое и относительный размер диапазона. Эти измерения поступают в балльную модель, которая классифицирует зрелость сжатия, а направленность оценивается отдельно и только по геометрии свечей.

Логика разделена на четыре основных компонента.

1. Обнаружение сжатия

Сжатие выявляется путем систематического сравнения структуры текущего окна со структурой предыдущего опорного периода.

Сжатие диапазона оценивается путем измерения текущего диапазона от максимума до минимума относительно эталонного окна; существенное уменьшение, задаваемое InpContractionMax, положительно влияет на общее качество сжатия. Перекрытие свечей оценивается путем расчета общей ценовой области между соседними свечами; более высокие коэффициенты перекрытия указывают на ослабление направленного импульса и более сбалансированную активность участников. Плотность диапазона оценивается и в абсолютном, и в относительном выражении: текущая высота диапазона сравнивается с фиксированным максимальным порогом (InpBoxTightMaxPts), а средний размер свечи – с историческими значениями, чтобы исключить периоды необычно низкой активности.

Для повышения надежности опциональный усеченный диапазон (InpUseTrimmedBox) исключает настраиваемое количество крайних теней (InpTrimCount), чтобы единичные ценовые всплески не искажали границы диапазона. Наконец, защитное правило инвалидации отбраковывает весь сетап, если какая-либо свеча закрывается за пределами заданного бокса (InpInvalidateOnCloseOut), поскольку это означает, что сжатие уже завершилось или сломалось.

2. Система оценки зрелости

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

Баллы начисляются за независимые структурные признаки, включая силу сжатия, перекрытие, абсолютную и относительную плотность, взаимодействие с границами и наличие свеч с отбоями. Отбой определяется как наличие значимых противоположно направленных теней при возврате закрытия к внутренней части диапазона.

Итоговый балл соответствует четырем состояниям зрелости:

  • отсутствует – недостаточно структурных признаков;
  • ранняя – присутствуют базовые признаки сжатия и перекрытия;
  • промежуточная – усиливаются взаимодействие с границами и сужение диапазона;
  • зрелая – наиболее выраженное сочетание сжатия, тестов и отбоев;

Пороговые значения вынесены во входные параметры (InpScoreNeedEarly, InpScoreNeedBuilding, InpScoreNeedMature), что позволяет настраивать чувствительность без изменения кода. Опциональный фильтр мертвого дрейфа (InpFilterDeadDrift) штрафует или отбраковывает сжатия, которые непропорционально малы относительно среднего размера недавних свечей, отсекая диапазоны с низкой активностью.

3. Поглощение и направленность

Направленность определяется исключительно структурой свечей. Среднее значение Close Location Value (CLV) показывает, где располагаются закрытия в пределах диапазонов свечей на коротком отрезке истории, и дает базовое представление о направленном давлении. Асимметрия отбоев сравнивает отбои по верхним теням (неудачные попытки роста) с отбоями по нижним теням (удержанные снижения); при этом значимые встречные тени вносят вклад в направленное взвешивание.

Эти данные формируют исходный показатель направленности, который классифицируется как бычий, медвежий или нейтральный. Опциональное сглаживание (InpSmoothBias) снижает чувствительность к отдельным свечам. Сила направленности передается качественной оценкой (от очень низкой до высокой), чтобы дать контекст без ложного ощущения определенности.

4. Обзор защитных фильтров

Несколько защитных механизмов позволяют оставить только структурно значимые сжатия:

  • диапазоны с подрезанными тенями (удаление выбросов);
  • инвалидация при закрытии за пределами диапазона;
  • фильтрация мертвого дрейфа;
  • опциональная проверка границ только по телам свечей (InpUseBodyBoxForTests) для более строгих критериев взаимодействия.

Вместе эти фильтры сокращают число ложных срабатываний в пилообразном, низколиквидном или уже разрешившемся рынке.



Визуальные и информационные элементы

Инструмент спроектирован так, чтобы визуально представлять результаты анализа. Все графические элементы строятся на основе оценки закрытых баров и обновляются только при изменении внутреннего состояния.

Рамка диапазона сжатия

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

Цвет рамки отражает текущее аналитическое состояние:

  • нейтральный / неактивный – когда значимого сжатия нет;
  • окрашивается в цвет состояния, если сжатие классифицируется как раннее, промежуточное или зрелое;
  • рамка перерисовывается только при изменении базового состояния, что обеспечивает визуальную стабильность при работе с графиком в реальном времени.

Маркеры взаимодействия с границами

Опциональные маркеры выделяют взаимодействия с верхней и нижней границами диапазона сжатия. Эти маркеры показывают, где цена тестировала границы диапазона в пределах заданного допуска, визуально подтверждая поглощение и отбой, уже учтенные во внутренней логике. Маркеры выполняют только описательную функцию и не добавляют значимости сверх подтверждения самого факта структурного взаимодействия.

Метки структурного контекста

Недавняя структура свинга при необходимости помечается метками, чтобы дать дополнительный контекст вокруг диапазона сжатия. Эти метки показывают относительные связи свингов (более высокие максимумы, более низкие максимумы, более высокие минимумы, более низкие минимумы) на основе подтвержденных точек свинга. Они помогают интерпретировать сжатие в более широкой ценовой структуре, а не классифицировать тренд или направление.

Индикаторы изменения направленности

Если эта опция включена, стрелки изменения направленности наносятся только при переходе внутренне вычисленного состояния направленности между нейтральным, бычьим и медвежьим. Эти стрелки точно привязываются к закрытию бара, на котором подтверждается изменение. Они обозначают переходы состояний, а не торговые сигналы по направлению, и не сохраняются, если состояние направленности перестает быть валидным.

Информационная панель

Компактная информационная панель кратко показывает текущее аналитическое состояние в текстовой форме. На ней отображаются:

  • статус сжатия и уровень зрелости;
  • показатели сжатия и перекрытия;
  • число тестов границ и отбоев.

Направленность и качественная оценка силы

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

Замысел оформления

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

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



Входные параметры

Инструмент Compression Readiness предоставляет ограниченный набор входных параметров, которые позволяют настраивать чувствительность и визуальное поведение, не меняя базовую логику обнаружения. Значения по умолчанию подобраны так, чтобы отражать типичные условия Price Action и при этом оставаться пригодными для разных символов и таймфреймов.

Параметры сгруппированы по назначению, а не по внутреннему порядку кода.

Настройка окон

Эти параметры определяют горизонт анализа, используемый для структурного сравнения.

Размер окна (InpWindowBars)

  • Задает число недавних свечей в качестве размера окна анализа. Это окно представляет текущего кандидата на сжатие.

Размер предыдущего окна (InpPrevWindowBars)

  • Задает эталонный период, используемый для оценки относительного сжатия. Использование отдельного окна позволяет не оценивать сжатие изолированно.

Пара значений по умолчанию (30 / 30 баров) дает достаточный структурный контекст без чрезмерного сглаживания краткосрочного поведения.

Чувствительность сжатия

Эти параметры определяют, насколько строго оцениваются сжатие и баланс.

  • Максимальный коэффициент сжатия (InpContractionMax). Ограничивает, насколько большим может быть средний диапазон недавних свечей относительно эталонного окна, чтобы структура могла считаться сжатием.
  • Минимальный коэффициент перекрытия (InpOverlapMin). Задает требуемую степень перекрытия ценовых диапазонов соседних свечей.
  • Максимальная высота рамки (InpBoxTightMaxPts). Ограничивает абсолютную высоту диапазона сжатия, чтобы слишком широкие структуры не классифицировались как сжатие.

Вместе эти параметры определяют, действительно ли структура сжимается или лишь формирует рыхлую консолидацию.

Взаимодействие с границами и отбои

Эти параметры определяют, как интерпретируется взаимодействие цены с границами сжатия.

  • Допуск теста (InpTestTolerancePts). Определяет, насколько близко цена должна подойти к границе диапазона, чтобы это считалось тестом.
  • Минимальный размер отбоя (InpRejectionMinPts). Задает минимальную длину тени, необходимую для того, чтобы движение считалось отбоем.
  • Минимальное число тестов для классификации (InpMinTestsForEarly, InpMinTestsForMature). Задает, сколько взаимодействий с границами требуется, прежде чем сжатие сможет перейти к следующим стадиям зрелости.

Эти параметры помогают отличать значимое поглощение от случайных касаний.

Пороги оценки зрелости

Зрелость сжатия определяется путем сопоставления накопленного балла с дискретными состояниями.

  • Порог для ранней стадии (InpScoreNeedEarly)
  • Порог для промежуточной стадии (InpScoreNeedBuilding)
  • Порог для зрелой стадии (InpScoreNeedMature)

Изменение этих порогов влияет на то, как быстро сжатие переходит между состояниями, не меняя отдельные компоненты оценки.

Оценка направленности

Параметры, связанные с направленностью, влияют на то, как направленное давление выводится из структуры свечей.

  • Окно проверки CLV (InpCLVMeanBars). Задает число баров, используемых для расчета среднего значения Close Location Value.
  • Сглаживание направленности (InpSmoothBias, InpBiasSmoothBars). Включает опциональное сглаживание классификации направленности по нескольким барам, чтобы снизить чувствительность к отдельным свечам.

Параметры направленности влияют на устойчивость классификации, а не на само направление.

Надежность и проверка

Эти параметры управляют защитной логикой и подавлением шума.

  • Подрезанный диапазон (InpUseTrimmedBox, InpTrimCount). Включает удаление экстремальных теней при построении рамки сжатия.
  • Инвалидация при закрытии за пределами диапазона (InpInvalidateOnCloseOut). Отбраковывает сжатие, если хотя бы одна свеча закрывается за пределами заданного диапазона.
  • Фильтр мертвого дрейфа (InpFilterDeadDrift, InpMinBoxToAvgRange). Штрафует или отбраковывает диапазоны, которые непропорционально малы относительно среднего размера недавних свечей.
  • Проверка границ только по телам свечей (InpUseBodyBoxForTests). Ограничивает проверку взаимодействия с границами только телами свечей для более строгой валидации.
Визуальные настройки

Визуальные параметры влияют только на отображение и не влияют на логику обнаружения.

  • Рамка сжатия и маркеры. Параметр позволяет включать и отключать отображение рамки диапазона и маркеров взаимодействия с границами.
  • Стрелки направленности и метки структуры. Параметр позволяет включать и отключать контекстные аннотации, основанные на изменениях внутреннего состояния.

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



Реализация на MQL5

Обнаружение условий сжатия перед потенциальным структурным разрешением опирается на подход, основанный только на Price Action: он анализирует поведение цены в тщательно заданных исторических окнах. Вместо зависимости от запаздывающих индикаторов реализация сосредоточена на измерении сжатия диапазонов, взаимодействия свечей внутри этих диапазонов и изменения внутреннего давления. Для этого требуется тщательно подготовить исходные ценовые данные, которые служат основой для всего последующего анализа.

Функции WindowHighLow() и WindowHighLowTrimmed() используются для определения максимальной и минимальной цены как в текущем, так и в эталонном окне. Опциональная подрезка теней снижает влияние одиночных свечей-всплесков. Эти границы задают рамку сжатия, которая служит и аналитическим ориентиром, и визуальным отображением зоны консолидации на графике.

void WindowHighLowTrimmed(int start,int count,int trim,double &hi,double &lo)
{
   hi=-DBL_MAX; lo=DBL_MAX;
   int totalBars = Bars(_Symbol,_Period);
   int n = MathMin(count, totalBars-start);
   if(n<=0){ hi=0; lo=0; return; }

   double highs[], lows[];
   ArrayResize(highs,n);
   ArrayResize(lows,n);

   for(int i=0;i<n;i++)
   {
      highs[i] = iHigh(_Symbol,_Period,start+i);
      lows[i]  = iLow (_Symbol,_Period,start+i);
   }

   ArraySort(highs);
   ArraySort(lows);

   int t = MathMax(0, MathMin(trim, (n-1)/2));
   lo = lows[t];
   hi = highs[n-1-t];
}

Чтобы учитывать контекст волатильности и не выделять чрезмерно спокойные участки, AvgRange() вычисляет средний диапазон свечей в тех же окнах.

double AvgRange(int start,int count)
{
   double sum=0; int n=0;
   for(int i=start; i<start+count && i<Bars(_Symbol,_Period); i++)
   {
      double r=CandleRange(i);
      if(r>0){ sum+=r; n++; }
   }
   return (n>0 ? sum/n : 0.0);
}

Параллельно CandleCLV() и OverlapRatioWindow() оценивают положение закрытия свечей внутри их диапазонов и степень ценового перекрытия между соседними свечами, давая дополнительное представление о внутренней структуре диапазона.

double CandleCLV(int s)
{
   double h=iHigh(_Symbol,_Period,s);
   double l=iLow (_Symbol,_Period,s);
   double c=iClose(_Symbol,_Period,s);
   if(h<=l) return 0.0;
   return (2.0*c - h - l) / (h - l);
}

double OverlapRatioWindow(int start,int count)
{
   double sum=0; int n=0;
   for(int i=start; i<start+count-1 && (i+1)<Bars(_Symbol,_Period); i++)
   {
      double h1=iHigh(_Symbol,_Period,i),   l1=iLow(_Symbol,_Period,i);
      double h2=iHigh(_Symbol,_Period,i+1), l2=iLow(_Symbol,_Period,i+1);

      double inter = MathMin(h1,h2) - MathMax(l1,l2);
      double uni   = MathMax(h1,h2) - MathMin(l1,l2);
      if(uni<=0) continue;

      double r = (inter>0 ? inter/uni : 0.0);
      sum += r; n++;
   }
   return (n>0 ? sum/n : 0.0);
}

Основной анализ реализован в процедуре DetectCompression(), которая последовательно оценивает состояние сжатия. Процесс начинается с определения граничных уровней зоны сжатия с учетом выбранных размеров окон и параметров подрезки.

void DetectCompression()
{
   if(InpUseTrimmedBox)
      WindowHighLowTrimmed(1, InpWindowBars, InpTrimCount, boxTop, boxBot);
   else
      WindowHighLow(1, InpWindowBars, boxTop, boxBot);
   // Further processing follows...
}

Перед дальнейшей оценкой применяются защитные проверки: если последние закрытия свечей выходят за пределы заданного диапазона (InpInvalidateOnCloseOut) или если высота диапазона указывает на среду с низкой активностью (InpFilterDeadDrift), структура сразу отбраковывается.

if(InpInvalidateOnCloseOut)
{
   for(int i=1; i<=InPWindowBars && i<Bars(_Symbol,_Period); i++)
   {
      double cClose=iClose(_Symbol,_Period,i);
      if(cClose>boxTop || cClose<boxBot)
      {
         // Invalidate structure
         return;
      }
   }
}

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

double recentAvg=AvgRange(1, InpWindowBars);
double prevAvg=AvgRange(1+InpWindowBars, InpPrevWindowBars);
contraction= (prevAvg>0 ? recentAvg/prevAvg : 1.0);

Затем по числу тестов и отбоев у верхней и нижней границ диапазона оценивается взаимодействие с границами.

topTests=0; bottomTests=0; topRejects=0; bottomRejects=0;
double tol=InpTestTolerancePts*_Point;
double rej=InpRejectionMinPts*_Point;

for(int i=1; i<=InpWindowBars && i<Bars(_Symbol,_Period); i++)
{
   double h=iHigh(_Symbol,_Period,i);
   double l=iLow(_Symbol,_Period,i);
   double o=iOpen(_Symbol,_Period,i);
   double c=iClose(_Symbol,_Period,i);
   
   if(h > boxTop - tol)
   {
      topTests++;
      // Additional boundary checks...
   }
   if(l < boxBot + tol)
   {
      bottomTests++;
      // Additional boundary checks...
   }
}

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

int score=0;
if(contraction <= InpContractionMax) score+=2;
// Additional scoring logic...
if(score >= InpScoreNeedEarly)
   maturity=MAT_EARLY;
// Further classification...

Оценка направленности выполняется независимо от оценки зрелости. Среднее значение Close Location Value (CLV) на коротком отрезке истории показывает, где цена обычно закрывается в пределах своего диапазона, тогда как асимметрия отбоев сравнивает неудачные попытки роста с удержанными снижениями. Эти компоненты объединяются и с помощью BiasFromRaw() сопоставляются с бычьим, медвежьим или нейтральным состоянием.

double meanClv=MeanCLV(1, InpCLVMeanBars);
double rawBias=CalculateBias(rawData);
bias=BiasFromRaw(rawBias);

Если эта опция включена, сглаживание направленности учитывает несколько баров, чтобы снизить чувствительность к отдельным свечам. Изменения состояний направленности визуально отмечаются точно на закрытии той свечи, на которой происходит переход. Визуальные элементы помогают воспринимать анализ в контексте. Зона сжатия рисуется с помощью DrawCompressionBox(); для наглядности при необходимости может применяться подрезка теней.

DrawCompressionBox(t1, t2, top, bottom, boxColor);

Маркеры выделяют области повторного взаимодействия с диапазоном, а фоновая подсветка исторических участков указывает на периоды устойчивой консолидации. Максимумы и минимумы свингов отмечаются с помощью DrawSwingDots, а метки недавней структуры дают дополнительный контекст вокруг локальных структурных опорных точек, не изменяя аналитическую логику.

Информационная панель собирает ключевые метрики – включая состояние зрелости, балл, высоту диапазона, коэффициент сжатия, перекрытие, состояние направленности и число отбоев – и выводит их в виде компактного вертикального списка с помощью RenderInfo(). Эта панель суммирует текущее состояние сжатия, полученное строго из данных по закрытым барам.

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



Тестирование инструмента и наблюдаемые результаты

В этом разделе я покажу проведенные тесты и полученные результаты. Эти тесты проводились как на данных графика в реальном времени, так и в ходе тестирования на исторических данных, главным образом на инструменте EURUSD. На рисунке ниже показана GIF-анимация, созданная в Тестере стратегий и иллюстрирующая поведение системы на исторических данных.

Пунктирная рамка обозначает активное окно сжатия. Ее высота отражает измеренный диапазон после опциональной подрезки теней, а внутреннее перекрытие свечей и взаимодействия с границами оцениваются для определения качества сжатия. Информационная панель слева описывает текущее состояние: классификацию зрелости, балл, высоту окна, коэффициент сжатия, перекрытие и показатели поглощения, такие как число тестов границ и отбоев. Направленность выводится отдельно как структурное состояние, определяемое геометрией свечей, а именно CLV и асимметрией отбоев, с качественными индикаторами силы. Важно отметить, что эта визуализация не подразумевает никакой логики исполнения. Метки свингов (HL/LH) дают дополнительный структурный контекст, не влияя на логику сжатия. Стрелки изменения направленности, если они присутствуют, точно привязываются к закрытию того бара, на котором меняется состояние направленности, и отражают только оценку по закрытым барам.

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

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

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



Заключение

В этой статье была описана реализация модуля анализа сжатия, работающего на завершенных свечах. Логика анализирует сжатие диапазона, взаимодействие с границами, поведение при отбое и структуру свечей, чтобы классифицировать зрелость сжатия и контекст направленности. Не используются никакие индикаторы, логика исполнения или прогнозные предположения. Модуль предназначен для использования в качестве аналитического компонента в рамках более широких сценариев анализа Price Action и может применяться к разным символам и таймфреймам.

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/21109

Прикрепленные файлы |
Переосмысливаем классические стратегии (Часть 19): Подробный разбор стратегий на пересечении скользящих средних Переосмысливаем классические стратегии (Часть 19): Подробный разбор стратегий на пересечении скользящих средних
В этой статье мы возвращаемся к классической стратегии пересечения скользящих средних и исследуем, почему она часто терпит неудачу на шумных, быстро меняющихся рынках. В ней представлены пять альтернативных методов фильтрации, предназначенных для улучшения качества сигнала и устранения слабых или убыточных сделок. Обсуждение показывает, как статистические модели могут обучаться и исправлять ошибки, которые пропускает человеческая интуиция и традиционные правила. Читатели получают более четкое представление о том, как модернизировать устаревшую стратегию, и о подводных камнях, связанных с опорой исключительно на такие показатели, как RMSE, в финансовом моделировании.
Алгоритм оптимизации кита-белухи — Beluga Whale Optimization (BWO) Алгоритм оптимизации кита-белухи — Beluga Whale Optimization (BWO)
Кандидат в нашу рейтинговую таблицу — Beluga Whale Optimization, метаэвристика, построенная на трёх моделях поведения кита-белухи: парном плавании, охоте с полётом Леви и обновлении популяции через падение кита. По ходу реализации обнаружилось, что алгоритм не столько оптимизирует, сколько считывает геометрию тестового стенда, разбираем механизм этого и собираем честную перспективную модификацию BWOm.
Разработка инструментария для анализа Price Action (Часть 59): Выявление точных пробоев при фрактальной консолидации с помощью геометрической асимметрии Разработка инструментария для анализа Price Action (Часть 59): Выявление точных пробоев при фрактальной консолидации с помощью геометрической асимметрии
Изучая широкий спектр сетапов пробоя, я заметил, что неудачные пробои редко были связаны с нехваткой волатильности и гораздо чаще – со слабой внутренней структурой. Это наблюдение легло в основу подхода, представленного в этой статье. Подход выявляет паттерны, в которых последний ценовой отрезок заметно превосходит предыдущий по длине, наклону и скорости, что служит явным признаком накопления импульса перед направленным расширением. Обнаруживая эти тонкие геометрические дисбалансы внутри консолидации, трейдер может заранее распознавать пробои с более высокой вероятностью еще до выхода цены из диапазона. Далее показано, как этот геометрический подход на основе фракталов преобразует структурный дисбаланс в точные сигналы пробоя.
Нейросети в трейдинге: Принятие торговых решений с учётом неопределённости (Модули прогнозирования и планирования) Нейросети в трейдинге: Принятие торговых решений с учётом неопределённости (Модули прогнозирования и планирования)
Статья продолжает адаптацию фреймворка UncAD к алгоритмическому трейдингу и фокусируется на модулях прогнозирования и планирования. Унитарные рыночные ряды заменяют участников сцены, а состояние счёта играет роль ego-агента. Реализованы CNeuronUncADUGP и CNeuronUncADUGPL, которые связывают прогноз, карту рыночных состояний и неопределённость с торговым контекстом, чтобы формировать согласованные сценарии и подготавливать решения по входу, удержанию и снижению риска.