Смотри, как бесплатно скачать роботов
Ищи нас в Telegram!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Simplest Logger class for MetaTrader 5 - библиотека для MetaTrader 5

Просмотров:
43
Рейтинг:
(4)
Опубликован:
\MQL5\Include\DKStdLib\Logger\ \MQL5\Scripts\
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

У каждого программиста есть свой логгер. Я написал свой собственный для MQL5, вдохновившись модулем логирования Python.

Этот класс самый простой. Никакой иерархии, ротаторов или форматтеров. Он прост и удобен для любого проекта.

Установка

  1. Скопируйте CDKLogger.mqh в папку MQL\Include\DKStdLib\Logger.
  2. Импортируйте класс CDKLogger.

#include <DKStdLib\Logger\CDKLogger.mqh

Использование

CDKLogger logger;

// ШАГ 1. Запуск регистратора с именем "MyLoggerName" и уровнем INFO
logger.Init("MyLoggerName", INFO);

// Вы можете изменить стандартный формат регистратора "%name%:[%level%] %message%" на свой собственный
// Используйте любую комбинацию деталей 
logger.Format = "%YYYY%-%MM%-%DD% %hh%:%mm%-%ss% - %name%:[%level%] %message%"; 

// ШАГ 2. Если вы хотите фильтровать сообщения только по подстрокам,
// заполните список FilterInList 
// 2.1. Добавление подстроки в FilterIntList
logger.FilterInList.Add("Including-Substring-#1");        
logger.FilterInList.Add("Including-Substring-#2");        

// 2.2. Разделите строку разделителем ";", чтобы добавить все подстроки в FilterInList в одну строку
logger.FilterInFromStringWithSep("Including-Substring-#3;Including-Substring-#4", ";");  

// ШАГ 3. Если вы хотите отфильтровать сообщение OUT с подстроками, но оставить все остальные,
// заполните список FilterOutList 
// 3.1. Добавление подстроки в FilterOutList
logger.FilterOutList.Add("Excluding-Substring-#1");        
logger.FilterOutList.Add("Excluding-Substring-#2");        

// 3.2. Разделите строку разделителем ";", чтобы добавить все подстроки в FilterOutList в одну строку
logger.FilterOutFromStringWithSep("Excluding-Substring-#3;Excluding-Substring-#4", ";");  // используйте фильтр In, поместите сюда свою строку фильтра, отделив ее от ;.

// Этап 4. Ведение журнала
logger.Debug("Debug: Including-Substring-#1", false);                  // Отладка без оповещения
logger.Info("Info: Including-Substring-#1", true);                     // Информация с диалогом оповещения
logger.Warn("Warn: Including-Substring-#1"); 
logger.Error("Error: Including-Substring-#1: Excluding-Substring-#1"); // Пропущено из-за FilterOutList
logger.Critical("Critical: Including-Substring-#1");

logger.Assert(true, 
              "Log msg if true", INFO,   // если ok
              "Log msg if false", ERROR, // если не получается
              true);                     // Показать оповещение
logger.Assert(true, 
              "Same msg for true & false", 
              INFO,   // Уровень журнала, если все в порядке
              ERROR,  // Уровень журнала в случае неудачи
              false); // Нет тревоги 

В результате выполнения в журнал будут выведены следующие сообщения:

Открытые проблемы

Я часто использую класс таким образом:

logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f",
                          __FUNCTION__, __LINE__,
                          my_param));

Но здесь возникла проблема. Функция StringFormat разбирает строку каждый раз, даже если уровень логирования не требует вывода сообщения.

Если вам нужно часто выводить отладочные сообщения, вам придется обернуть вывод в условие:

if(DEBUG >= logger.Level)                          
  logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f",
                            __FUNCTION__, __LINE__,
                            my_param));      

Лучшим способом сделать это было бы ленивое использование StringFormat, но, к сожалению, MQL5 не поддерживает передачу динамического числа параметров функций Debug, Info, Error и так далее.

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

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/52741

Renko_Subwindow_ATRTrend Renko_Subwindow_ATRTrend

Комбинация многих известных показателей

Ascending Sort A Struct Array By A Field Example Ascending Sort A Struct Array By A Field Example

Это пример сортировки списка структур по возрастанию по полю. Вы можете найти и настроить приведенный выше алгоритм в зависимости от цели использования, это самый базовый пример, который также является направлением для разрешения расположения в массиве структуры. Алгоритм, используемый в этом примере, - Quick Sort и Merge Sort.

TimeServerDaylightSavings TimeServerDaylightSavings

Функции, связанные со временем, для эмпирического определения часового пояса сервера и режима перехода на летнее время (DST) из истории котировок

YURAZ_MCCH YURAZ_MCCH

Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.