joaopedrodev
joaopedrodev
joaopedrodev
Publicado o artigo 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
Publicado o artigo 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
Publicado o código Logify - Library for log management
Logify é uma biblioteca de registro para MQL projetada para simplificar a depuração, o rastreamento e o monitoramento de EAs e indicadores. Ela fornece registros estruturados, personalizáveis e organizados diretamente no gráfico ou no terminal, com suporte para níveis de registro, formatos flexíveis e vários manipuladores. Uma solução leve e elegante que é fácil de integrar em seus projetos MQL.
joaopedrodev
Publicado o artigo 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
Publicado o artigo A arte de trabalhar com logs (Parte 9): aplicando o padrão Builder e definindo configurações padrão
A arte de trabalhar com logs (Parte 9): aplicando o padrão Builder e definindo configurações padrão

Este artigo mostra como simplificar radicalmente o uso da biblioteca Logify por meio do padrão "Builder" e de configurações padrão automáticas. São abordados a estrutura de classes Builder especializadas, o uso dessas classes com recursos de preenchimento automático inteligente (autocompletar) e as formas de garantir que o registro de logs funcione mesmo sem configuração manual. Além disso, o artigo apresenta as adaptações necessárias para a build 5100 do MetaTrader 5.

joaopedrodev
Publicado o artigo A arte de trabalhar com logs (Parte 8): Registros de erros com tradução automática
A arte de trabalhar com logs (Parte 8): Registros de erros com tradução automática

Nesta oitava parte da série "A arte de trabalhar com logs", vamos explorar a implementação de mensagens de erro multilíngues no Logify, uma poderosa biblioteca de logging para MQL5. Você aprenderá a estruturar erros com informações de contexto, traduzir mensagens para vários idiomas e formatar logs dinamicamente conforme o nível de logging. Tudo isso com uma arquitetura limpa, extensível e pronta para produção.

joaopedrodev
Publicado o artigo Dominando os Registros de Log (Parte 7): Como Exibir Logs Diretamente no Gráfico
Dominando os Registros de Log (Parte 7): Como Exibir Logs Diretamente no Gráfico

Aprenda a exibir logs diretamente no gráfico do MetaTrader de forma organizada, com molduras, títulos e atualização com deslocamento automático. Neste artigo, mostraremos como criar um sistema visual de logs utilizando MQL5, ideal para acompanhar em tempo real o que seu robô está fazendo.

joaopedrodev
Publicado o artigo Dominando Logs (Parte 6): Armazenando logs em um banco de dados
Dominando Logs (Parte 6): Armazenando logs em um banco de dados

Este artigo explora o uso de bancos de dados para armazenar logs de forma estruturada e escalável. Ele aborda conceitos fundamentais, operações essenciais, configuração e implementação de um manipuladores (handler) de banco de dados em MQL5. Por fim, valida os resultados e destaca os benefícios dessa abordagem para otimização e monitoramento eficiente do sistema.

joaopedrodev
Publicado o artigo Dominando Registros de Log (Parte 5): Otimizando o Handler com Cache e Rotação
Dominando Registros de Log (Parte 5): Otimizando o Handler com Cache e Rotação

Este artigo aprimora a biblioteca de logging adicionando formatadores nos handlers, a classe CIntervalWatcher para gerenciar ciclos de execução, otimização com cache e rotação de arquivos, testes de desempenho e exemplos práticos. Com essas melhorias, garantimos um sistema de logging eficiente, escalável e adaptável a diferentes cenários de desenvolvimento.

joaopedrodev
Publicado o artigo Dominando Registros de Log (Parte 4): Salvando logs em arquivos
Dominando Registros de Log (Parte 4): Salvando logs em arquivos

Neste artigo, ensinarei operações básicas com arquivos e como configurar um handler flexível para personalização. Atualizaremos a classe CLogifyHandlerFile para gravar logs diretamente no arquivo. Realizaremos um teste de desempenho simulando uma estratégia no EURUSD por uma semana, gerando logs a cada tick, com um tempo total de 5 minutos e 11 segundos. O resultado será comparado em um artigo futuro, onde implementaremos um sistema de cache para melhorar o desempenho.

joaopedrodev
Publicado o artigo A Arte de Registrar Logs (Parte 3): Explorando os handlers para armazenamento de logs
A Arte de Registrar Logs (Parte 3): Explorando os handlers para armazenamento de logs

Neste artigo, vamos analisar a concepção dos handlers na biblioteca de registro, compreender seu funcionamento e criar três implementações iniciais: console, banco de dados e arquivo. Analisaremos tudo, desde a estrutura básica dos handlers até testes práticos, lançando assim a base para uma implementação completa no futuro.

joaopedrodev
Publicado o artigo Dominando registros de log (Parte 2): Formatação dos logs
Dominando registros de log (Parte 2): Formatação dos logs

Neste artigo, estudaremos a criação e aplicação de programas de formatação para bibliotecas de logs. Examinaremos todas as etapas, desde a estrutura básica de um programa de formatação até exemplos práticos de implementação. Ao final do artigo, você terá todo o conhecimento necessário para realizar a formatação de logs dentro de uma biblioteca e entenderá como tudo funciona nos bastidores.

joaopedrodev
Publicado o artigo Dominando Registros de Log (Parte 1): Conceitos Fundamentais e Primeiros Passos em MQL5
Dominando Registros de Log (Parte 1): Conceitos Fundamentais e Primeiros Passos em MQL5

Bem-vindo ao início de mais uma jornada! Este artigo abre uma série especial onde criaremos, passo a passo, uma biblioteca para manipulação de logs, feita sob medida para quem desenvolve na linguagem MQL5.

joaopedrodev
Publicado o artigo Observador Connexus (Parte 8): Adicionando Request Observer (Observador de requisições)
Observador Connexus (Parte 8): Adicionando Request Observer (Observador de requisições)

Nesta parte final da nossa série sobre a biblioteca Connexus, analisamos a implementação do padrão Observador, além dos principais refatoramentos nos caminhos dos arquivos e nomes dos métodos. Esta série apresenta todo o desenvolvimento do Connexus, criado para simplificar a interação HTTP em aplicativos complexos.

joaopedrodev
Publicado o artigo Cliente no Connexus (Parte 7): Adicionando a camada de cliente
Cliente no Connexus (Parte 7): Adicionando a camada de cliente

Neste artigo, continuamos o desenvolvimento da biblioteca Connexus. Neste capítulo, criamos a classe CHttpClient, responsável por enviar a requisição e receber a ordem. Também abordamos o conceito de mocks, separando a biblioteca da função WebRequest, o que garante maior flexibilidade para os usuários.

joaopedrodev
Publicado o artigo Solicitação no Connexus (Parte 6): Criando uma Requisição e Resposta HTTP
Solicitação no Connexus (Parte 6): Criando uma Requisição e Resposta HTTP

Neste sexto artigo da série da biblioteca Connexus, focamos em uma requisição HTTP completa, cobrindo cada componente que compõe uma requisição. Criamos uma classe que representa a requisição como um todo, o que nos ajudou a reunir as classes criadas anteriormente.

joaopedrodev
Publicado o artigo Assistente Connexus (Parte 5): Métodos HTTP e códigos de status
Assistente Connexus (Parte 5): Métodos HTTP e códigos de status

Neste artigo, vamos entender os métodos HTTP e os códigos de status, dois elementos muito importantes para a interação entre cliente e servidor na internet. Compreender o que cada método faz de fato permite criar requisições mais precisas, informando ao servidor qual ação deve ser executada e tornando a comunicação mais eficiente.

joaopedrodev
Publicado o artigo Corpo em Connexus (Parte 4): Adicionando suporte ao corpo de requisições HTTP
Corpo em Connexus (Parte 4): Adicionando suporte ao corpo de requisições HTTP

Neste artigo, abordamos o conceito de corpo nas requisições HTTP, que é necessário para o envio de dados como JSON e texto simples. Discutimos e explicamos como usá-lo corretamente junto com os cabeçalhos apropriados. Também introduzimos a classe ChttpBody, que faz parte da biblioteca Connexus e que irá simplificar o trabalho com o corpo das requisições.

joaopedrodev
Publicado o artigo Título no Connexus (Parte 3): dominando o uso de cabeçalhos HTTP em requisições
Título no Connexus (Parte 3): dominando o uso de cabeçalhos HTTP em requisições

Continuamos o desenvolvimento da biblioteca Connexus. Neste capítulo, exploraremos o conceito de cabeçalhos no protocolo HTTP, explicando o que são, para que servem e como utilizá-los nas requisições. Analisaremos os principais cabeçalhos utilizados ao interagir com APIs e apresentaremos exemplos práticos de como configurá-los na biblioteca.

joaopedrodev
Publicado o artigo HTTP e Connexus (Parte 2): Entendendo a Arquitetura HTTP e o Design de Bibliotecas
HTTP e Connexus (Parte 2): Entendendo a Arquitetura HTTP e o Design de Bibliotecas

Este artigo explora os fundamentos do protocolo HTTP, cobrindo os principais métodos (GET, POST, PUT, DELETE), códigos de status e a estrutura das URLs. Além disso, apresenta o início da construção da biblioteca Connexus com as classes CQueryParam e CURL, que facilitam a manipulação de URLs e parâmetros de consulta em requisições HTTP.

12