Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 19
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Обзор
Данный советник торгует по методу относительной скользящей средней (RMA), представленному доктором Даниэлем Александром Блохом в курсе «Систематическая торговля с использованием RMA». Он реализует все четыре стратегии пересечения, описанные в статье, а также адаптивный выход при пересечении, причем каждый вход и выход выражается в фрактильном пространстве, а не в цене.
Исходная посылка заключается в том, что ценовое окно является более информативным в виде распределения, чем в виде среднего значения. На каждом баре RMA берет скользящее окно из W закрытий, пересчитывает их в виде отклонений от собственного среднего значения и определяет, какое место занимает новейшее значение в рамках этого распределения в виде фрактила в диапазоне [0, 1]. Таким образом, цель статьи заключается в том, чтобы использовать колебания этого ранга между крайними значениями распределения: открывать длинные позиции, когда он движется от минимума к максимуму, и короткие — когда направление меняется. Поскольку фрактиль представляет собой ранговую позицию, а не расстояние, пороговое значение, например 0,9, имеет одинаковое значение для любого инструмента и в любом режиме волатильности, что и делает эти правила универсальными.
Советник не содержит математических вычислений. Всё это находится в сопутствующем индикаторе RMA_Engine, который советник загружает через iCustom и считывает с помощью CopyBuffer при закрытии каждого бара. Такое разделение является намеренным и обеспечивает два ценных свойства: советник не может расходиться с графиком в отношении того, каким был фрактил на данном баре, поскольку вычисление производится только один раз; и правила никогда не затрагивают ордера, поэтому их можно воспроизвести на исторических данных с помощью скрипта без участия брокера.
Как происходит торговля
Четыре этапа. Стратегия основана на пересечениях собственного распределения окна. Достижение экстремума запускает одну из сторон — это тест на возникновение позиции, — а вход срабатывает, когда фрактил впоследствии пересекает квантильный интервал в направлении прохождения. Триггером является не экстремум, а пересечение, поэтому вход может сработать в любой точке вдоль прохождения. Названия описывают движение цены, а не позицию:
- «Длинный переход с разворотом». Фрактиль покидает максимум и направляется вниз к минимуму. Советник использует это снижение, открывая короткую позицию.
- Short-cross-reverse. Зеркальный случай. Фрактиль покидает минимум и поднимается к максимуму; открывается длинная позиция.
- Long-cross-revert. Спуск, начавшийся от максимума, разворачивается вверх до достижения минимума. Советник следует за ним обратно к максимуму, откры вая длинную позицию.
- «Шорт-кросс-реверт». Рост, начавшийся от минимума, разворачивается вниз до достижения максимума; советник следует за ним вниз, открывая короткие позиции.
В совокупности эти четыре варианта охватывают оба направления, в которых может разрешиться частичное движение. Каждая открытая позиция относится к одному из названных этапов, и именно этап определяет, какой тест на выход применим и во что превращается разворот; поэтому одно и то же значение фрактиля закрывает одну позицию и удерживает другую.

Четыре фазы в одном распределении: фазы «реверс» проходят полный переход от одной крайней точки к другой, а фазы «реверт» открываются, когда переход разворачивается назад, не достигнув противоположной крайней точки.
Адаптивный выход. Именно здесь детектор режима оправдывает своё существование. В статье определены два базовых выхода, а также третий, который выбирает между ними:
- «Полный переход распределения». Предполагает, что переход завершается, поэтому выход с одной стороны совпадает с входом на другую. Короткая позиция, открытая от максимума, закрывается только тогда, когда квантиль действительно достигает минимума и разворачивается вверх, и поскольку этот разворот сам по себе является началом новой сделки в противоположном направлении, выход напрямую переходит в неё.
- Триггер разворота на экстремуме. Не делает никаких допущений относительно дальнего экстремума. Позиция закрывается при первом убедительном признаке того, что движение, на котором она держалась, остановилось: серия шагов квантильного диапазона в нежелательном направлении, пересечение обратно через медианную зону или один шаг, достаточно крупный, чтобы говорить сам за себя.
- Адаптивный выход по пересечению. Правило, описанное в статье, и то, что реализует советник: триггер разворота во время расширения и переходного периода, когда вероятны частичные пересечения, с переходом к полному пересечению после выявления сжатия. На участках разворота всегда используется триггер разворота, в любом режиме.
Тест длины последовательности не позволяет триггеру возврата срабатывать на шуме. Последовательность шагов с знаком накапливается, пока фрактиль продолжает двигаться в том же направлении, и сбрасывается при смене направления, поэтому «два бина назад» означает, что движение действительно развернулось, а не просто приостановилось.
Безопасный выход. Над и перед выходом по любой из стратегий расположена проверка на неблагоприятное движение. Позиция, ориентированная на возврат к среднему значению, по своей сути некоторое время находится «за пределами», поэтому само нахождение «за пределами» не может служить критерием для выхода; настоящим предупреждающим сигналом является нахождение «за пределами» при одновременном наблюдении за тем, как фрактил продолжает уходить все дальше за пределы. Именно это и описывает низкое значение D_k на неправильной стороне медианы, и это единственный выход, который полностью игнорирует настройку минимальной прибыли, поскольку он направлен не на фиксацию целевого уровня, а на то, чтобы прекратить подпитку тренда, который уже развернулся против сделки.
Когда он срабатывает при убытке, он также блокирует повторный вход на ту же сторону до тех пор, пока фрактил не пересечёт медиану обратно, так что стратегия не может сразу же снова предложить рынку ту же убыточную сделку. Если в этот момент диапазон расширяется, советник вместо этого открывает позицию в противоположном направлении, исходя из того, что сигнал возврата к среднему значению, который продолжает давать сбой, свидетельствует о наличии тренда, а не о более выгодной цене. Эти два этапа следования за трендом — единственная часть системы, которая не является симметричной.
Рекомендуемые настройки
| Параметры | Рекомендуемое значение | Примечания |
|---|---|---|
| Символ | EURUSD | Инструмент для разработки и тестирования. Шкала фрактилей самонормализуется, поэтому правила применимы к другим символам без повторной калибровки, однако приведенные ниже настройки тестировались только на этом инструменте. |
| Таймфрейм графика | H2 | Темпоральный интервал тестирования. Окно измеряется в барах, поэтому более короткий таймфрейм с тем же значением W просто описывает более короткий отрезок рынка. Среднее время удержания на H2 составляло примерно один день. |
| Тип счёта | Неттинг или хеджирование | Советник удерживает не более одной позиции за раз и меняет направление, закрывая и открывая позицию заново, поэтому подходит любой тип счета. |
| Предпосылки | RMA_Engine должен быть скомпилирован | Скомпилируйте файл Indicators\RMA\RMA_Engine.mq5 перед подключением советника. При отсутствии файла .ex5 вызов iCustom завершится сбоем, и советник откажется инициализироваться, выдав сообщение с указанием названия файла. |
| Требуется история | W плюс период обратного просмотра режима | Советник останавливается на любом баре, где движок пока не может дать ответ, поэтому короткая история приводит к потере сигналов, а не к появлению ложных. |
Ключевые особенности
Верность оригинальной статье
- Реализованы все четыре кросс-стратегии: две «реверс-лег» и две «реверт-лег», а не упрощённая пара.
- Адаптивный триггер выхода из кроссовера переключается между «Full Distribution Crossover» и «Extremum Revert Trigger» в зависимости от режима, в точном соответствии с указаниями статьи.
- Фрактиль соответствует определению из приложения к статье — это простой эмпирический CDF окна. В тех случаях, когда текст статьи и её приложение не совпадают, приоритет отдаётся приложению, а расхождение документируется в исходном коде, а не исправляется незаметно.
Один расчёт, в одном месте
- Каждое число, которое считывают правила, поступает из RMA_Engine через CopyBuffer, поэтому график и сделки не могут расходиться. Нет второй реализации математических вычислений, которая бы обеспечивала их синхронизацию.
- Правила находятся в классе, который никогда не вызывает OrderSend, не считывает позицию и не выводит данные на экран. Ему передается структура бара из десяти полей, и он возвращает инструкцию — именно это делает стратегию тестируемой без участия брокера.
- Размещение ордеров, ведение учета и управление рисками находятся в отдельном классе, отделенном от правил по той же причине.
Решения принимаются исключительно на основе окончательных данных
- Буферы считываются, начиная с позиции 1, никогда — с 0. Бар с нулевым индексом ещё формируется, а каждое правило написано для бара, цена закрытия которого является окончательной.
- Бар «разминки», пробел в истории или движок, который ещё не произвёл расчёты, — всё это приводит к одному и тому же результату: никакого решения по данному бару. Из отсутствующего значения ничего не следует.
- Вопрос о том, был ли счет открыт, решается до того, как на него начинают воздействовать какие-либо факторы, поэтому бар является либо баром выхода, либо баром входа, но никогда не может быть и тем, и другим одновременно.
Исполнение, выдерживающее проверку реальным брокером
- Операция «закрытие и разворот» запрашивает у брокера закрытие позиции в тот момент, когда должна быть открыта противоположная сделка, и брокер не всегда выполняет запрос с первой попытки. Отклоненные закрытия фиксируются и повторно запрашиваются при каждом тике до тех пор, пока они не будут исполнены, а не отбрасываются, и разворот никогда не накладывается на позицию, которая все еще открыта.
- Вход фиксируется по фактически исполненной цене, а не по запрошенной, поэтому проскальзывание не влияет на значения в пунктах, которые учитываются в правилах выхода и при расчете показателя оптимизации.
- Размер лота ограничивается минимальным, максимальным значениями и шагом для данного символа.
- Открытая часть позиции сохраняется в глобальных переменных, поэтому позиция, которая пережила перезапуск терминала, восстанавливается как реальная сделка, а не как «сирота».
Средства управления работой
- Опциональные фиксированные стоп-лосс и тейк-профит в пунктах, опциональный фильтр сессии, корректно обрабатывающий окно, переходящее через полночь, и опциональное выравнивание позиций в конце сессии. Это средства управления развертыванием, а не часть фреймворка: в данной работе основное внимание уделяется сигналу, а определение пределов риска оставляется на усмотрение оператора.
- Опциональный блок статуса на графике, отображающий текущий фрактил, режим и этап сделки, с маркерами входа и выхода, а также подробный режим, который регистрирует в журнале каждый отказ и его причину. Оба параметра по умолчанию отключены, поэтому советник торгует в тихом режиме.
- Пользовательский критерий оптимизации, возвращающий чистый результат в пунктах, взвешенный по квадратному корню из количества сделок и процента выигрышных сделок, благодаря чему серия из четырехсот сделок оценивается выше, чем серия из сорока при одинаковом чистом результате, не позволяя количеству сделок полностью доминировать. Серии менее десяти сделок оцениваются в ноль баллов.
Результаты бэктеста
Один прогон по паре EURUSD, H2, с 01.05.2025 по 26.07.2026, примерно четырнадцать месяцев, на 100% реальных тиках с депозитом 10 000 долларов США при кредитном плече 1:500.
| Показатель | Значение |
|---|---|
| Общая чистая прибыль | 362,51 при депозите 10 000 |
| Общее количество сделок | 138 |
| Коэффициент прибыльности | 1,15 |
| Коэффициент Шарпа | 0,82 |
| Максимальное падение стоимости собственного капитала | 463,87 (4,52 %) |
| Сделки с прибылью | 46,38 % |
| Средняя прибыль / средний убыток | 42,80 / -30,82 |
| Процент выигрышных длинных и коротких позиций | 46,58% / 46,15% |
Процент выигрышей составляет чуть менее половины, и система остается прибыльной, поскольку средняя прибыль превышает средний убыток — это характерная особенность стратегии возврата к среднему значению, которая позволяет развернутым трендам развиваться. Длинные и короткие позиции демонстрируют практически одинаковые результаты, что и ожидается от системы, симметричной по своей конструкции.

Кривая капитала за тестовый период: стабильное участие с небольшими просадками, а не единичный удачный рывок.

Полный отчет Strategy Tester по данному прогону, в котором показаны настройки, статистика сделок, а также кривые баланса и капитала.
Установка и структура файлов
Один советник, один обязательный индикатор, одна дополнительная панель и семь заголовков. Важна организация файлов: советник загружает движок по относительному пути RMA\RMA_Engine, а заголовки включаются как <RMA\...>, поэтому каждый файл должен находиться в своей подпапке RMA. Скомпилируйте индикаторы перед советником.
| Файл | Роль | Описание |
|---|---|---|
| Experts\RMA\RMA.mq5 | Координатор | Все входные данные, вызов iCustom, считывание состояния движка по каждому бару, а также порядок работы сигнального движка, менеджера сделок и окна отображения. Не содержит собственной логики стратегии. |
| Индикаторы\RMA\RMA_Engine.mq5 | Обязательный индикатор | Вычисляет все ряды RMA и публикует девятнадцать буферов. Без него советник не инициализируется. |
| Indicators\RMA\RMA_Panel.mq5 | Дополнительная панель | Отображает группу буферов движка в отдельном окне с собственным масштабом для тех рядов данных, которые невозможно прочитать на оси движка от 0 до 1. Только для отображения. |
| Include\RMA\RmaTypes.mqh | Общий словарь | Перечисления режимов и переходных состояний, а также карта буферов. Единственное место, где советник, движок и панели согласуются между собой. |
| Include\RMA\RmaCore.mqh | Числовое ядро | SMA, семейство RMA, нормализованное распределение доходности и функция фрактилей. |
| Include\RMA\RegimeDetector.mqh | Классификация режимов | Расширение, сжатие и два переходных состояния, определяемые на основе относительных коэффициентов экстремумов, подтверждаемых наклоном, z-оценкой и коэффициентом вариации. Именно это определяет правило выхода. |
| Include\RMA\AdverseMonitor.mqh | Направленная согласованность | d_med_w — медианно-центрированный фрактил и D_k — доля восходящих движений среди последних шагов. Используется для выхода по соображениям безопасности. |
| Include\RMA\SignalEngine.mqh | Правила | Включение, четыре этапа входа, три выхода и адаптивное переключение между ними, безопасный выход, блок повторного входа и разворот. Принимает один бар, возвращает инструкцию, ни на что больше не влияет. |
| Include\RMA\TradeManager.mqh | Исполнение | Размещение ордера, фиксация лота, стопы и целевые уровни, синхронизация позиций, повторное закрытие, управление сессией, сохранение частей позиции, подсчёт пунктов и оценка оптимизации. |
| Include\RMA\RmaDisplay.mqh | Статус на графике | Блок статуса и маркеры входа и выхода. Метки создаются однократно и обновляются на месте, поэтому дубликатов объектов нет, а мерцания при перерисовке отсутствуют. |
Входные параметры
Девять групп входных параметров. Первые две передаются в движок и влияют на результаты вычислений; остальные управляют правилами, ордерами и отображением.
| Группа | Ключевые параметры | Значения по умолчанию |
|---|---|---|
| Window | InpWindowSize, InpSmoothingPeriod | 106 баров, 10 |
| Обнаружение режимов | InpEpsilonLow, InpEpsilonHigh, InpSlopeThreshold, InpRegimeLookback, InpVariationRatioLow, InpZScoreExpansion, InpRangeHistoryLookback | 0,15; 3,0; 0,0001; 20; 0,1; 1,0; 100 |
| Неблагоприятное движение | InpUseAdverseExit, InpAdverseLookback, InpAdverseThresholdDown, InpAdverseThresholdUp | true, 10 баров, 0,3, 0,7 |
| Входы | InpEntryUpperThreshold, InpEntryLowerThreshold, InpEntryMinDiff, InpCloseThreshold | 0,9; 0,1; 0,0 (учитывается любой разворот); 0,1 |
| Выходы | InpExitTargetUpper, InpExitTargetLower, InpExitProfitMinPips | 0,0; 0,0 (оба значения равны нулю — включается логика экстремумов); 0,0 (выключено) |
| Торговля | InpLotSize, InpMagicNumber, InpTradeComment | 0,1 лота, 20251230, «RMA» |
| Риск | InpStopLossPips, InpTakeProfitPips, InpUseTimeFilter, InpStartHour, InpEndHour, InpEODClosePositions | 0 (нет), 0 (нет), false, 8, 20, false |
| На графике | InpShowDisplay, InpAttachEngine, InpShowPanels, InpPanelAdverse, InpPanelRmaValues, InpShowRegimeBand, InpVerbose | по умолчанию всё выключено, поэтому советник торгует незаметно |
Основа исследования
Реализация основана на следующем:
- Даниэль Александр Блох, «Курс по систематической торговле с использованием RMA», доступен на SSRN.
В статье представлены концептуальная основа и механизмы реализации: представление в виде фрактилей, четыре стратегии пересечения линий и адаптивный выход при пересечении (Adaptive Crossover Exit), который выбирает одну из них в зависимости от режима. В ней не приводятся данные о результатах торговли, поскольку раздел «Результаты» в данной версии оставлен для будущей работы. Ценность данной работы заключается в стратегии, выраженной в шкале, которая имеет одинаковое значение для любого инструмента, а также в создании основы для вашего собственного тестирования на других символах и таймфреймах или с окном, откалиброванным под конкретный актив, как и предполагается в статье.
В сопутствующей статье приводятся математические выводы, подробно описывается реализация каждого модуля и детально объясняются все четыре компонента и логика выхода: «Реализация структуры относительной скользящей средней (RMA) Блоха на языке MQL5».
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/75473
Session Scalping Zones
Индикатор скальпинга на основе сессий для MetaTrader 5. Он автоматически отмечает максимум и минимум азиатской сессии, а затем генерирует сигналы скальпинга при открытии лондонской сессии, когда цена пробивает или повторно тестирует эти уровни. Индикатор рисует динамические диапазоны сессии, отправляет оповещения и push-уведомления, а также включает в себя дополнительные фильтры по тренду, объему и времени. Работает на графиках M1, M5 и M15 для любого инструмента.
Trading Panel EA
Pro Manager — это универсальный торговый помощник для платформы MT5, разработанный специально для проп-фирм и профессиональных трейдеров. Выполняйте сделки быстрее, управляйте позициями более эффективно, контролируйте риски и автоматизируйте повседневные торговые задачи с помощью мощных инструментов, таких как «Break-even», «Average TP», управление «Magic Number» и «Auto Grid».
YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя
Скрипт рисует уровни Рудолфа Акселя
YURAZ_MCCH
Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.