Бэктестинг и проверка intermediate 12 мин чтения

Оптимизация параметров в MT5: 116 комбинаций, 252 прогона, 0 принятых настроек

Оптимизация параметров в MT5: мы прогнали перебор по восьми собственным шаблонам стратегий и не приняли ни одной настройки. Важно то, как именно провалился каждый: лучший результат на выборке упал дальше всех, одна конструкция прошла проверку вне выборки и всё равно рассыпалась, две не дошли до 1,0 даже там, где их подгоняли. Ниже — процедура и чтение, которое удержит вас от верхней строки.

Опубликовано · Проверено

Оптимизация параметров в MetaTrader 5 — это перебор: вы объявляете диапазон для каждого входного параметра, «Тестер стратегий» прогоняет все комбинации и выдаёт таблицу, отсортированную по той метрике, которую выбрали вы. Трудность не в том, чтобы её запустить. Трудность в том, что у таблицы всегда есть верхняя строка, и верхняя строка почти всегда неверна.

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

Условия теста
Идентификатор экспериментаEXP-PARAM-SEARCH-OUTCOMES-001
Родительский экспериментEXP-BUILDER-TEMPLATE-BASELINE-001
Источникea-templates-manifest.jsbt.explored
Выборка8 recorded searches of the 53 measured templates
Символ / таймфреймUSDJPYm, M5 and H1
МодельM1 OHLC (Model=1), Exness MT5, measured 2026-06-18
Изменяемые параметрыstop loss and take profit only
Последняя проверка2026-08-25

Подготовка: сетка, разделение и данные

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

ПолеГдеЧто выставитьПочему
«Оптимизация» (Optimisation)Вкладка «Настройки» (Settings)Медленный полный алгоритм (Slow complete algorithm) для небольшой сеткиГенетический режим лишь сэмплирует пространство; при 12–32 комбинациях вы можете позволить себе увидеть его целиком
«Старт» / «Шаг» / «Стоп» (Start / Step / Stop)Вкладка «Входные параметры» (Inputs), для каждого параметраДва параметра, крупные шагиКаждый отмеченный вами параметр умножает сетку. У нас менялись два
«Форвард» (Forward)Вкладка «Настройки» (Settings)1/2, 1/3 или 1/4Делит интервал так, что тестер оценивает вторую половину отдельно, — ради этой проверки перебор и запускают
Критерий оптимизации (Optimisation criterion)Вкладка «Настройки» (Settings)Решите до того, как посмотрите на сеткуЭто метрика, по которой тестер ранжирует проходы, а значит, именно она решает, какая строка является верхней
«Моделирование» (Modelling)Вкладка «Настройки» (Settings)Грубый режим для прогонки, затем перепрогон уцелевшего на реальных тикахГрубые режимы годятся для ранжирования кандидатов, но никогда для публикуемой цифры
«Период» (Period)Вкладка «Настройки» (Settings)Достаточно длинный, чтобы вместить не один режим рынкаПеребор внутри одного тренда находит ту настройку, которая на нём ехала

Критерий заслуживает решения, а не значения по умолчанию. Ранжирование по чистой прибыли награждает тот проход, который взял на себя больше всего риска, а ранжирование по мере, построенной на просадке, — тот, который меньше всего торговал; фактор восстановления и существует потому, что эти два ответа расходятся. Наши собственные переборы вообще не судили по ранжированию тестера: каждого уцелевшего кандидата оценивали по профит-фактору на трёх раздельных окнах, и ранжирование внутри любого из них никогда ничего не решало.

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

  1. Сначала прогоните один бэктест на значениях по умолчанию и сохраните отчёт. Без базовой линии таблице проходов нечего побеждать — как запустить бэктест разбирает этот проход от начала до конца.
  2. На вкладке «Настройки» (Settings) выставьте «Оптимизацию» (Optimisation) в полный перебор для небольшой сетки, а «Форвард» (Forward) — в 1/3, чтобы тестер придержал последнюю треть интервала.
  3. На вкладке «Входные параметры» (Inputs) отметьте только те параметры, которые вы действительно тестируете, и задайте каждому «Старт» (Start), «Шаг» (Step) и «Стоп» (Stop). Два параметра с крупными шагами лучше четырёх с мелкими.
  4. Нажмите «Старт» (Start) и дайте прогону закончиться. Вкладку «Результаты оптимизации» (Optimisation Results) читайте как таблицу, а «График оптимизации» (Optimisation Graph) — как форму: одиночный пик это предупреждение, плато — находка.
  5. Возьмите уцелевших — не победителя — и перепрогоните каждого как одиночный бэктест на периоде перед окном оптимизации. Именно этот шаг дал каждый отрицательный вердикт в нашем наборе, и именно его пропускают.

Чтение результатов: три периода, а не один

Вот весь наш записанный набор, отсортированный по лучшему профит-фактору на выборке, которого достиг каждый перебор. IS — период, на котором подгонялась настройка, OOS — отложенная проверка, prior — более раннее окно, которого перебор не видел.

ШаблонПеребранная сеткаЛучший ISOOSPriorВердикт
ichimoku12 комбинаций × 3 окна1,370,890,80no_robust_edge
ma_crossover20 + 12 комбинаций, два таймфрейма1,230,89–0,940,78no_robust_edge
cci_level12 комбинаций × 3 окна1,071,050,92no_robust_edge
adx_trend12 комбинаций × 3 окна1,040,910,80no_robust_edge
breakout12 комбинаций × 3 окна1,040,79–0,890,64–0,84no_robust_edge
macd_signal12 комбинаций × 3 окна1,14–1,150,74–0,77no_robust_edge
rsi_reversal12 комбинаций × 3 окна0,91no_robust_edge
bb_bounce12 комбинаций × 3 окна0,91no_robust_edge

Прочитайте первый числовой столбец сверху вниз, а затем поперёк. Самый крупный результат на выборке во всём наборе дал и самое крупное обрушение: 1,37 у ichimoku упали до 0,89, а затем до 0,80. Этот порядок не совпадение — настройка, которая подходит окну лучше всех, по построению впитала больше всего шума этого окна.

Теперь прочитайте ту настройку, которая на самом деле подошла ближе всех. В таблице выше её нет, потому что она нигде не была верхней строкой: на той же сетке ichimoku SL50/TP150 показал 1,18 на выборке, 0,99 вне выборки и 1,00 на предшествующем окне. Три периода, и все примерно в ноль. Её записали как ближайшего кандидата и всё равно не приняли, потому что безубыток на трёх окнах — это не преимущество, а его отсутствие, аккуратно измеренное.

На этом фоне базовые линии, которые эти переборы пытались побить, лежат между 0,92 и 1,03. Ни один перебор не сдвинул выпущенное значение по умолчанию.

Ловушки, которых стоит избегать

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

Улучшаем и повторяем: что менять и когда остановиться

Меняйте одно, перепрогоняйте, сравнивайте с сохранённой базовой линией. Порядок, который тратит меньше всего времени:

  1. Расширяйте период раньше, чем сетку. Больше режимов рынка лучше, чем больше комбинаций. Перебор, покрывающий один тренд, найдёт настройку, которая на нём ехала, — при любом разрешении.
  2. Затем укрупняйте шаги, а не измельчайте их. Если результат существует только при SL47, он не существует.
  3. И только затем добавляйте параметр. Наши переборы до этого не дошли, потому что два параметра уже провалили планку трёх периодов.

Останавливайтесь, когда верно одно из этого, и записывайте, какое именно:

  • Уцелевший кандидат проходит все три периода. Выпускайте его и записывайте всю сетку, которую перебрали, — а не только сохранённый проход.
  • Лучший результат на выборке ниже 1,0. У вас есть настоящий ответ: два из наших восьми переборов закончились здесь, и закончиться здесь после 36 прогонов — дёшево.
  • Уцелевшие продолжают проходить одно окно и заваливать другое. Правило зависит от режима рынка. Дальнейший перебор произведёт больше настроек, зависящих от режима.
  • Вы начали объяснять, почему предшествующее окно «не считается». Это тот момент, когда перебор перестал быть проверкой.

Честная запись перебора — это диапазон, который вы покрыли, и вердикт, вместе. Каждый из наших восьми хранится именно так, и только поэтому эту статью вообще можно было написать по ним: один лишь сохранённый победитель не доказал бы ничего.

Дальнейшие шаги: проверка вперёд, затем решение

Оптимизация — второй шаг из четырёх. Последовательность такая: бэктест → оптимизация → проверка вперёд → демо-счёт, и каждый шаг убирает свой способ ошибиться.

  • Отрабатывайте цикл на том, что контролируете сами: соберите стратегию в EA Builder и переберите её стоп и цель своими руками — сетку, которую объявили вы, читать честно намного проще, чем унаследованную.
  • Формальная версия проверки на трёх периодах — это анализ вперёд (walk-forward), который катит разделение вперёд, а не фиксирует его в одной точке.
  • Что бы перебор ни вернул, отчёт, в котором он это возвращает, всё равно надо прочитать: чтение отчёта бэктеста MT5 разбирает, о какой именно совокупности сделок заявляет каждая итоговая цифра.
  • Чтобы увидеть, как выглядит законченная запись, когда числа всё же выжили: каждый из опубликованных советников несёт полный список закрытых сделок и манифест прогона.
  • То, как мы всё это тестируем, оцениваем и записываем, изложено в нашей методике тестирования.

Часто задаваемые вопросы

Сколько параметров стоит оптимизировать за раз?
Меньше, чем позволит тестер. Каждый перебор в нашем записанном наборе двигал ровно два параметра — стоп-лосс и тейк-профит — в диапазоне от 12 до 32 комбинаций, и ни один из восьми не дал настройки, которую мы были бы готовы выпустить. Добавление третьего и четвёртого параметра этого не чинит: оно умножает сетку и делает куда проще нахождение комбинации, подогнанной под шум вашего тестового окна. Если два параметра не способны дать результат, переживающий три периода, проблема в правиле, а не в разрешении перебора.
Какой профит-фактор искать в проходе оптимизации?
Смотрите на три числа, а не на одно. В нашем наборе лучший профит-фактор на выборке дошёл до 1,37 на шаблоне ichimoku — и та же самая настройка дала 0,89 вне выборки и 0,80 на более раннем окне. Настройка, подошедшая к пригодности ближе всех, выглядела на выборке гораздо скромнее: 1,18 при 0,99 и 1,00 на двух остальных периодах. Её всё равно не приняли, потому что безубыток на двух окнах из трёх — не преимущество. Высокое число на выборке — наименее информативная цифра на экране.
Достаточно ли одной проверки вне выборки, чтобы подтвердить оптимизированную настройку?
Нет, и у нас есть случай, показывающий почему. Шаблон macd_signal дал настройку, которая дошла до 1,14–1,15 вне выборки — чистое прохождение единственной отложенной проверки, — а затем показала 0,74–0,77 на окне перед тестовым периодом. Другая конструкция, cci_level, зашла дальше: 1,07 на выборке, 1,05 вне выборки и 0,92 на предшествующем окне. Двух периодов тоже не хватило. Обе вышли бы в работу по обычному правилу с одной отложенной проверкой.
Что означает, если оптимизация вообще не находит прибыльной настройки?
Это означает, что ответ у вас есть рано и дёшево, — и это хороший исход. Два перебора из наших восьми — rsi_reversal и bb_bounce — ни разу не дали профит-фактор выше 1,0 даже на том периоде, под который их подгоняли; их лучший результат на выборке составил 0,91. Правило, которое не удаётся заставить работать на данных, под которые его настраивали, не спасут ни более широкая сетка, ни более длинный прогон. Запишите диапазон, который перебрали, и вердикт — и переходите к следующей идее.

Связанные термины

Ссылки на глоссарий