Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 24
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Обзор
Это точная реализация в MetaTrader 5 методологии «Относительной скользящей средней» (RMA), представленной доктором Даниэлем Александром Блохом в курсе «Систематическая торговля с использованием RMA». Классическая скользящая средняя сводит ценовое окно к одному сглаженному числу, которое показывает уровень, но не редкость: высокое закрытие может сильно отличаться от всего, что его окружает, или быть высоким, но при этом вполне обычным в пределах окна. RMA отвечает на второй вопрос. Она рассматривает скользящее окно как небольшое распределение, ранжирует текущую цену внутри него и отображает этот ранг по шкале [0, 1], значение которой одинаково для любого инструмента и в любом режиме волатильности.
Структура состоит из трёх уровней, и код точно их отражает:
- SMA скользящего окна из W закрытий, рассматриваемого как локальное равновесие и зафиксированного на нуле.
- Семейство RMA — отклонение каждого ориентира окна от этого равновесия, представленное в виде чистого отношения sma / x - 1, вычисляемое для последнего закрытия, первого закрытия, среднего закрытия, а также минимума и максимума окна. Поскольку это отношения, они не зависят от масштаба и сопоставимы между различными инструментами.
- Фрактили, которые переформулируют окно в виде нормализованных доходностей (цена закрытия / SMA - 1) и ранжируют текущие, минимальные и максимальные значения внутри этого распределения. Это простая эмпирическая функция распределения вероятностей (CDF), взятая дословно из определения в приложении к статье, а f_w — это ряд, на основе которого фактически осуществляется торговля на всех последующих этапах.

Построение: скользящее окно цен закрытия превращается в SMA, цены закрытия пересчитываются в виде распределения нормализованных доходностей относительно этого SMA, а ранговое место текущей цены в рамках этого распределения становится её фрактилем по шкале [0, 1].
Помимо этого, в состав движка входят два производных показателя. Детектор режимов классифицирует разброс нормализованных доходностей как расширяющийся, сжимающийся или переходный, используя показатели «относительных экстремумов» (Relative Extremum Ratios) из статьи, подтвержденные наклоном по методу наименьших квадратов, z-оценкой и коэффициентом вариации. Монитор неблагоприятного движения публикует d_med_w — фрактиль, перецентрированный по медиане, и D_k — долю недавних шагов от бара к бару в этом диапазоне, которые были направлены вверх; это показатель направленной стабильности, который делает утверждение «это движение идет в обратную сторону» точным, а не субъективным.
В комплект входят две программы. RMA_Engine вычисляет все ряды и выводит все девятнадцать из них в виде буферов, благодаря чему советник или другой индикатор может считывать точные значения прямо на графике, а не повторно реализовывать математические вычисления и отставать от графика. RMA_Panel ничего не вычисляет: он находит движок, уже прикреплённый к графику, и отображает группу его буферов в отдельном подокне, поскольку показатели семейства RMA измеряются в долях процента, а d_med_w центрирован относительно нуля, поэтому ни один из них не читается на оси движка от 0 до 1.
Что рисует движок
Движок открывает отдельное окно с вертикальной осью, привязанной к интервалу [0, 1], и рисует шесть графиков:
| График | Внешний вид | Что это означает |
|---|---|---|
| Режим | Цветная полоса во всю высоту, расположенная за всем остальным | Зелёный — расширение, красный — сжатие, янтарный — переход к расширению, синий — начало сжатия. Пока режим ещё не определён, ничего не рисуется, поэтому разминка не начинается с цветового залива, означающего «ответа пока нет». |
| f_w | Толстая синяя линия | Фрактиль текущего закрытия: место, которое занимает последняя нормализованная доходность в пределах собственного окна. Это основная серия. |
| f_min / f_max | Пунктирные красная и зелёная линии | Фрактили минимума и максимума окна — нижняя и верхняя границы огибающей, по которой движется f_w. |
| alpha_lo_mean / alpha_hi_mean | Фиолетовая и оранжевая линии | Сглаженные уровни квантилей: EMA от f_w и от его дополнения, создающие более медленное фоновое движение, на фоне которого всплеск f_w воспринимается как всплеск. |
Начерчены три горизонтальные направляющие на двух порогах входа и на медиане. Они построены на основе тех же входных данных, что и сопутствующий советник, а не жестко запрограммированы, поэтому перенастройка порогов приводит к смещению направляющих вместе с ними, вместо того чтобы оставить график в состоянии тихого несоответствия правилам.
Как это интерпретировать. f_w, прижатое к верхней линии, означает,что текущая цена закрытия находится на максимальном значении из всех значений, зафиксированных за время его окна, и именно в этой точке инициируется нисходящий проход; f_w у нижней линии — это зеркально противоположный случай. Медиана — это уровень, правее которого движение должно оставаться, и его пересечение является естественным выходом из позиции. Цветная полоса задает контекст этому показателю, поскольку стратегия статьи заключается в открытии позиций в начале фазы расширения и их закрытии во время фазы сжатия.
Рекомендуемая настройка
| Настройка | Рекомендуемое значение | Примечания |
|---|---|---|
| Символ | Любой | Шкала фрактилей самонормализуется, поэтому для получения значимых показаний не требуется отдельная калибровка по каждому символу. При разработке и на приведенных ниже скриншотах использовалась пара EURUSD. |
| Таймфрейм | От M30 до H4 | Работает на любом таймфрейме. Окно измеряется в барах, поэтому более короткий таймфрейм с тем же значением W просто описывает более короткий отрезок рынка. |
| Размер окна (W) | 106 баров | Значение по умолчанию. В статье предполагается, что окно калибруется для каждого актива отдельно, поэтому это скорее отправная точка, чем рекомендация. |
| Требуемый исторический диапазон | W + количество баров обратного просмотра режима | 126 баров при настройках по умолчанию. Каждый график начинается с того момента, когда соответствующий модуль может дать первый ответ, а не с момента самой длительной «разогрева» в наборе, поэтому фрактили появляются раньше, чем полоса режима. |
Ключевые особенности
Верность оригинальной статье
- Фрактиль соответствует определению из приложения к статье: f_i = (1 / |W_i|) * sum_j I( W_ij <= v_i ), реализованный в точном соответствии с текстом. В случаях, когда текст статьи и приложение к ней расходятся, приоритет отдается приложению, а несоответствие документируется в исходном коде, а не исправляется незаметно.
- Классификация режимов следует «Относительным коэффициентам экстремумов»: сначала проверяется сжатие, поскольку это самое строгое толкование, требующее подтверждения, тогда как расширение намеренно достигается легче.
- Не было добавлено никаких сглаживаний, пороговых значений или фильтров, которые не предусмотрены исходным кодом.
Создан для чтения другими программами
- Все девятнадцать рядов представлены в виде буферов индикаторов: шесть — для построения графиков, а тринадцать — только для расчётов, так что экспертный советник может считывать те же числа, что и график, и их значения никогда не будут расходиться.
- Карта буферов находится в одном общем заголовке, поэтому движок, панели и любой потребитель говорят на одном языке, вместо того чтобы расходиться во мнениях без компиляционных ошибок, которые могли бы кого-то предупредить.
- Математика полностью реализована в классах, определяемых только в заголовочных файлах, без зависимости от графиков или ордеров, поэтому один и тот же код может управлять скриптом или тестовым набором без использования заглушек.
Правильный инкрементный перерасчет
- Каждый проход пересчитывает данные, начиная с prev_calculated-1, а не с prev_calculated. Бар с этим индексом ещё формировался при предыдущем вызове, и его закрытие стало окончательным только сейчас; если оставить всё как есть, то в каждой серии, зависящей от него, зафиксируется недоформированное значение, а разница фрактилей между барами станет разницей между двумя незавершёнными числами.
- Бары в фазе прогрева содержат значение EMPTY_VALUE, а не ноль, поэтому потребитель, подключающийся в середине прогрева, увидит «отсутствует» вместо правдоподобного числа.
- Классификация режимов зависит от пути внутри полосы перехода, поэтому хранится история по каждому бару, а не одно скользящее поле, что позволяет инкрементальному проходу возобновить цепочку с предыдущего бара.
Панели, заимствующие вторую ось
- Движок автоматически открывает запрошенные панели, сначала проверяя график, чтобы шаблон, уже содержащий их, или повторная инициализация после изменения ввода не создавали вторую копию за первой. Панели удаляются вместе с движком, но только при фактическом удалении, поэтому переключение таймфрейма возвращает вас к тому макету, который вы оставили.
- Панель находит движок, сопоставляя его короткое имя на графике, вместо того чтобы создавать собственный дескриптор, поэтому она никогда не может разветвиться на второй расчёт с иными параметрами, отображаемый рядом с реальным.
Скриншоты

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

Панель «Неблагоприятная ситуация»: d_med_w, центрированная на нуле, с D_k над ней — показателем направленной согласованности.

Панель семейства RMA: rma_w с минимумом и максимумом окна на собственной шкале, а также огибающей, по которой проходит текущая цена.
Установка и структура файлов
Два индикатора и четыре заголовочных файла. Важна организация папок: движок загружает панель по относительному пути RMA\RMA_Panel, а заголовочные файлы включаются как <RMA\...>, поэтому и то, и другое должно находиться в своих подпапках RMA.
| Файл | Роль | Описание |
|---|---|---|
| Indicators\RMA\RMA_Engine.mq5 | Основной индикатор | Запускает три модуля на текущих свечах, привязывает все девятнадцать буферов, рисует шесть графиков и полосу режима, а также открывает панели. Не содержит собственных математических вычислений. |
| Indicators\RMA\RMA_Panel.mq5 | Панель пропуска | Размещает «двигатель» на графике и отображает одну группу его буферов в отдельном окне с собственной шкалой. Два режима: неблагоприятное движение (D_k, d_med_w) и семейство RMA (rma_w, rma_min, rma_max). |
| Include\RMA\RmaTypes.mqh | Общий словарь | Перечисления режимов и перекрестных состояний, карта буферов, а также количество графиков и палитр. Единственное место, где движок, панели и любой потребитель согласуются. |
| Include\RMA\RmaCore.mqh | Числовое ядро | SMA, семейство из пяти RMA, распределение нормализованных доходностей, функция фрактилей, диапазон окна и сглаженные границы альфа. |
| Include\RMA\RegimeDetector.mqh | Классификация режимов | Расширение, сжатие и два переходных состояния, определяемые огибающей отношения экстремумов, подтверждённой наклоном, z-оценкой и коэффициентом вариации. |
| Include\RMA\AdverseMonitor.mqh | Направленная согласованность | d_med_w — медианно-центрированный фрактил, и D_k — доля восходящих изменений в недавних переходах от одного бара к другому. |
Чтение буферов из собственного кода
Получите дескриптор с помощью iCustom на RMA\RMA_Engine и считайте любой индекс ниже с помощью CopyBuffer. Индексы от 0 до 6 — это отображаемые на графике ряды, а от 7 до 18 — только для расчёта, но все девятнадцать доступны для чтения.
| Индекс | Ряды | Значение |
|---|---|---|
| 0, 1 | Полоса режима, индекс цвета | Высота фона и его слот в палитре. Не содержит измерений, только цвет. |
| 2 | f_w | Фрактиль последнего нормализованного значения окна, в диапазоне [0, 1]. Основной ряд. |
| 3, 4 | f_min, f_max | Фрактили минимального и максимального значений окна. |
| 5, 6 | alpha_lo_mean, alpha_hi_mean | Экспоненциальная средняя (EMA) нижней и верхней границ альфа. |
| 7 | sma | Простое скользящее среднее окна в ценовых единицах. |
| от 8 до 12 | rma_w, rma_1, rma_mid, rma_min, rma_max | Семейство RMA: sma, деленное на последнюю, первую, среднюю, минимальную и максимальную цену закрытия, минус один. |
| 13 | range | Диапазон нормализованных доходностей окна — величина, которую считывает детектор режима. |
| 14, 15 | alpha_lo, alpha_hi | Уровень исходного квантиля, занимаемого f_w, и его дополнение. |
| 16 | режим | Идентификатор режима в виде числа типа double: 0 — расширение, 1 — сжатие, 2 — переход, 3 — прорыв, 4 — неизвестно. |
| 17, 18 | D_k, d_med_w | Направленная согласованность и медианно-центрированный фрактил. |
Входные параметры
| Группа | Параметры | Значения по умолчанию |
|---|---|---|
| Window | InpWindowSize, InpSmoothingPeriod | 106 баров, 10 |
| Обнаружение режима | InpEpsilonLow, InpEpsilonHigh, InpSlopeThreshold, InpRegimeLookback, InpVariationRatioLow, InpZScoreExpansion, InpRangeHistoryLookback | 0,15; 3,0; 0,0001; 20; 0,1; 1,0; 100 |
| Неблагоприятное движение | InpAdverseLookback | 10 баров |
| Линии опоры | InpEntryUpperThreshold, InpEntryLowerThreshold | 0,9; 0,1 |
| Панели | InpAutoAttachPanels, InpPanelAdverse, InpPanelRmaValues, InpAdverseThresholdDown, InpAdverseThresholdUp | true, true, false, 0,3, 0,7 |
| Фон режима | InpShowRegimeBand плюс один цвет на каждый режим | true, тёмно-зелёный / красный / янтарный / синий |
Основа исследования
Реализация основана на следующем:
- Даниэль Александр Блох, «Курс по систематической торговле с использованием RMA», доступен на SSRN.
Стоит четко указать одно предостережение, поскольку оно исходит из самого источника: раздел «Результаты» статьи оставлен в качестве темы для будущих исследований. В ней предлагается концептуальная основа и механизм работы, а не эмпирические результаты. Этот индикатор предоставляет вам описание состояния рынка в шкале, которая везде означает одно и то же, что служит основой для вашего собственного тестирования, а не проверенным преимуществом, унаследованным от источника.
В сопутствующей статье подробно рассматриваются математические основы и реализация каждого модуля, а также создается советник, торгующий на основе этих буферов: «Реализация концепции относительной скользящей средней (RMA) Блоха на языке MQL5».
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/75472
ZZV_CHoCH_V6
ZZV_CHoCH_V6 — зигзаг, построенный на волатильном стопе (ATR-трейлинге). За основу взят код ZZVolatility. Он отмечает точками вершины и низы рыночных колебаний, а порог разворота задаётся не фиксированным процентом, как у классического ZigZag, а текущей волатильностью: в спокойном рынке индикатор ловит мелкие движения, в бурном игнорирует их. Встроенный фильтр структуры оставляет только значимые экстремумы — обновления хая и лоя либо моменты слома тренда.
Clock (Spread)
Функции данного индикатора: Clock (Spread).mq5 — это индикатор графика MetaTrader 5, который отображает в углу графика небольшую текстовую надпись, содержащую: Таймер обратного отсчёта до закрытия текущей свечи (в формате ЧЧ:ММ:СС или ММ:СС, в зависимости от таймфрейма) Текущий спред (Ask − Bid, в пунктах), отображаемый в скобках рядом с таймером. Журнал изменений: Версия 2.20: - Цвет спреда теперь динамически меняется в зависимости от направления (зеленый = растет, красный = падает) - Добавлены настраиваемые параметры для цветов спреда
Trading Panel EA
Pro Manager — это универсальный торговый помощник для платформы MT5, разработанный специально для проп-фирм и профессиональных трейдеров. Выполняйте сделки быстрее, управляйте позициями более эффективно, контролируйте риски и автоматизируйте повседневные торговые задачи с помощью мощных инструментов, таких как «Break-even», «Average TP», управление «Magic Number» и «Auto Grid».
YURAZ_MCCH
Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.