Справка по MetaTrader 5Алгоритмический трейдинг, торговые роботыКак тестер загружает исторические данные

Как тестер загружает исторические данные

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

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

Перед запуском любого теста платформа выполняет синхронизацию истории:

  • С торгового сервера в терминал подкачиваются бары M1 и тики по выбранному символу. При первом запуске тестера в терминал загружается вся доступная история по символу тестирования.
  • Из терминала в тестирующий агент копируется история в сжатом виде. Агент работает локально, самостоятельно генерируя тики или используя реальные тиковые данные (если они доступны).
  • В мультивалютных тестах — при первом обращении к новому символу или таймфрейму тест останавливается, чтобы догрузить недостающую историю. При этом также загружается запас "сверх минимума", чтобы индикаторы могли рассчитываться с первого же бара.

Минимальные требования к глубине истории

Тестер всегда загружает "буфер истории до старта", чтобы обеспечить стабильность расчётов:

  • D1 и ниже — от начала предыдущего года. Это обеспечивает запаса в минимум 1 год истории.  Например, если дата начала тестирования 01.03.2023, то тестер скачает данные из терминала историю, начиная с 01.01.2022. То есть 14 месяцев до даты с начала тестирования.
  • W1 — 100 недельных баров (~2 года).
  • MN1 —  100 месячных баров (~8 лет).

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

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

start time changed to 2024.03.15 00:00 to provide data at beginning

Это не ошибка, а встроенный механизм обеспечения корректности.

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

Тестер стратегий хранит историю каждого символа централизовано для всех локальных агентов в структуре вида (пример для EURUSD):

\Program Files\MetaTrader 5 Strategy Tester\Tester\bases\<имя_торгового_сервера>\history\EURUSD

Тиковая история по символу EURUSD хранится аналогично:

\Program Files\MetaTrader 5 Strategy Tester\Tester\bases\<имя_торгового_сервера>\ticks\EURUSD

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

Используйте более мелкий таймфрейм.

Тестер всегда проверяет, чтобы перед началом моделирования на выбранном таймфрейме было не менее 100 баров.

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

  • Если вы запускаете тест на D1, нужно минимум 100 дневных баров (≈ 5 месяцев).
  • Если выбрать H1 или M15, то требуется уже 100 часовых или 15-минутных баров. Такой объём есть почти всегда, даже если история ограничена.
  • Поэтому при нехватке истории сдвиг даты старта теста будет меньше на младших ТФ, чем на старших.

alert_icon Однако советник должен корректно работать на выбранном таймфрейме. Если стратегия изначально рассчитана на D1, то при тесте на M15/H1 нужно убедиться, что она правильно синхронизирует свои расчёты и не начнёт «пересчитывать» сигналы слишком часто.

Минимальная история для разных таймфреймов и возможный сдвиг даты начала тестирования

Таймфрейм тестирования

Минимум, который загружает тестер

Вероятный сдвиг начала теста

M1

≥100 баров (≈1 час 40 мин)        

Практически нет сдвига

M15

>100 баров (~25 часов)

Сдвиг минимален

H1

≥100 баров (~4 суток)        

Сдвиг минимален

D1

≥100 баров (~5 месяцев)        

Может сместить старт на 5 месяцев

W1

≥100 недель (~2 года)            

Сдвиг до 2 лет

MN1

≥100 месяцев (~8 лет)            

Сдвиг до 8 лет, если история ограничена

Как читать таблицу

  • При тесте на D1 тестер обязательно подвинет дату вперёд, пока не накопится хотя бы 100 дневных баров.
  • Если переключиться на H1 или M15, тестер потребует всего несколько суток данных, что обычно доступно — тест стартует ближе к выбранной дате.
  • На старших таймфреймах (W1, MN1) смещение может быть очень большим, так как нужны годы истории.

Дополнительные особенности тестера

  • Режимы генерации тиков:
  • Every Tick — генерация тиков на основе таймфрейма M1 обеспечивает максимальную реалистичность. Высокая нагрузка на ресурсы компьютера и самый затратный по времени вид тестирования.
  • 1 Minute OHLC — быстрее, но менее реалистично. Тиковая последовательность строится только по OHLC ценам минутных баров, количество сгенерированных контрольных точек существенно уменьшается — следовательно, уменьшается время тестирования. Запуск функции OnTick() производится на всех контрольных точках, которые строятся по ценам OHLC минутных баров.
  • Open Prices Only — только цены открытия баров на таймфрейме, выбранном для тестирования. Требует осторожности в мультивалютных тестах. Функция эксперта OnTick() запускается только в начале бара по цене Open. Из-за этой особенности стоп-уровни и отложенные ордера могут срабатывать не по заявленной цене (особенно при тестировании на старших таймфреймах). В обмен за это мы получаем возможность быстро провести оценочное тестирование эксперта. Самый быстрый и наименее точный вид тестирования.
  • Every Tick based on real ticks —  максимальная точность тестирования. Вместо сгенерированных на основе минутных данных используются реальные тики, накопленные по финансовым инструментам брокером. В режиме реальных тиков также используются и минутные бары. По ним проверяются и корректируются тиковые данные. Это также позволяет избежать расхождения графиков в тестере и клиентском терминале.
  • Симуляция времени:
    • В тесте TimeLocal(), TimeTradeServer() и TimeGMT() возвращают одинаковые значения.
  • OnTimer и Sleep:
    • Работают и в тестах. Таймеры замедляют симуляцию, Sleep() моделирует паузы, но при бесконечном цикле возникает ошибка.

Организация агентов и кэширования

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