03. Как тестировать роботов MT4?

03. Как тестировать роботов MT4?

00. Аннотация

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

⚠️
Даже идеально подобранные настройки, при которых на исторических данных бот показывает хорошую прибыльность и допустимые просадки, НЕ ГАРАНТИРУЮТ ТАКИХ ЖЕ РЕЗУЛЬТАТОВ В РЕАЛЬНОЙ ТОРГОВЛЕ.

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

В этой статье покажу как я тестировал советника Eve в терминале MetaTrader 4 и какие параметры для оценки успешности применял. Полные результаты моего тестирования Eve за период с 2019 по 2023 год доступны в этой статье.

01. Шаги тестирования

Для тестирования робота нужно последовательно выполнить следующие шаги, которые подробно рассмотрим ниже:

  1. Подготовить терминал к тестированию.
  2. Загрузить исторические данные в терминал.
  3. Прогнать робота с разными параметрами для сравнения результатов, выполнив оптимизацию параметров.
  4. Разобрать подробности сетки с максимальной просадкой, выполнив прямое тестирование.

02. Подготовка терминала к тестированию

Настройки терминала по умолчанию рассчитаны на бесперебойную торговлю в реальном времени, а не для проведения тестирования на больших временных периодах. Поэтому перед тестированием с использованием большого количества исторических данных, особенно торговых советников таких как Eve, которые работают на низких таймфреймах, (например, M1, M5 или даже на тиках), нужно настроить терминал на работу с бОльшим, чем обычно количеством баров. Для этого установите параметры в настройках терминала (меню Сервис -> Настройки, закладка Графики) как на рисунке ниже.

Настройка максимального количества баров истории

Необходимое для тестирования на интервале M1 количество баров можно рассчитать умножив количество дней в тестируемом периоде на количество минут в сутках 44_640. Для тестирования полного месяца на минутках нужно не менее 1_500_000 баров, а для тестирования года не менее 17_000_000.

⚠️
ВАЖНО! После завершения тестирования обязательно верните параметры в исходные значения. Иначе терминал будет загружать в память огромное количество ненужных в реальной торговле баров. Из-за этого он может работать медленнее, а VPS провайдер может закрыть терминал или всю удаленную сессию принудительно из-за перерасхода памяти или процессора, что приведет к остановке реальной торговли.

03. Загрузка исторических данных в терминал

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

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

  1. От вашего брокера или разработчика терминала MetaTrader 4 компании MetaQuotes. Roboforex.com как и большинство брокеров предоставляет историю от MetaQuotes. Качество исторических данных от MetaQuotes считается не самым лучшим. По некоторым инструментам особенно на низких таймфреймах в них есть пробелы и неточности. Для популярных пар EURUSD, GBPUSD и XAUUSD ошибок не так много. Поэтому для тестирования готовых советников этого будет достаточно, тем более терминал умеет моделировать недостающие данные. Для разработки советников лучше выбрать более точный источник истории.
  2. Из внешних файлов. Например, брокер NPBFX не предоставляет возможности загрузить в свой терминал историю даже с MetaQuote. В этом случае нужно скачать файлы с данными по нужным вам инструментам. Например, скачать с их же сайта, и импортировать историю в терминал вручную.

Загрузим историю цен XAUUSD из раздела меню Сервис -> Архив котировок. В левой части окна нужно выбрать инструмент, историю которого будем загружать. Дважды на него щелкнуть, чтобы открылись таймфреймы, историю которых будем загружать. Выбрать нужный таймфрейм, в нашем случае M1 (на этом интервале торгует Eve), и нажать кнопку Загрузить.

Архив котировок для загрузки истории

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

Глубина истории в Архиве котировок

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

ℹ️

ВАЖНО ПОНИМАТЬ: На Forex-е брокер является посредником между вами и рынком. Поэтому все данные о текущих ценах в виде тиков, других параметров каждого инструмента (например, минимального лота, шага лота, вида и величины спреда, доступных плеч, способа расчета маржи, стоимости swap-переносов и т.д.) определяет брокер и фактически может их менять на лету.

Поэтому тики и бары могут отличаться у разных брокеров и могут не совпадать с данными конкретной биржи, где брокер размещает ваши ордера (или по крайней мере обещает это делать). Тоже самое верно и для исторических данных. Фактически терминал использует данные конкретного брокера, а не биржи напрямую. А значит, что любое тестирование - это лишь модель поведения рынка и практически никогда не совпадает с ним.

Но других простых способов оценки приближения истории к реальности не существует.

04. Виды тестирования

Для проведения тестирований в терминал встроен специальный инструмент Вид -> Тестер стратегий. В нем доступны два разных режима:

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

04.1. Прямое тестирование

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

  1. Отчет о результатах работы: качество моделирования, количество ордеров, прибыль/убыток, просадки, результативность и пр.
  2. График роста/падения Баланса и Средств на каждый ордер или изменение параметров открытых ордеров, которые выполнил робот.
  3. Таблица всех открытий, закрытий и изменений ордеров, которые выполнил робот.
  4. График цены с отметками открытия и закрытия ордеров.

Все результаты можно сохранить в HTML-файлы или картинки для детального изучения.

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

04.2. Оптимизация параметров

Этот режим используется для:

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

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

Подбор параметров тестер может выполнять простым перебором с заданными начальным, конечным значениями и шагом или с помощью алгоритма нелинейной оптимизации. В терминале используется генетический алгоритм. Он позволяет сократить количество переборов, однако не гарантирует 100% оптимальности параметров. Простой перебор и генетическая оптимизация требуют большого количества вычислительных мощностей. На арендуемых для торговли VPS обычно провайдер выдает очень слабые виртуальные машины с малым количеством памяти и процессорных ядер, поэтому такая оптимизация может занять очень долгое время или не завершиться вовсе. Особенно если тестируется большой период на маленьком таймфрейме, а у советника еще и большое количество настроек, которые нужно перебирать. Так для тестирования Eve только с изменением одного параметра в трех разных значениях лота на периоде в один год на минимальном тарифе forex-box.com занимает несколько часов.

05. Тестирование параметров торгового советника Eve

Задача нашего тестирования - проверить результативность робота Eve на истории цен XAUUSD в августе 2021 года. Для этого сначала проведем тестирование в режиме оптимизации параметров для трех вариантов настроек лота. Изучим итоговые результаты прибыли/убытка и просадок для каждого лота. Следующим шагом проведем прямое тестирование на сетке с самой большой просадкой для лота с консервативными настройками. По результатам теста подробно изучим собранную сетку и возможные варианты действий владельца робота в этот момент.

Будем тестировать Eve c тремя разными настройками лота на $1000 депозита:

  • 0.01 - рекомендованные разработчиком консервативные настройки;
  • 0.02 - рекомендованные разработчиком агрессивные настройки при условии возможности быстрого долива депозита в размере 100%;
  • 0.015 - среднее значение.

Я ранее уже проводил тестирование Eve за период с 2019 по 2023 исходя из стартового депозита в $10_000 (см. результаты в статье). Поэтому настроим параметры оптимизации из этой же установки, т.е. тестировать будем для стартовых лотов: 0.1, 0.15 и 0.2.

05.1 Оптимизация Eve

  1. Убедись, что терминал подготовлен для тестирования.
  2. Убедись, что в терминал загружены исторические данные по XAUUSD.
  3. Открой в терминале тестер стратегий из меню Вид -> Тестер стратегий и настрой его как показано ниже. Настройка тестера для оптимизации
  4. Выбери из списка торговый советник Eve.
  5. Выбери символ XAUUSD.
  6. Выбери период M1. Именно в на этом периоде работает робот Eve, несмотря на то что ордера открывает как на M1, так и на более старших таймфреймах, а закрывает их на тиках.
  7. Выбери модель Все тики (наиболее точный метод на основе всех наименьших доступных таймфреймов для генерации каждого тика). Эта единственная модель, которая подходит для тестирования роботов, которые торгуют на минимальных таймфреймах и используют динамические закрытия ордеров по take-profit, stop-loss или trailing-stop. Остальные две модели подходят для роботов, которые открывают и закрывают ордера только в момент открытия свечей и не используют тики для своих действий. Они намного быстрее этой, но сильно неточные.
  8. Укажи спред, который будет использоваться при тестировании. Можно использовать Текущий или явно указать значение. Если тестируете в выходные биржевые дни, то лучше указывать значение спреда явно, потому что брокеры на выходные его обычно устанавливают завышенным. Установите его равным значению, которое использовал ваш брокер.
  9. Установи галочку Использовать дату и выбери дату начала 01.08.2021 и конца периода 01.09.2021. ВАЖНО! Дата начала включена в периода, а дата окончания нет, т.е. период задается [От; До).
  10. Установи галочку Оптимизация.
  11. Открой параметры советника, нажав кнопку Свойства эксперта.
    1. На закладке Тестирование установите параметры как картинке ниже. ВАЖНО! Стартовый депозит рекомендую устанавливать на несколько порядков больше, чем тот, под который рассчитаны параметры бота. Это нужно сделать для случаев, когда при каких-то тестируемых настройках реальный депозит, в нашем случае в $10_000, будет исчерпан обеспечительной маржой. В таком случае при сумме равной реальному депозиту в результатах теста терминал покажет 100% убыток и оценить размер долива, который бы спас депозит не получится. Придется увеличивать стартовый депозит и запускать тестирование заново. Обратите внимание, что Eve работает со счетами ProCent, о которых тестер терминала не знает, поэтому начальный депозит нужно вводить в центах, т.е. еще в 100 раз больше. Кстати, результаты тестирования прибыль и просадки терминал в этом случае тоже покажет в центах. Свойства эксперта. Тестирование
    2. На закладке Входные параметры установите параметры как картинке ниже. Для задания параметров роботу тестер будет перебирать значения из колонки Старт, увеличивая каждый раз его на значение Шаг, пока не дойдет до значения Стоп. Свойства эксперта. Входные параметры
    3. Поставь галочку напротив параметра Лот.
    4. Задай начальное значение лота 0.1.
    5. Задай шаг лота 0.05.
    6. Задай конечное значение лота 0.2.
    7. Параметр TrailingStop использовать не будем, потому что тестирование с бОльшим числом параметров займет намного больше времени. В самостоятельных тестах их конечно можно использовать. Например, для Eve можно добавить в оптимизацию параметр TrailingStop. Тогда тестер проверит параметры лота вместе с комбинацией трейлинг стопа и без него на тестируемом периоде, что определить в каком случае прибыль больше, а просадка меньше. ВАЖНО! Трейлинг стоп очень чувствителен к реальным тикам цены. В режиме тестирования терминал моделирует в рамках каждой свечи всего 4 тика по основным параметрам Open, Low, High, Close и несколько промежуточных. В реальной жизни внутри даже минутной свечи тиков может быть сильно больше и тогда TrailingStop сработает иначе. Для тестов параметров чувствительных к тикам нужно использовать историю не свечей, а биржевых тиков желательно вашего брокера. Чтобы заставить терминал MetaTrader 4 работать с историей тиков нужно использовать дополнительные программы и особым образом их настроить. Такое тестирование сложнее организовать в ссылках ниже есть статьи на эту тему.
  12. Нажми кнопку Старт.
  13. Дождись завершения тестирования. Оптимизация может занять длительное время.

06.2 Разбор результатов оптимизации Eve

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

  1. Результаты оптимизации, где доступна таблица с результатами торговли робота по прибыли/убытка и просадками для каждой комбинации параметров. Результат оптимизации
  2. График оптимизации, где точками показаны итоговые балансы после завершения торговли роботов для каждой комбинации параметров. График оптимизации

Как видно из таблицы результатов оптимизации максимальную прибыль робот получает при лоте 0.2 в размере $3102. При этом максимальные просадки при настройках лота для реального депозита в $10000 составили:

  • для лота 0.2 - $26765 - это 267% просадки от исходного депозита, что эквивалентно 167% необходимого долива, которые бы спасли депозит от margin call.
  • для лота 0.15 - $21357 - это 213% просадки от исходного депозита, что эквивалентно 113% необходимого долива, которые бы спасли депозит от margin call.
  • для лота 0.1 - $14126 - это 141% просадки от исходного депозита, что эквивалентно 41% необходимого долива, которые бы спасли депозит от margin call.

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

Теперь зная результаты торговли Eve за август 2021 года с разными настройками, можно подробно изучить когда и какие сетки приводят к большой просадке. Для этого нужно провести прямое тестирование на том же периоде, используя один вариант настроек робота явно. В следующем разделе проведем прямое тестирование для 0.01 на $1000 и разберем причины просадки в 141%, которая потребовала бы долива депозита в 41% даже на консервативных настройках.

06.3 Прямое тестирование Eve

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

  1. Для этого нужно просто снять галочку Оптимизация с настройках. Настройка тестера для прямого тестирования
  2. Настройки эксперта на закладках Тестирование и Входные параметры можно оставить такие же как и для оптимизации. Только для прямого тестирования будут использоваться настройки робота из колонки Значение.
  3. Нажми кнопку Старт.
  4. Дождись завершения тестирования.

06.4 Разбор результатов прямого тестирования Eve

Сводные результаты тестирования доступны на вкладке Отчет. Результаты тестирования. Отчет

Разберем важные показатели:

  1. Качество моделирования показывает насколько качественно тестер подобрал тики на основании исторических данных высоких таймфреймов. ВАЖНО! 25% для интервала M1 - максимально возможное качество моделирования тиков, потому что фактически моделирования не проводилось (см. статью Формула оценки качества моделирования). Чтобы получить качество выше необходимо заставить терминал использовать исторические тики, а не моделировать их (см. статью Способ моделирования тиков с качеством 99%). Такая точность важна для разработки робота и требует отдельных программ и особых настроек терминала. Моделирование схематично отображается в виде полосы в следующей строке отчета. Эта полоса может быть трех цветов:
    • Серый — эта часть имеющихся данных не участвовала в тестировании. Серый цвет может появиться, если был указан диапазон дат в настройках тестирования;
    • Красный — на этом отрезке моделирование не проводилось за неимением данных более мелкого периода. При этом использовались только данные выбранного в настройках тестирования периода;
    • Зеленый — моделирование на данном участке проводилось. Причем чем ярче цвет, тем более качественным было моделирование. Например, при тестировании на периоде H1 темно-зеленая полоса может свидетельствовать о том, что для тестирования использовались данные тридцатиминутного периода M30, а самая яркая — об использовании минутных данных M1;
  2. Чистая прибыль — финансовый результат всех сделок. Этот показатель представляет собой разность “Общей прибыли” и “Общего убытка”.
  3. Матожидание выигрыша — математическое ожидание выигрыша. Этот статистически рассчитываемый показатель отражает среднюю прибыльность/убыточность одной сделки. Также можно считать, что он отражает предполагаемую прибыльность/убыточность следующей сделки.
  4. Абсолютная просадка — наибольший убыток ниже значения начального депозита;
  5. Максимальная просадка — наибольший убыток от локального максимума в валюте депозита и в проценте от депозита.
  6. Относительная просадка — наибольший убыток в процентах от максимального значения Средств и соответствующая ему денежная величина.

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

  1. Чтобы перейти к ордерам сетки нужно дважды кликнуть на графике в месте просадки или определить номер ордера по оси абсцисс. После чего перейти на закладку Результаты к списку конкретных ордеров и их параметрам. Результаты тестирования. Ордеры
  2. В таблице видим, что 09.08.2021 в 09:44 20 ордеров закрылись одновременно по take-profit при цене 1746.98.
  3. Первый ордер в сетке имеет код 67. Если промотать таблицу вверх и найти первое упоминание этого ордера в колонке Ордер можно найти дату, время и цену его открытия, а также первое значение take-profit для него и всей сетки. Он был открыт 05.08.2021 в 19:45. Результаты тестирования. Первый ордер сетки
  4. Так можно сделать для каждого ордера сетки и занести эти данные в отдельную таблицу, чтобы проверить возможно ли было остановить автоторговлю и не доливать депозит и какая просадка была на каждом ордере.
  5. Чтобы построить график цены для этой сетки можно повторно запустить прямое тестирование, только теперь можно уменьшить интервал до [04.08.2021-10.08.2021) и включить галочку Визуализация, чтобы на графике увидеть как развивались события и как открывались новые ордера, а также когда они были закрыты. Результаты тестирования. График цены
  6. Из таблицы результатов и графика видно, что сетка собиралась на движении цены размахом в $124.04 (12404 пипса).
  7. Чтобы проверить можно ли было не доливать депозит, а просто отключить авто-торговлю и ждать, то необходимо собрать таблицу из всех ордеров сетки с их ценами открытия и take-profit, который был установлен роботом в момент открытия каждого ордера. Для каждого ордера посчитать среднюю цены сетки и просадку от минимальной цены на графике. Для проверяемой сетки можно было отключить торговлю на 14-м ордере и ждать 4 дня. Результаты тестирования. Таблица анализа сетки

Заключение

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

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

  1. Технические параметры вашего терминала: сетевые задержки от терминала до серверов брокера, тормоза виртуальных машин терминала.
  2. Размеры спреда, стоимости swap-переносов и комиссии за торговлю и плечи. Каждый брокер устанавливает их по-разному и может меняет несколько раз за торговый день.
ℹ️
Чтобы получить этот инструмент для торговли напишите мне в Telegram @sournkz или по почте denis@kislitsyn.me.

Удачных испытаний и торговли!

Ссылки

  1. RTFM встроенный в терминал.
  2. Формула оценки качества моделирования
  3. Способ моделирования тиков с качеством 99%
  4. How to Perform Accurate Backtests in MT4 to Reach 99% Modelling Quality Using Free Tick Data and Real Variable Spread
  5. Почему роботы сливают. Пример расследования отклонений тестов от реальной торговли