Как устроен Expert Advisor в MetaTrader?
Expert Advisor (советник) — это программа на языке MQL5, которая запускается внутри терминала MetaTrader 5 и выполняет торговые действия автоматически. Для новичка советники выглядят как магия: робот сам открывает и закрывает сделки, следит за рынком, переносит стопы. На самом деле устройство советника предельно логично: платформа задаёт жёсткий каркас из нескольких функций, а разработчик заполняет этот каркас логикой своей стратегии. В этой статье разберём, как устроен Expert Advisor изнутри: его структуру, жизненный цикл, входные параметры и типичные ошибки начинающих.
Что такое Expert Advisor
Expert Advisor — это тип MQL5-программы, который прикрепляется к графику и работает непрерывно, пока график открыт. В отличие от скрипта, который выполняется один раз и завершается, советник живёт вместе с графиком: он реагирует на рыночные события и может работать неделями и месяцами. Терминал сам управляет жизненным циклом советника: запускает его, подаёт события и останавливает, когда это необходимо.
Архитектура советника устроена таким образом, что программист не контролирует общий поток программы. Вместо этого платформа в нужные моменты вызывает специальные функции-обработчики, которые вы определяете в коде. Такой подход называется событийным: ваш код — это набор реакций на события рынка и терминала. Чтобы создать советника, достаточно написать несколько таких обработчиков и наполнить их торговой логикой.
Чем советник отличается от скрипта и индикатора
Чтобы лучше понять устройство советника, сравним его с другими типами MQL5-программ. Скрипт выполняется один раз и завершается сам: например, скрипт может пересчитать объём позиции или удалить все объекты с графика. Индикатор — это программа для визуального анализа: она рисует на графике линии и зоны, но не торгует. А советник — продолжает работать непрерывно: он прикрепляется к графику, получает события в реальном времени и может торговать автоматически.
Это различие определяет и структуру программ. Скрипт имеет одну главную функцию и работает «от начала до конца». Индикатор использует собственный каркас с буферами отрисовки. Советник живёт по событийной модели: его функции вызываются платформой при наступлении событий — нового тика, таймера, изменения торгового счёта. Понимание этих отличий помогает не путать типы программ и выбирать правильный инструмент под задачу.
Жизненный цикл советника: три главные функции
Любой советник строится вокруг трёх обязательных функций. Первая — OnInit: она вызывается один раз, когда советник прикрепляется к графику и начинает работу. Внутри OnInit выполняется подготовка: читаются входные параметры, создаются индикаторы, проверяется, может ли советник работать на текущем графике, выводятся начальные сообщения в журнал. Именно здесь вы сообщаете платформе, что советник готов к работе, — и если подготовка не удалась, возвращаете код ошибки, чтобы терминал не запускал робота.
Вторая, и самая важная, функция — OnTick. Она вызывается на каждый новый тик, то есть при каждом минимальном изменении цены на графике. OnTick — это «сердце» советника: здесь проверяются условия входа и выхода, анализируются индикаторы, рассчитывается размер позиции и отправляются торговые команды. Вся торговая логика стратегии живёт именно в этой функции, поэтому она должна быть быстрой и аккуратной: помните, что OnTick может вызываться десятки раз в секунду, и каждый лишний тяжёлый расчёт замедляет робота.
Третья функция — OnDeinit: она вызывается один раз при остановке советника. Здесь происходит корректное завершение работы: удаление созданных объектов, вывод итоговых сообщений, сохранение состояния, если это необходимо. Типичная ошибка новичков — полностью игнорировать OnDeinit, однако корректная очистка защищает терминал от «мусора» и от ошибок при повторном запуске советника.
Помимо трёх базовых функций, платформа поддерживает и другие обработчики. OnTimer вызывается по таймеру через заданный интервал — удобно для задач, которые не зависят от тиков, например для периодического пересчёта статистики. OnTrade вызывается при изменении состояния счёта, например после исполнения ордера, и позволяет советнику реагировать на результат своих же команд. Эти функции необязательны, но расширяют возможности советника и делают его по-настоящему гибким.
Входные параметры: интерфейс советника
Важная часть устройства советника — входные параметры. Это переменные, объявленные с модификатором input: они отображаются в окне настроек советника и позволяют пользователю менять поведение программы без изменения кода. Например, входные параметры могут задавать размер лота, риск на сделку, период скользящей средней или порог срабатывания индикатора, разрешение на торговлю в определённые часы.
Грамотно спроектированный набор входных параметров — признак профессионального советника. Он превращает программу в гибкий инструмент: одну и ту же стратегию можно настраивать под разные рынки, стили торговли и уровни риска, просто меняя параметры в окне терминала или в файле настроек. Новичку стоит привыкнуть к важному правилу: всё, что может меняться от счёта к счёту или от рынка к рынку, должно быть входным параметром, а не «зашитым» в код значением.
Как терминал запускает советник: событийная модель
Понимание событийной модели — ключ к чтению чужого кода и к отладке собственного. Когда вы прикрепляете советник к графику, платформа вызывает OnInit. Затем на каждый новый тик вызывается OnTick — до тех пор, пока советник не будет остановлен. Любые команды терминала — «удалить советник», «закрыть график», «переключить период или символ» — завершаются вызовом OnDeinit.
Из этой модели следует несколько практических выводов. Во-первых, код в OnInit выполняется один раз, поэтому тяжёлые подготовительные вычисления лучше делать именно там, а не в OnTick. Во-вторых, OnTick не должен содержать «вечных циклов» или долгих ожиданий — он блокирует работу терминала и может привести к зависанию. В-третьих, состояние стратегии, которое должно переживать перезапуск советника, нужно сохранять заранее — например, с помощью глобальных переменных терминала или файлов.
Инструменты внутри советника: индикаторы, цены, ордера
Внутри функций советника вам доступны все инструменты платформы. Во-первых, это рыночные данные: текущие цены Bid и Ask, последний тик, исторические данные графика через функции типа CopyRates, CopyClose и им подобные. Во-вторых, это технические индикаторы: вы можете создать индикатор в OnInit с помощью IndicatorCreate и получать его значения через функции типа iMA, iRSI или CopyBuffer. Всё это позволяет советнику видеть рынок так же, как видит его трейдер на графике.
В-третьих, это торговые функции. Советник может отправлять рыночные и отложенные ордера, модифицировать их, закрывать позиции, получать состояние счёта через функции AccountInfo, перебирать открытые позиции через PositionsTotal и PositionGetTicket, а также идентифицировать собственные сделки с помощью магического номера. Всё это превращает советник в полноценную торговую систему, которая умеет всё, что умеет трейдер в терминале, — только быстрее, точнее и дисциплинированнее.
Как устроен типовой советник: пример структуры
Даже сложный торговый робот строится по одной схеме. В OnInit создаются индикаторы и читаются параметры, при несовместимости настроек возвращается код ошибки. В OnTick происходит последовательность проверок: есть ли сигнал на вход (например, пересечение скользящих средних), разрешает ли торговать фильтр тренда, не блокирует ли фильтр времени и волатильности, нет ли уже открытых позиций по этой стратегии. Если все условия выполнены, советник рассчитывает лот исходя из риска и расстояния до Stop Loss, отправляет ордер и фиксирует действие в журнале.
После открытия позиции советник продолжает следить за ней: переносит стоп в безубыток, управляет тейк-профитом, а при необходимости — закрывает сделку по сигналу или по лимиту серии. Такой цикл — «проверка условий, вход, сопровождение, выход» — универсален: на его основе строятся и простейшие роботы, и сложные многофакторные системы с несколькими индикаторами, фильтрами и автоматическим риск-менеджментом.
Как читать чужой код советника
Умение разбирать чужие советники — важный навык, и знание структуры здесь очень помогает. Начните с блока входных параметров: он сразу покажет, какие настройки выставляет автор и какую стратегию задумал. Затем прочитайте OnInit: там видно, какие индикаторы и объекты использует робот. Потом переходите к OnTick: ищите проверки условий, вызовы торговых функций и использование магического номера. Такой порядок чтения превращает незнакомый код из «китайской грамоты» в понятную последовательность действий.
Обращайте внимание на проверку результатов торговых функций и на логирование: профессиональный код почти всегда пишет диагностику в журнал. Если советник «молчит» о своих действиях — это повод отнестись к нему с осторожностью, особенно при установке на реальный счёт. Понимание структуры позволяет быстро оценить и качество кода, и уровень автора.
Типичные ошибки при создании советников
Первая ошибка — тяжёлый код в OnTick. Новички выполняют сложные расчёты на каждый тик, и терминал начинает тормозить. Решение — выносить вычисления в OnInit и в блок, срабатывающий только при появлении новой свечи, а также переиспользовать данные вместо повторного запроса к серверу.
Вторая ошибка — игнорирование результата торговых функций. Каждый вызов отправки ордера возвращает код результата; если его не проверять, советник будет «молча» терять сделки и вы не узнаете о проблеме. Профессиональный код всегда анализирует результат и пишет диагностику в журнал — это сильно упрощает поиск ошибок.
Третья ошибка — торговля без собственной идентификации. Если на одном счёте работают несколько советников, их позиции перемешиваются и роботы начинают мешать друг другу. Решение — использовать магический номер (Magic Number) и фильтровать позиции по нему, чтобы каждый робот управлял только своими сделками.
Четвёртая ошибка — отсутствие тестирования. Советник сначала проверяется в стратегическом тестере на истории, затем — на демо-счёте и только потом допускается к реальным деньгам. Каждый этап важен: тестер показывает статистику и просадку стратегии, демо — поведение в реальном времени, а реальный счёт требует минимальных рисков на старте.
Вывод
Expert Advisor — это логично устроенная программа: каркас из трёх функций, заданный платформой, и торговая логика внутри него. OnInit готовит советник к работе, OnTick принимает торговые решения, OnDeinit корректно завершает работу. Помимо каркаса, советник опирается на входные параметры, индикаторы, рыночные данные и торговые функции, а его предсказуемость обеспечивает событийная модель платформы. Освоив эту структуру, вы сможете читать чужие советники, анализировать их поведение и строить собственные торговые системы — от простого робота на пересечении скользящих средних до полноценного многофакторного алгоритма с фильтрами и автоматическим управлением риском. Начните с простого, тестируйте каждый шаг и постепенно усложняйте логику — так путь от идеи до работающего советника становится понятным и управляемым.
Каналы об алготрейдинге:
МАКС: https://max.ru/channel_mqlmasters
Телеграм: https://t.me/mqlmasters
Владимир, опубликовал запись .
С момента публикации зафиксировано 65 просмотров. Сейчас эту запись просматривает 1 незарегистрированный пользователь.
|
|