joaopedrodev
joaopedrodev
joaopedrodev
Опубликовал статью Simplifying Databases in MQL5 (Part 2): Using metaprogramming to create entities
Simplifying Databases in MQL5 (Part 2): Using metaprogramming to create entities

We explored the advanced use of #define for metaprogramming in MQL5, creating entities that represent tables and column metadata (type, primary key, auto-increment, nullability, etc.). We centralized these definitions in TickORM.mqh, automating the generation of metadata classes and paving the way for efficient data manipulation by the ORM, without having to write SQL manually.

1
joaopedrodev
Опубликовал статью Simplifying Databases in MQL5 (Part 1): Introduction to Databases and SQL
Simplifying Databases in MQL5 (Part 1): Introduction to Databases and SQL

We explore how to manipulate databases in MQL5 using the language's native functions. We cover everything from table creation, insertion, updating, and deletion to data import and export, all with sample code. The content serves as a solid foundation for understanding the internal mechanics of data access, paving the way for the discussion of ORM, where we'll build one in MQL5.

2
joaopedrodev
Опубликовал код Logify - Library for log management
Logify - это библиотека логов для MQL, предназначенная для упрощения отладки, отслеживания и мониторинга советников и индикаторов. Она предоставляет структурированные, настраиваемые и организованные журналы непосредственно на графике или в терминале, с поддержкой уровней журнала, гибких форматов и нескольких обработчиков. Легкое, элегантное решение, которое легко интегрировать в ваши MQL-проекты.
joaopedrodev
Опубликовал статью Mastering Log Records (Part 10): Avoiding Log Replay by Implementing a Suppression
Mastering Log Records (Part 10): Avoiding Log Replay by Implementing a Suppression

We created a log suppression system in the Logify library. It details how the CLogifySuppression class reduces console noise by applying configurable rules to avoid repetitive or irrelevant messages. We also cover the external configuration framework, validation mechanisms, and comprehensive testing to ensure robustness and flexibility in log capture during bot or indicator development.

joaopedrodev
Опубликовал статью Mastering Log Records (Part 9): Implementing the builder pattern and adding default configurations
Mastering Log Records (Part 9): Implementing the builder pattern and adding default configurations

This article shows how to drastically simplify the use of the Logify library with the Builder pattern and automatic default configurations. It explains the structure of the specialized builders, how to use them with smart auto-completion, and how to ensure a functional log even without manual configuration. It also covers tweaks for MetaTrader 5 build 5100.

2
joaopedrodev
Опубликовал статью Mastering Log Records (Part 8): Error Records That Translate Themselves
Mastering Log Records (Part 8): Error Records That Translate Themselves

In this eighth installment of the Mastering Log Records series, we explore the implementation of multilingual error messages in Logify, a powerful logging library for MQL5. You’ll learn how to structure errors with context, translate messages into multiple languages, and dynamically format logs by severity level. All of this with a clean, extensible, and production-ready design.

joaopedrodev
Опубликовал статью Mastering Log Records (Part 7): How to Show Logs on Chart
Mastering Log Records (Part 7): How to Show Logs on Chart

Learn how to display logs directly on the MetaTrader chart in an organized way, with frames, titles and automatic scrolling. In this article, we show you how to create a visual log system using MQL5, ideal for monitoring what your robot is doing in real time.

2
joaopedrodev
Опубликовал статью Mastering Log Records (Part 6): Saving logs to database
Mastering Log Records (Part 6): Saving logs to database

This article explores the use of databases to store logs in a structured and scalable way. It covers fundamental concepts, essential operations, configuration and implementation of a database handler in MQL5. Finally, it validates the results and highlights the benefits of this approach for optimization and efficient monitoring.

4
joaopedrodev
Опубликовал статью Искусство ведения логов (Часть 5): Оптимизация обработчика с помощью кэширования и ротации
Искусство ведения логов (Часть 5): Оптимизация обработчика с помощью кэширования и ротации

В этой статье мы улучшим библиотеку логов путем добавления форматтеров в обработчики, класса CIntervalWatcher для управления циклами выполнения, оптимизации с кэшированием и ротацией файлов, тестов производительности и практических примеров. Благодаря этим улучшениям мы получим эффективную, масштабируемую и адаптируемую систему ведения логов к различным сценариям разработки.

joaopedrodev
Опубликовал статью Искусство ведения логов (Часть 4): Сохранение логов в файлах
Искусство ведения логов (Часть 4): Сохранение логов в файлах

В этой статье я расскажу вам об основных операциях с файлами и о том, как настроить гибкий обработчик для индивидуальной настройки. Мы обновим класс CLogifyHandlerFile, чтобы записывать логи непосредственно в файл. Мы выполним тест производительности, смоделировав торговлю по EURUSD в течение недели, при этом на каждом тике будут генерироваться логи, а весь процесс займет 5 минут и 11 секунд. Результат будет сравнен в следующей статье, где мы реализуем систему кэширования для улучшения производительности.

joaopedrodev
Опубликовал статью Искусство ведения логов (Часть 3): Изучение обработчиков для сохранения логов
Искусство ведения логов (Часть 3): Изучение обработчиков для сохранения логов

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

joaopedrodev
Опубликовал статью Искусство ведения логов (Часть 2): Форматирование логов
Искусство ведения логов (Часть 2): Форматирование логов

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

joaopedrodev
Опубликовал статью Искусство ведения логов (Часть 1): Основные понятия и первые шаги в MQL5
Искусство ведения логов (Часть 1): Основные понятия и первые шаги в MQL5

Добро пожаловать в новое приключение! Данная статья открывает специальный цикл, в котором мы будем пошагово создавать библиотеку для манипуляций с журналами, предназначенную для тех, кто занимается разработкой на языке MQL5.

joaopedrodev
Опубликовал статью Наблюдатель Connexus (Часть 8): Добавление Request Observer (Наблюдатель запросов)
Наблюдатель Connexus (Часть 8): Добавление Request Observer (Наблюдатель запросов)

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

joaopedrodev
Опубликовал статью Клиент в Connexus (Часть 7): Добавление клиентского уровня
Клиент в Connexus (Часть 7): Добавление клиентского уровня

В настоящей статье мы продолжаем разработку библиотеки Connexus. В настоящей главе мы создаем класс CHttpClient, отвечающий за отправку запроса и получение ордера. Мы также рассматриваем концепцию моков (mocks), отделяя библиотеку от функции WebRequest, что обеспечивает большую гибкость для пользователей.

joaopedrodev
Опубликовал статью Отправка запросов в Connexus (Часть 6): Создание HTTP-запроса и ответа
Отправка запросов в Connexus (Часть 6): Создание HTTP-запроса и ответа

В этой шестой статье из серии о библиотеке Connexus мы сосредоточимся на полном HTTP-запросе, рассмотрев каждый компонент, из которого состоит запрос. Мы создадим класс, представляющий запрос в целом, который поможет нам объединить ранее созданные классы.

joaopedrodev
Опубликовал статью Помощник Connexus (Часть 5): HTTP-методы и коды состояния
Помощник Connexus (Часть 5): HTTP-методы и коды состояния

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

joaopedrodev
Опубликовал статью Тело в Connexus (Часть 4): Добавление поддержки тела HTTP-запроса
Тело в Connexus (Часть 4): Добавление поддержки тела HTTP-запроса

В настоящей статье мы рассмотрели концепцию тела в HTTP-запросах, которое необходимо для отправки таких данных, как JSON и обычный текст. Мы обсудили и объяснили, как правильно его использовать с соответствующими заголовками. Мы также ввели класс ChttpBody, входящий в библиотеку Connexus, который упростит работу с телом запросов.

joaopedrodev
Опубликовал статью Заголовок в Connexus (Часть 3): Освоение использования HTTP-заголовков для запросов
Заголовок в Connexus (Часть 3): Освоение использования HTTP-заголовков для запросов

Продолжаем разработку библиотеки Connexus. В этой главе мы исследуем концепцию заголовков в протоколе HTTP, объясняя, что это такое, для чего они предназначены и как их использовать в запросах. Мы рассмотрим основные заголовки, используемые при взаимодействии с API, а также покажем практические примеры того, как настроить их в библиотеке.

joaopedrodev
Опубликовал статью HTTP и Connexus (Часть 2): Понимание архитектуры HTTP и дизайна библиотеки
HTTP и Connexus (Часть 2): Понимание архитектуры HTTP и дизайна библиотеки

В настоящей статье рассматриваются основы протокола HTTP, описываются основные методы (GET, POST, PUT, DELETE), коды состояния, а также структура URL-адресов. Кроме того, в ней представлено начало создания библиотеки Connexus с классами CQueryParam и CURL, облегчающими манипулирование URL-адресами и параметрами запросов в HTTP-запросах.

12