: показывать основные параметры на графике через Comment(), а важные события записывать через Print().
4. Полный пример советника для MetaTrader 5
Теперь объединим полученные знания. Создадим простой советник, который при запуске записывает сообщение в журнал, при поступлении тиков обновляет информацию о ценах на графике, а при удалении очищает комментарий.
#property strict
#property version "1.00"
// Запуск советника
int OnInit()
{
Print("Советник запущен. Символ: ", _Symbol);
return INIT_SUCCEEDED;
}
// Обработка нового тика
void OnTick()
{
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double spread = (ask - bid) / _Point;
Comment("Инструмент: ", _Symbol,
"\nBid: ", DoubleToString(bid, _Digits),
"\nAsk: ", DoubleToString(ask, _Digits),
"\nСпред: ", DoubleToString(spread, 1), " пунктов");
}
// Удаление советника
void OnDeinit(const int reason)
{
Comment("");
Print("Советник остановлен. Причина: ", reason);
}
Что делает программа?
При запуске функция OnInit() записывает в журнал название символа, на котором работает советник.
Затем при каждом новом тике вызывается OnTick(). Программа получает Bid и Ask, рассчитывает разницу между ценами и выводит значения на график. В этом примере спред выражен в пунктах через _Point; конкретные особенности расчёта торговых издержек зависят от инструмента и условий брокера.
Наконец, OnDeinit() очищает комментарий после удаления советника и записывает сообщение об остановке. Параметр reason содержит код причины деинициализации.
Для проверки создайте новый советник в MetaEditor, вставьте код, скомпилируйте его и прикрепите к графику в MetaTrader 5. В левом верхнем углу появится информация о текущих ценах, а сообщения о запуске и остановке будут записаны в журнал.
5. Три ошибки, которых стоит избегать
Ошибка № 1. Ожидать, что Print() выведет текст на график. Эта функция пишет в журнал. Для отображения информации непосредственно на графике используйте Comment().
Ошибка № 2. Выводить слишком много сообщений. Если вызывать Print() при каждом тике, журнал может быстро переполниться ненужными записями. Лучше регистрировать события, которые действительно помогают понять работу программы.
Ошибка № 3. Неправильно форматировать числа. Значения типа double могут выводиться с большим количеством знаков после запятой. Если необходимо контролировать точность представления, применяйте DoubleToString() или PrintFormat().
Дополнительно учитывайте, что Comment() и Print() не выполняют обычный вывод во время оптимизации в тестере стратегий. Если вы проверяете советник в таком режиме, для получения статистики и диагностики могут потребоваться другие средства.
Функции Comment() и Print() — базовые инструменты, которые помогают разобраться в работе торгового советника и быстрее находить ошибки. С их помощью можно контролировать значения переменных, проверять условия и фиксировать важные события без создания сложной системы отладки.
Начните с небольших примеров, постепенно добавляйте вывод нужных параметров в собственные программы и следите за тем, чтобы журнал содержал полезную информацию, а не тысячи повторяющихся строк.
Если вы хотите освоить MQL5 глубже и научиться самостоятельно создавать торговых роботов для MetaTrader 5, загляните в обучающие материалы MQL Master: https://mql-master.ru/
Теги: MQL5, программирование на MQL5, MetaTrader 5, Comment, Print, отладка советника, торговый робот, обучение программированию, MQL Master