Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Facebook!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Bibliotecas

Simplest Logger class for MetaTrader 5 - biblioteca para MetaTrader 5

Visualizações:
258
Avaliação:
(5)
Publicado:
\MQL5\Include\DKStdLib\Logger\ \MQL5\Scripts\
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Todo programador tem seu próprio registrador. Escrevi o meu próprio para a MQL5, inspirado no módulo de registro do Python.

Essa classe é a mais simples. Sem hierarquia, rotadores ou formatadores. É simples e conveniente para qualquer projeto.

Instalação

  1. Copie CDKLogger.mqh para a pasta MQL\Include\DKStdLib\Logger.
  2. Importe a classe CDKLogger.

#include <DKStdLib\Logger\CDKLogger.mqh

Uso

CDKLogger logger;

// Etapa 1: inicializar o registrador com o nome "MyLoggerName" e o nível INFO
logger.Init("MyLoggerName", INFO);

// Você pode alterar o formato padrão do registrador "%name%:[%level%] %message%" para o seu próprio formato
// Use qualquer combinação de padrões 
logger.Format = "%YYYY%-%MM%-%DD% %hh%:%mm%-%ss% - %name%:[%level%] %message%"; 

// Se você quiser filtrar a mensagem apenas com substituições,
// preencher a FilterInList 
// 2.1. Adicionar um substrato ao FilterIntList
logger.FilterInList.Add("Including-Substring-#1");        
logger.FilterInList.Add("Including-Substring-#2");        

// 2.2. Divida a string pelo separador ";" para adicionar todas as substrings ao FilterInList em uma linha
logger.FilterInFromStringWithSep("Including-Substring-#3;Including-Substring-#4", ";");  

// STEP 3. Se você quiser filtrar a mensagem OUT com substrings, mas deixar todas as outras,
// preencher a FilterOutList 
// 3.1. Adicionar um substrings ao FilterOutList
logger.FilterOutList.Add("Excluding-Substring-#1");        
logger.FilterOutList.Add("Excluding-Substring-#2");        

// 3.2. Divida a string pelo separador ";" para adicionar todas as substrings à FilterOutList em uma linha
logger.FilterOutFromStringWithSep("Excluding-Substring-#3;Excluding-Substring-#4", ";");  // use Filter In coloque sua string de filtro separada por ; aqui

// ETAPA 4: Registro em log
logger.Debug("Debug: Including-Substring-#1", false);                  // Depurar sem alerta
logger.Info("Info: Including-Substring-#1", true);                     // Informações com a caixa de diálogo Alerta
logger.Warn("Warn: Including-Substring-#1"); 
logger.Error("Error: Including-Substring-#1: Excluding-Substring-#1"); // Ignorado por causa da FilterOutList
logger.Critical("Critical: Including-Substring-#1");

logger.Assert(true, 
              "Log msg if true", INFO,   // se ok
              "Log msg if false", ERROR, // se falhar
              true);                     // Mostrar também o alerta
logger.Assert(true, 
              "Same msg for true & false", 
              INFO,   // Nível de registro se estiver ok
              ERROR,  // Nível de registro em caso de falha
              false); // Sem alerta 

As seguintes mensagens serão enviadas para o registro como resultado da execução:

Open issues

Costumo usar a classe dessa forma:

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

Mas aqui temos um problema. A função StringFormat analisa a string todas as vezes, mesmo que o nível de registro não exija a saída da mensagem.

Se você precisar emitir mensagens de depuração com frequência, terá de envolver a saída em uma condição:

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

A melhor maneira de fazer isso seria usar o StringFormat de forma preguiçosa, mas, infelizmente, a MQL5 não suporta a passagem de um número dinâmico de parâmetros de função para as funções Debug, Info, Error e assim por diante.

Se você tiver alguma ideia de como isso poderia ser feito, eu gostaria de ouvi-la.

Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/52741

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

Este é um exemplo de classificação ascendente de uma lista de estruturas por um campo. Você pode descobrir e personalizar o algoritmo acima, dependendo da finalidade de uso. Este é o exemplo mais básico e também uma direção para resolver o arranjo em uma matriz de estrutura. O algoritmo usado neste exemplo é o Quick Sort e o Merge Sort.

Bollinger Bands Crossover Signals Bollinger Bands Crossover Signals

Descrição do indicador - Bollinger Bands Crossover Signals Nome: Bollinger Bands Crossover Signals Versão: 1.1 Autor: BENALI Link: https://www.mql5.com/en/users/dahmi_benali

TimeServerDaylightSavings TimeServerDaylightSavings

Funções relacionadas ao tempo para detecção empírica do fuso horário do servidor e do modo de economia de luz do dia (DST) a partir do histórico de cotações

Custom crosshair cursor with synchronization Custom crosshair cursor with synchronization

Indicador de mira personalizado sincronizado que mostra o preço e a hora (servidor/local).