Главная > Блог > MQL5: OnTick и OnTimer — как выбрать при разработке EA

MQL5разработка EAMT5

MQL5: OnTick и OnTimer — как выбрать при разработке EA

Опубликовано: 2026-10-29Время чтения: ~2 мин
⏱ Эта статья отражает информацию на дату публикации. Показатели EA (PF, DD, годовая доходность) меняются с реальной торговлей и повторной валидацией — актуальные данные смотрите на страницах EA. Смотреть актуальные результаты EA →

Вывод: решение — по новой свече, а работа со временем — через OnTimer

Сначала вывод. Если EA принимает торговые решения на более крупных таймфреймах, таких как H1 или H4, достаточно проверять условия только на первом тике новой свечи. Если повторять одни и те же расчёты на каждом тике, это лишь нагружает CPU, а решение не меняется. Зато для задач, которые должны выполняться даже без поступления тиков, используется OnTimer. Например: записать состояние на выходных или упорядочить ордера в заданное время.

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

Сравнение рекомендованных брокеров →

🎁 Скачать бесплатный EA

📧 Бесплатный email-курс (8 писем) + пакет из 13 индикаторов MT5 только для подписчиков

Сразу после подписки вы получите ссылку на пакет только для подписчиков с нашими 13 индикаторами MT5: скомпилированные файлы (.ex5), исходный код и руководство по установке. Затем 8 писем об основах алгоритмической торговли, правильном чтении бэктестов и выборе брокера (первые 5 дней по одному в день, затем через 7, 14 и 30 дней после подписки). Также вы получите уведомление перед каждым повышением цены версий, продаваемых на MQL5 Market (стартовая цена, которая повышается ступенями по мере продаж). На этом сайте наши советники бесплатны при наличии реального счёта у брокера-партнёра.

* Конфиденциальность строго защищена. Отписаться можно в любое время.

Как это работает: по тикам и по времени

OnTick (по тикам)

OnTick вызывается каждый раз, когда по символу, на котором работает EA, приходит новая цена (тик). В периоды сильного движения рынка он может вызываться несколько раз в секунду, а на выходных, когда рынок стоит, не вызывается ни разу.

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

OnTimer (по времени)

OnTimer вызывается через интервал, заданный функцией EventSetTimer(). Он работает независимо от движения цены, поэтому вызывается и тогда, когда рынок закрыт. Таймер у одного EA только один, и если обработка не успевает завершиться, вызовы пропускаются так же. Кроме того, нет гарантии, что вызов произойдёт точно через указанный интервал.

ПараметрOnTickOnTimer
Что вызываетОбновление ценыИстечение заданного времени
Когда рынок закрытНе вызываетсяВызывается
Частота вызововЧем неспокойнее рынок, тем чащеПрактически постоянная
Для чего подходитРешения о входе и выходеПериодические расчёты и задачи по расписанию
Главная оговоркаТяжёлая обработка приводит к потере тиковСрабатывает, даже если новой цены нет

Как писать низкочастотные стратегии, не тратя CPU впустую

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

datetime g_lastBar = 0;

void OnTick()
{
   datetime cur = iTime(_Symbol, PERIOD_H4, 0);
   if(cur == g_lastBar) return;   // пока свеча та же, ничего не делаем
   g_lastBar = cur;
   // здесь принимаем решение по закрытой свече (сдвиг 1)
}

Также важно создавать хэндлы индикаторов один раз в OnInit, а не пересоздавать их на каждом вызове OnTick. Если используется OnTimer, то в OnDeinit нужно вызвать EventKillTimer(), чтобы остановить таймер.

Когда на VPS на нескольких графиках работают разные EA, такая разница проявляется в нагрузке на CPU. О том, как выбирать VPS, мы рассказываем в разделе о VPS.

Что может проверить тот, кто выбирает EA

Даже без доступа к исходному коду кое-что проверить можно:

  • Описание и параметры: есть ли настройка вроде «принимать решения только на новой свече»
  • Загрузка CPU на VPS: если после отключения одного EA нагрузка заметно падает, возможно, он выполняет тяжёлую обработку на каждом тике
  • Журнал экспертов: нет ли одинаковых записей, которые повторяются на каждом тике
  • Результаты тестера: если EA принимает решения по цене открытия свечи, результаты в режимах «только цены открытия» и «все тики» не должны сильно различаться. Если расхождение большое, значит, EA реагирует и на движение цены внутри свечи

Базовые сведения об установке и настройке EA смотрите в разделе как настроить EA.

Ограничения и оговорки

Скажем и о неудобных сторонах.

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

У EA на H4, например ETHEREUM EA, где сделок мало, такие различия в архитектуре заметить ещё сложнее. Но то, что можно проверить снаружи, ограничено. Мы можем утверждать что-то определённо только о коде, который написали сами.

Итоги

  • OnTick вызывается при поступлении цены, OnTimer — через заданные промежутки времени
  • События, пришедшие во время обработки, не ставятся в очередь, а пропускаются. Тяжёлая обработка ведёт к потере тиков
  • В низкочастотных стратегиях достаточно принимать решения только на новой свече — так CPU не тратится впустую
  • Для задач, которые должны выполняться и когда тиков нет, используйте OnTimer
  • От риска внутри свечи защищает стоп-ордер. Лёгкая обработка не повышает результативность
  • Другие практические советы собраны в разделе знания об EA и MT5

📧 Бесплатный email-курс (8 писем) + пакет из 13 индикаторов MT5 только для подписчиков

Сразу после подписки вы получите ссылку на пакет только для подписчиков с нашими 13 индикаторами MT5: скомпилированные файлы (.ex5), исходный код и руководство по установке. Затем 8 писем об основах алгоритмической торговли, правильном чтении бэктестов и выборе брокера (первые 5 дней по одному в день, затем через 7, 14 и 30 дней после подписки). Также вы получите уведомление перед каждым повышением цены версий, продаваемых на MQL5 Market (стартовая цена, которая повышается ступенями по мере продаж). На этом сайте наши советники бесплатны при наличии реального счёта у брокера-партнёра.

* Конфиденциальность строго защищена. Отписаться можно в любое время.

Есть вопрос о советниках или Forex?

Задайте его на трейдерском форуме Nattzy (бесплатная регистрация). Можно спрашивать не только по этой статье — о настройке советников, выборе брокера и многом другом.

Спросить на Nattzy ↗

Комментарии и вопросы