Блог им. AlgoTrader1

Обработчики событий, которые есть в каждом советнике

Господа, всех приветствую. Продолжаем изучение mql4. В прошлый раз мы познакомились с «Мастером MQL4», а так же программами и файлами, которые в нём можно создавать и разобрались, чем они друг от друга отличаются и какие задачи выполняют.

Сегодня я расскажу о трёх основных функциях, которые у Вас будут в каждом советнике. Эти функции называются OnInit(), OnDeinit(), OnTick() и являются обработчиками событий: инициализация, деинициализация и новый тик.

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

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

Функция OnInit() выполняется первой, когда торговый терминал посылает событие init (инициализация). А делает он это в следующих ситуациях: запуск советника на графике, смена торгового символа или таймфрейма, перекомпиляция советника в MetaEditor’e, если его копия установлена на графике, изменение входных параметров советника из окна его настроек, а так же при смене счёта.

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

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

Функция OnDeinit() срабатывает, когда происходит событие Deinit. В ней необходимо высвободить память от объектов, которые требовались для работы советника, удалить следы его работы на графике, если он осуществлял вывод информации на график и производил какие-либо построения. Причём, на выполнение всех задач функции OnDeinit() выделяется не более 2,5 секунд, после чего программа будет выгружена с графика принудительно.  

Ну и под конец рассмотрим событие NewTick и функцию, которая его обрабатывает OnTick(). Событие NewTick генерируется, когда по торговому инструменту поступает новая котировка. В этот момент начинает выполняться функция OnTick(). Именно в ней и необходимо прописывать весь аналитическо-торговый алгоритм советника, т.е. то, что отвечает за поиск торговых сигналов и реагирование на них в виде торговых операций. Если новые котировки приходят в процессе выполнения функции OnTick, они не прерывают её выполнение. Функция отработает весь свой алгоритм до конца, прежде чем будет готова срабатывать на новые тики. Если отключить возможность автоматической торговли (кнопкой «Разрешить/запретить Авто-торговлю»), то события NewTick не прекращают генерироваться. Запрет распространяется только на совершение советником торговых операций.

На сегодня у меня всё, кому лень читать, можно посмотреть видео-версию. Благодарю за внимание.

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
4.8К | ★8
1 комментарий

Читайте на SMART-LAB:
Фото
Сбер РПБУ 8 мес. 2026 г. - менеджмент ждет замедления, но в отчетах пока рекорды
Сбер опубликовал результаты по РПБУ за 8 мес. 2026 г.  Чистая прибыль за 8 месяцев составила 1,33 трлн руб. (+19%). За август 169,1 млрд руб....
Фото
Как рынок отреагирует на решение ЦБ в пятницу: прогноз Т-Инвестиций по акциям, облигациям и рублю
Сейчас инвесторы настроены осторожно. В котировки рынка заложено ожидание по сохранению ключевой ставки неизменной. Таков и консенсус...
Фото
Итоги первичных размещений ВДО и некоторых розничных выпусков на 9 сентября 2026 г.
Следите за нашими новостями в удобном формате: Telegram , Youtube , RuTube, Smart-lab , ВКонтакте , Сайт  
Фото
Базис купил компанию Proto. Что это значит для акций?
Что нам известно по этой сделке? ✅Пресс-релиз читаем тут , переписывать не вижу смысла ✅Кого купили, можно посмотреть тут:...

теги блога AlgoTrading Solutions

....все тэги



UPDONW
Новый дизайн