Mql4 сообщение в журнал

Обновлено: 05.07.2024

Вы никогда не тратили несколько часов на поиски какой-нибудь важной информации, предусмотрительно записанной вашим экспертом в лог-файл? Или, может, вам надоело всматриваться в мелкие одноцветные буковки, выводимые на экран функцией Comment()? А ведь они часто могут иметь очень большое значение для трейдинга. Если вам знакомо то, о чём я говорю, значит, эта статья для вас.

Основные задачи, которые я поставил перед собой при написании этой статьи:

Создание функции, с помощью которой эксперт сможет записывать информацию в свой личный лог-файл (аналог функции Print());

Создание инструмента, с помощью которого выводимую на экран информацию можно будет привести в более приятный для восприятия вид: раскрасить и изменить размер шрифта.

2. Личный лог-файл эксперта

Как я уже говорил, функция Print() не всегда удобна для записи информации, генерируемой экспертом во время работы. Особенно заметно это становится, когда на одном терминале одновременно торгует несколько экспертов. Каждый эксперт записывает в лог-файл свою информацию, и потом там очень сложно что-то найти. Про конструктивный анализ такой информации речь просто не идёт – это очень трудоёмкий и утомительный процесс.

Решить эту проблему достаточно просто. Надо каждому эксперту завести свой личный лог-файл. Вместо записи в общий лог-файл записывать информацию в личный. Для того чтобы было просто пользоваться такой возможностью, давайте сразу оформим код в виде функции.

Итак, что должна делать функция:

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

Поскольку открытие и закрытие файла необходимо выполнить всего один раз, код, занимающийся этим, мы поместим в функции init() и deinit() соответственно. Чтобы он занимал как можно меньше места, оформим его тоже в виде функций:

Теперь, когда у нас есть открытый файл, можно записывать в него информацию. Для этого:

сбросим дополненный файл на диск. Если эксперт завершит свою работу некорректно (аварийно), это предупредит потерю данных.

В результате у нас должна получиться вот такая функция:

Теперь во всех экспертах слово Print можем смело менять на слово log, не забыв при этом добавить вызовы функций log_open и log_close.

Вот простой пример эксперта, использующего включаемый файл log.mq4:

3. Вывод информации на экран

Теперь, когда вопрос с лог-файлом решён, можно приступить к украшению выводимой на экран информации.

Для начала рассмотрим все возможные способы реализации этой задачи. В языке MQL4 отображение информации на экране реализует функция Comment(), но она нас не устраивает по описанным выше причинам. Поэтому надо искать другое решение. Удачным примером такового могут стать объекты, содержащие текст. Их всего два – "Текст" и "Текстовая метка". Принципиальное отличие между ними состоит в том, что "Текст" привязывается к координатам графика (времени и цене), а "Текстовая метка" – к координатам окна. Поскольку нам необходимо, чтобы информация оставалась на месте при смещении графика или изменении его масштаба, мы будем использовать именно "Текстовую метку".

Созданию и управлению объектами в MQL4 посвящено несколько функций, все они начинаются со слова Object. Давайте посмотрим, какие из них могут быть нам полезными:

Итак, что нам необходимо сделать:

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

Кроме того, есть ограничение на длину выводимого текста. Поэтому я добавил второй "столбец", то есть добавил справа ещё пять строк.

Вот так выглядит функция info_init(), создающая объекты:

Как видите, объекты будут называться "InfoLabel_" + номер объекта (от 00 до 04 – левый "столбец", и от 10 до 14 – правый). Привязка объектов производится к левому верхнему углу. Сверху специально сделан отступ, так как многие привыкли видеть там OHLC – информацию о текущем баре. Вертикальный промежуток между строками я сделал равным пятнадцати, этого хватит для текста среднего размера. С инициализацией закончили, давайте сразу сделаем деинициализацию – они будут очень похожи:

А теперь самое интересное – собственно вывод информации.

Итак, у нас есть 10 объектов, которые стоят на своих местах и готовы "принять" текст для отображения. Давайте задумаемся, как сделать использование функции вывода информации максимально простым.

Во-первых, вместо имени объекта будет проще указывать его номер.

Во-вторых, необходимо сделать обязательным использование только двух параметров: номера объекта и выводимого текста. Остальные параметры можно сделать необязательными, так как цвет текста, начертание и размер шрифта не понадобится менять часто. Здесь же следует подумать, как поступать, если параметры опущены. Есть два варианта:

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

Итак, вот как у нас выглядит начало функции:

Для того, чтобы избежать ситуации, в которой lastused-переменные будут содержать пустые значения, присвоим им значения сразу при объявлении:

Вы, наверное, обратили внимание, что lastused-переменные объявлены вне функций. Благодаря этому их значения не будут обнуляться при каждом вызове функции info().

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

Полный код всех трёх функций вы можете посмотреть в прикреплённом файле info.mq4.

А теперь давайте посмотрим, что у нас получилось:

По мне - так очень неплохо.

Напоследок можно ещё сделать маленькую "удобность" – функцию, очищающую всю информацию. Называться она будет info_clear(), а как её использовать, я думаю, сами догадаетесь.

4. Заключение

В статье были описаны альтернативные методы ведения лог-файла и вывода информации на экран. Также были созданы два включаемых файла, которые должны храниться в папке "experts/include", – log.mq4 и info.mq4. Последние можно использовать из любого эксперта.

Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.

Существует несколько способов передать информацию трейдеру из советника.

Журнал экспертов

Итак:

После добавления кода наш советник нужно скомпилировать, только после этого он будет виден в терминале Metatrader:

Компиляция советника

Запуск советника

И результат работы нашего эксперта:

Результат работы советника

Comment — следующая функция отображения информации. Она выводит комментарий, определенный пользователем, в левый верхний угол графика.

Я предлагаю просто заменить функцию Print на Comment и посмотреть результат:

Итак, меняем функцию, снова компилируем программу и смотрим результат:

Результат работы Comment

Аналогичные параметры имеет функция Alert. Отображает диалоговое окно с заданной информацией.

Пример:

И результат работы:

Результат работы Alert

Пожалуй, это всё.

На следующем уроке мы рассмотрим типы данных int, double, string, bool, datetime, color и рассмотрим примеры работ с ними.


Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):

Здравствуйте, друзья Форекс трейдеры. В этой статье мы рассмотрим команды вывода информации в MQL4.

Вывести информацию на график терминала MetaTrader мы можем двумя способами.

Функция вывода информации Comment();

Сейчас мы разберем первый способ вывода информации при помощи команды Comment(); и выводить информацию мы будем из функции OnInit().

Рассмотрим подробно, как пишется эта команда и ее структуру.

Начинаем писать ее название в поле кода MetaEditor и нам высвечивается подсказка.

Подсказка в MQL4 - Сomment

Когда мы прописываем какие-либо системные слова или выражения, которые содержатся в составе языка программирования языка MQL4, то они высвечиваются, как подсказки (как на скриншоте выше).

Мы можем кликнуть по этой подсказке, и необходимое нам системное слово пропишется автоматически в строке кода.

Далее, после () идет точка с запятой;

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

Итак, давайте вставим нашу команду вывода информации Comment() в функцию OnInit(), чтобы советник нам вывел текстовую информацию на график:

Что мы сделали? Мы с Вами прописали команду Comment(), которая выводит текст на график. Прописали мы ее в функции OnInit(). Напоминаю, функция OnInit() у нас выполняется один раз при нанесении советника на график (подробнее о работе функции OnInit() Вы можете прочитать в этой статье). Соответственно, если мы советник переносим на график, то сперва у нас должна сработать функция инициализации OnInit(), внутри которой мы прописали первую команду. Эта команда выполниться и текст должен вывестись на экран.

Для того чтобы это все у нас заработало, нам необходимо наш код сохранить и, далее, скомпилировать.

Итак, полный код нашего советника:

Сохраняем этот код и компилируем:

MetaEditor: сохраняем код и компилируем его

Что при этом произошло?

Советник My_first_expert в папке Experts

MetaTrader4: переносим советник на график и нажимаем Ок

И, мы можем наблюдать результат работы нашей первой программы, результат вывода информации при помощи Comment().

MQL4: вывод информации при помощи Comment

Данный вывод текстовой информации можно выполнить не только внутри функции OnInit(), но также и внутри функции OnTick() или OnTimer().

Вывод информации при помощи функции Alert();

Теперь рассмотрим другой способ вывода информации, который называется Alert ().

Почему я прописал другой текст? Потому что функция команды Comment () — это вывод информации справочного характера. То есть, если нам понадобилось вывести какую-то справочную текстовую информацию на графике (например, текущий спред), то мы это можем сделать при помощи Comment ().

MQL4: работа функции Alert

То есть, если Comment () предназначена для вывода справочной информации, то команда Alert () выводит информацию важного характера, такую информацию, на которую срочно необходимо обратить внимание.

Если у Вас появились какие-то вопросы по материалу данной статьи, задавайте их в комментариях ниже. Я Вам обязательно отвечу. Да и вообще, просто оставляйте там Вашу обратную связь, я буду очень рад.

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

На этом, все. Переходите к следующей статье, в которой я расскажу Вам о типах данных в MQL4: int, double, string, bool, datetime, color.

Благодарю за внимание.


Другие статьи по теме Программирование на MQL4 Вы можете просмотреть в данном содержании практических уроков по MQL.

Понравился материал статьи?
Добавьте эту статью в закладки Вашего браузера, чтобы вернуться к ней еще раз. Для этого, прямо сейчас нажмите на клавиатуре комбинацию клавиш Ctrl+D

Log файлы терминала MetaTrader 4

В первую очередь разработчик попросит вас предоставить лог — файлы и возможно set-файл настроек. В данной статье мы разберем что такое лог-файлы терминала и для чего они нужны.

Что такое лог файл терминала

Файл с расширением log это журнал, где записываются все действия происходящие в терминале. Для чего нужны эти журналы: в первую очередь для проверки состояния терминала, проверки исполнения ордеров и наличие торговых ошибок. Так же в журнале фиксируются все действия советников, и порой без записей советника в журнале не возможно выявить ошибки в его работе.

Все записи разделены на события, которые имеют:

Так же события в зависимости от важности, делятся на три типа:

В терминале есть три источника логирования событий:

  • Логи терминала.
  • Логи экспертов.
  • Логи тестера стратегий.

Журнал терминала

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

Если в процессе торговли возникнут торговые ошибки, они так же будут зафиксированы здесь, с указанием времени и кода ошибки.

Эти все записи доступны на вкладке Журнал, окна Инструменты. Сам лог файл находится в папке терминала /logs.

Журнал экспертов

Посмотреть этот журнал можно на вкладке "Эксперты" окна "Инструменты", лог файл расположен в папке терминала /MQL4/logs.

Журнал тестера стратегий

Находятся эти записи на вкладке Журнал в окне Тестер, лог файл — папка терминала /tester/logs.

Где хранятся log файлы

Лог файлы расположены в папке терминала и находятся:

  • Журнал терминала - /logs.
  • Журнал экспертов - /MQL4/logs.
  • Журнал тестера стратегий - /tester/logs.

Для быстрого перехода к месту хранения лог файла, вызовите контекстное меню вкладки журнал или эксперты и кликните по пункту Открыть.

Выбрать нужный лог файл можно по имени — имя каждого файла соответствует дате его формирования.

Лог файл — это текстовый документ, поэтому отрыть его можно при помощи стандартного блокнота.

Заключение

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

Смотреть так же:

Set файлы терминала MetaTrader 4

Set файлы в MetaTrader 4, как сохранить параметры советника или индикатора

Читайте также: