Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 43
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
У каждого программиста есть свой логгер. Я написал свой собственный для MQL5, вдохновившись модулем логирования Python.
Этот класс самый простой. Никакой иерархии, ротаторов или форматтеров. Он прост и удобен для любого проекта.
Установка
- Скопируйте CDKLogger.mqh в папку MQL\Include\DKStdLib\Logger.
- Импортируйте класс 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

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

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

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

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