Запущенный советник несколько дней не открывает ордера. Он завис или ждет сигнала? Как это проверить? И первое что приходит в голову, обратиться к разработчику с вопросом — почему советник не работает, и с требованием исправить эту ошибку.
В первую очередь разработчик попросит вас предоставить лог — файлы и возможно set-файл настроек. В данной статье мы разберем что такое лог-файлы терминала и для чего они нужны.
Что такое лог файл терминала
Файл с расширением log это журнал, где записываются все действия происходящие в терминале. Для чего нужны эти журналы: в первую очередь для проверки состояния терминала, проверки исполнения ордеров и наличие торговых ошибок. Так же в журнале фиксируются все действия советников, и порой без записей советника в журнале не возможно выявить ошибки в его работе.
Все записи разделены на события, которые имеют:
Так же события в зависимости от важности, делятся на три типа:
В терминале есть три источника логирования событий:
Журнал терминала
В данном лог файле содержатся сведения о действиях трейдера и самого терминала за текущий сеанс. Фиксируются такие сведения как информация о запуске терминала, подключение к торговому счету, открытие и закрытие ордеров, установка советника и др.
Если в процессе торговли возникнут торговые ошибки, они так же будут зафиксированы здесь, с указанием времени и кода ошибки.
Эти все записи доступны на вкладке Журнал, окна Инструменты. Сам лог файл находится в папке терминала /logs.
Журнал экспертов
Этот журнал содержит записи о работе запущенных экспертов и индикаторов. В лог файле фиксируется информация об открытии, закрытии и модификации ордеров. Здесь же будут сообщения запущенных советников и индикаторов.
Посмотреть этот журнал можно на вкладке «Эксперты» окна «Инструменты», лог файл расположен в папке терминала /MQL4/logs.
Журнал тестера стратегий
Ну и последний лог — журнал тестера стратегий, здесь публикуются сообщения хода тестирования советника или индикатора. Этот журнал по сути идентичен журналу эксперты, здесь так же будут все торговые записи за период теста.
Находятся эти записи на вкладке Журнал в окне Тестер, лог файл — папка терминала /tester/logs.
Где хранятся log файлы
Лог файлы расположены в папке терминала и находятся:
Для быстрого перехода к месту хранения лог файла, вызовите контекстное меню вкладки журнал или эксперты и кликните по пункту Открыть.
Выбрать нужный лог файл можно по имени — имя каждого файла соответствует дате его формирования.
Лог файл — это текстовый документ, поэтому отрыть его можно при помощи стандартного блокнота.
Заключение
Используя журналы терминала, вы будете в курсе всех событий происходящих в терминале. В случае сбоя работы советника, вы уже не будете голословны, достаточно показать журнал разработчику чтоб он увидел и исправил ошибки.
3.0 Программируем простой MQL4 советник по системе «Монетка»

Если вы задавались вопросом «Как написать советник на языке программирования MQL4», то данный пост создан именно для вас. Сегодня мы будем создавать самый простой из всевозможных советников для МТ4, который будет определять незамысловатое условие на вход, открывать ордер и модифицировать его цели.
Алгоритм программирования советника на MQL4

Выше представлена схема процесса работы торгового робота, который мы планируем написать. Любой советник должен иметь как минимум три функции обработки событий:
OnInit()
Она генерируется только один раз за время работы советника в самом начале. Нужна, чтобы внутри нее определить, рассчитать и задать те переменные и массивы данных, которые не нуждаются в дальнейшей корректировке по мере обновления тиков. То же самое касается и графических объектов. В советнике раздел OnInit выполняет ту же роль, что мы проходили в теме создания первого индикатора.
OnDeinit()
Функция вызывается советником только один раз перед непосредственным удалением его с графика. Она используется также и в индикаторах. Раздел OnDeinit нужен, чтобы подчистить график после советника, обнулить глобальные переменные и выдать окончательный расчет или текст пользователю. Более подробно мы ее проходили при создании первого индикатора.
OnTick()
Данная функция новая в наших уроках. Раздел OnTick генерирует события исключительно для экспертов и не может быть вызвана в индикаторах или скриптах. Ее тип данных void и набор параметров отсутствует. По своей логике работы она схожа с функцией для индикаторов OnCalculate, только она не возвращает никакого значения после завершения. Задача у нее одна — запускаться каждый новый тик и проходить циклом весь написанный код в ней от начала до конца. Так как любой советник должен проверять условия для входа/выхода из рынка, считать количество открытых ордеров и выполнять их сопровождение, то можно уверенно сказать, что функция OnTick является самой важной в коде любого эксперта.
Продолжим разбирать алгоритм работы. Вначале советник инициализируется. Далее запускается функция OnTick, в которой выполняются все дальнейшие действия. Для данного советника сначала необходимо проверить наличие уже открытых им ордеров. Если они есть — дальнейший расчет и поиск условия на вход не выполняются, потому что в рынке у нас должен быть только один ордер за раз. Если же открытых сделок нет, то идет определение направления будущей позиции. В зависимости от него запускается пользовательская функция на открытие Buy или Sell ордера. Если по какой-то причине сделка не смогла открыться, расчет возвращается назад в функцию OnTick, чтобы попробовать выставить ордер снова. Если же ордер открылся, то он модифицируется (выставляется Тейк-Профит и Стоп-Лосс). На этом алгоритм заканчивает свою работу по работе с ордерами, потому что счетчик новых ордеров уже будет учитывать этот открывшийся ордер, делая проверку каждый тик. И только после того, как ордер закроется по достижению своей цели (ТП или СЛ), цикл проверки условия на открытие ордера запустится снова. Функция OnDeinit запустится только тогда, когда вы удалите советник с графика.
Наш код, конечно, не будет выглядеть точь-в-точь как эта схема, но думаю, что принцип его написания вам понятен.
Торговая система «Монетка»

Когда перед нами стоит вопрос «как создать Форекс советник», то в первую очередь в голову приходит мысль о торговой системе, заложенной в нем, логике открытия ордеров. Так как в этом уроке не стоит цель создать так называемый на сленге «Грааль», то для получения опыта в написании первого эксперта мы возьмем на вооружение самую простую ТС, которую только можно выдумать.
Период советника установим М15. Мы будем входить в рынок по воле случая, или, если хотите, удачи. Мы начнем условно подкидывать монетку и смотреть на результат этого несложного действия. Орел или Решка — только два исхода событий будет у советника. Вариант «ребро» в данном случае не рассматривается ?
Зачем использовать такую простую систему? Чтобы понять, что произойдет в результате этого эксперимента и ответить себе на вопрос: можно ли заработать на Форекс входя в рынок наобум? Получится ли прибыльно торговать не имея четко спланированной торговой системы?
Проверка советника на ошибки: GetLastError()

При написании советника (как и при его использовании) очень важно следить за возможными ошибками в коде. Речь идет не об ошибках компиляции, их вы можете увидеть во вкладке «Ошибки» окна «Инструменты». Разговор о скрытых ошибках, которые проявляют себя во время тестирования или работы советника на реальном счете. Проверку на эти ошибки нужно делать как минимум один раз за тик в функции обработки событий OnTick. Как максимум — в каждой вашей пользовательской функции.
Чтобы получить номер возможной ошибки, нужно вызвать функцию GetLastError(). Она имеет тип int и возвращает целое число, значение системной переменной _LastError. Тут нужно обратить внимание, что на языке MQL4 после вызова функции GetLastError ее значение обнуляется и повторный вызов ее в том же месте кода вернет значение 0, поэтому ее значение нужно сохранять в отдельную переменную.
Язык MQL различает как минимум 150 разных ошибок. Соответственно каждый возвращаемый номер имеет свою расшифровку. Ноль значит это ошибки нет и все отлично, 134 значит, что недостаточно денег на счете и т. д.
https://forexmq. ru/metatrader/chto-takoe-log-fajlyi-metatrader-4
https://www. davinci-fx. com/mql-first-ea/