English Русский 中文 Español Deutsch 日本語
Arquivo log alternativo com o uso de HTML e CSS

Arquivo log alternativo com o uso de HTML e CSS

MetaTrader 4Exemplos | 18 fevereiro 2016, 14:56
1 147 0
Antoniuk Oleg
Antoniuk Oleg

Por que eu deveria usá-lo, ou onde está o problema?

Qualquer expert advisor é armado de recursos que permitem a saída de dados a respeito do seu funcionamento, status atual, situações imprevistas e outros eventos. Usando os dados gerados pelo expert advisor, você pode localizar a cronologia de todos os eventos detectados, mesmo sem executar o Meta Trader. Nós podemos encontrar facilmente o dia necessário e tentar encontrar as informações. Mas o problema é que as EAs podem gerar uma quantidade enorme de mensagens que não podem ser facilmente ordenadas nem mesmo pelo desenvolvedor do expert advisor, para não falar dos usuários que não possuem familiaridade com a criação de EAs. Se nós abrirmos um arquivo log típico, veremos muitas informações homogêneas apresentadas ao longo de centenas ou milhares de linhas.



Agora imagine como o trabalho seria mais fácil se o arquivo log fosse organizado da seguinte forma: os erros e situações imprevistas seriam marcados com uma fonte de tamanho maior em vermelho, alertas seriam exibidos em uma fonte menor e cor de pêssego, as informações de serviço teriam uma cor verde brilhante, todas as transações estariam em azul, e assim em diante. Em outras palavras, quando você olhasse para este arquivo log, você entenderia facilmente o que ocorreu e o que o EA quer lhe contar, sem ter que ler as informações e detalhes. Caso você passasse os olhos pelas dezenas de linhas e não visse nenhuma linha vermelha ou cor de pêssego, isso significaria uma ausência de erros e alertas, e você saberia que tudo está bem. Você olharia para as mensagens em azul apenas por alguns segundos para se assegurar que os pedidos foram feitos corretamente. Apenas um sonho? Absolutamente não. Nós vamos escrever uma biblioteca para criar esta possibilidade.



Portanto, no presente artigo nós vamos descrever o processo de escrita de uma biblioteca simples mas muito poderosa para criar arquivos html, vamos aprender a ajustar a sua exibição e vamos ver como eles podem ser facilmente implementados e utilizados em seu expert advisor ou script

O que usaremos?

Vamos usar a linguagem HTML para criar os arquivos e a linguagem CSS para ajustar a visão externa de acordo com as suas preferências. O que é HTML? Trata-se de uma linguagem que descreve páginas de internet. É graças a ela que você é capaz de ler este texto agora. Nós não vamos estudar o código HTML; você simplesmente deve confiar nas minhas palavras e aceitar as coisas como são. Nós vamos visualizar os logs com o Internet Explorer, Opera, ou algum outro navegador. Não faz grande diferença.



Criação da biblioteca generateHTML

Você deve agora executar o MetaEditor e iniciar o procedimento. Nós vamos criar uma nova biblioteca e inserir este código:

//+------------------------------------------------------------------+
//|                                                 generateHTML.mq4 |
//|                                               banderassa@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Antonio Banderass. All rights reserved" 
#property link      "banderassa@ukr.net"
#property library
//---- 
int htmlFileHandle=-1;
//+------------------------------------------------------------------+
//| CreateHtmlFile                                                   |
//+------------------------------------------------------------------+
int CreateHtmlFile(string fileName, string title, string style = 
                   "styles/default.css")
  {
   int handle = FileOpen(fileName, FILE_CSV|FILE_WRITE, " ");
   if(handle > 0)
     {
       htmlFileHandle = handle;
       FileWrite(handle,
                "<html><head><title>", title,
                "</title><link rel=stylesheet href=", style, " type=text/css>",
                "</head><body id=body><div align-center><h3 id=title>", title,
                "</h3></div><hr noshade id=hr>");   
     }
   else
       Print("generateHTML library: error while creating html file");
   return (handle);
  }
//+------------------------------------------------------------------+
//| CloseHtmlFile                                                    |
//+------------------------------------------------------------------+
void CloseHtmlFile()
  {
   if(htmlFileHandle > 0)
     {
       FileWrite(htmlFileHandle, "</body></html>");
       FileClose(htmlFileHandle);   
     }
  }
//+------------------------------------------------------------------+
//| WriteMsg                                                         |
//+------------------------------------------------------------------+
void WriteMsg(string text, string style = "text")
  {
   FileWrite(htmlFileHandle, "<font id=", style, ">", text, "</font>");
  }
//+------------------------------------------------------------------+
//| WriteMsgLn                                                       |
//+------------------------------------------------------------------+
void WriteMsgLn(string text, string style = "text")
  {
   FileWrite(htmlFileHandle, "<font id=", style, ">", text, "</font><br>");
  }
//+------------------------------------------------------------------+
//| WriteMsgTime                                                     |
//+------------------------------------------------------------------+
void WriteMsgTime(string text, string style = "text")
  {
   FileWrite(htmlFileHandle, "<font id=", style, ">" + TimeToStr(CurTime()) + 
             ": ", text, "</font>");
  }
//+------------------------------------------------------------------+
//| WriteMsgTimeLn                                                   |
//+------------------------------------------------------------------+
void WriteMsgTimeLn(string text, string style = "text")
  {
   FileWrite(htmlFileHandle, "<font id=", style, ">" + TimeToStr(CurTime()) + 
             ": ", text, "</font><br>");
  }
//+------------------------------------------------------------------+

Salve este arquivo com o nome “generateHTML.mq4” na pasta "bibliotecas". A biblioteca usa apenas as funções integradas da linguagem mql4, então nós não precisamos adicionar nada. Pressione F5. É preciso mencionar que a biblioteca simplesmente cria os arquivos de texto e os preenche com o código HTML usando as funções FileOpen(), FileClose() e FileWrite(). Não faz sentido explicar cada tag, simplesmente acredite em mim.

Preparação para o trabalho

Para o trabalho normal, nós devemos configurar a biblioteca. Vá até “...MetaTrader/experts/arquivos”, crie a pasta ”logs”, abra-a e crie mais uma pasta, "estilos". Em seguida, vá até a última pasta, crie o arquivo "default.css" e insira este texto:

#body
  { 
   background-color: dimg alt=""ray;
  }
 
#title
  {
   font-size:200%;
   color: greenyellow;
  }
 
#text
  {
   font-size: 150%;
   color: greenyellow;
  }
 
#error
  {
   font-size: 180%;
   color: orangered;
  }
 
#warning
  {
   font-size: 120%;
   color: gold;
  }

Nós discutiremos isso em detalhes mais tarde, agora salve o arquivo e feche o bloco de notas. A preparação da biblioteca está terminada. Vamos ver os recursos com os quais ela conta.

Criação do nosso primeiro arquivo html

Crie um script de texto em branco. No início da fonte, adicione a biblioteca usando o comando "#include".

#include "..\libraries\generateHTML.mq4"

Em seguida, vamos colocar código na função start():

CreateHtmlFile("logs\log1.html","testing library generateHTML "+TimeToStr(CurTime()));

Esta função cria um arquivo html de nome "log1.html" na pasta "logs". O segundo parâmetro é um cabeçalho que deve ser colocado no início do arquivo. Nós discutiremos o último parâmetro mais tarde, ele está ausente neste estágio porque o valor padrão é usado.

Agora tudo está pronto para a saída de mensagens. Vamos lá:

WriteMsgLn("WriteMsgLn(). Test message");

Esta função exibe uma mensagem de texto simples. Como você pode ver, tudo é muito fácil. O único parâmetro é o texto da mensagem. A simplicidade resulta em algumas limitações: nós não podemos abrir e trabalhar com vários arquivos simultaneamente. Em breve eu lhe direi como resolver esse pequeno problema. A próxima mensagem será exibida em uma nova linha. O nome da função nos revela as ações que ela realiza: Ln vem de "line new", ou seja, nova linha. Indo em frente:

WriteMsgLn("WriteMsgLn(). Warning message","warning");

Nós acabamos de definir o segundo parâmetro. Ele diz que a mensagem deve ser exibida em estilo de "advertência". Isso significa que o texto terá cor de pêssego e será um pouco maior do que o texto comum. Estes parâmetros de exibição são configurados no arquivo "default.css", que será descrito mais tarde. Nós configuramos o estilo do "texto" como padrão, ou seja, as duas chamadas seguintes serão idênticas:

WriteMsgLn("WriteMsgLn(). Message");
WriteMsgLn("WriteMsgLn(). Message","text");

Nós estamos testando os diferentes estilos:

WriteMsgLn("WriteMsgLn(). Error message","error");

Trata-se do mesmo, mas no estilo de "erro". O texto será vermelho e maior do que o anterior. Agora vamos descrever as funções de exibição simultânea de mensagens e tempo:

WriteMsgTimeLn("WriteMsgTimeLn(). Message with time");

Além da mensagem, o tempo atual será exibido. Ele estará no início da linha. Você também pode definir o estilo da mensagem, do mesmo modo que antes:

WriteMsgTimeLn("WriteMsgTimeLn(). Warning message with time","warning");
WriteMsgTimeLn("WriteMsgTimeLn(). Error message with time","error");

Caso você queira exibir duas mensagens em uma única linha, use as funções WriteMsg() e WriteMsgTime(). Elas são idênticas às anteriores, mas exibem as mensagens em uma única linha:

WriteMsg("WriteMsg(). Text");
WriteMsgTime("WriteMsgTime(). Text with time");
WriteMsg("WriteMsg(). Warning","warning");
WriteMsgTime("WriteMsgTime(). Error","error");

Após todas as mensagens terem sido exibidas, feche o arquivo HTML:

CloseHtmlFile();

Agora compile o script "criação de arquivo html" e execute-o no Meta Trader. Vá até a pasta de logs, ...MetaTrader\experts\arquivos\logs\ e abra um novo log com o seu navegador. Como você pode ver, este método de exibição de dados é mais vívido e fácil de entender. Problemas podem sugir caso o seu gosto seja diferente do meu. Agora vamos ver como podemos ajustar as cores e o tamanho da fonte através do uso do CSS.


Ajuste da visualização

Como você pode ver, tudo é bastante fácil. Após você ter aprendido a usar a biblioteca, vamos ajustar a exibição de logs de acordo coma s suas preferências. Vá até a pasta “...MetaTrader/experts/arquivos/logs/estilos”. Abra o único arquivo da pasta. Ele contém a configuração de exibição, CSS. Vamos examinar as primeiras linhas:

#body

É o nome do estilo cuja exibição vamos ajustar. O símbolo # vem primeiro, e depois o nome. Neste caso, é o corpo do documento. Este estilo deve ser adicionado a qualquer arquivo CSS.

{ 
    background-color: dimg alt=""ray;
}

Agora nós configuramos a cor da fonte. Nós escrevemos os parâmetros e os seus valores dentro dos colchetes da seguinte forma:

o nome do parâmetro: seu valor;

Neste caso temos: o nome do parâmetro – a cor do fundo de tela (a cor do arquivo log) e o valor – cinza escuro. Além disso:

#title
  {
    font - size:200%;
    color: greenyellow;
  }

Este estilo é atribuído ao cabeçalho que é colocado no início do arquivo. Nós configuramos a cor da fonte e a sua cor. O primeiro parâmetro em porcentagem. Além disso:

#text
{
   font-size: 150%;
   color: greenyellow;
}
 
#error
{
   font-size: 180%;
   color: orangered;
}
 
#warning
{
   font-size: 120%;
   color: gold;
}

Estes são os três estilos familiares que correspondem ao texto comum, a um erro e a um alerta. Você também pode configurar um parâmetro adicional, "cor-de-fundo", que define a cor de fundo do texto. Para criar o seu próprio estilo e usá-lo, você precisa escrevê-lo no arquivo e salvá-lo. Da seguinte forma, por exemplo:

#order
{
   font-size: 160%;
   color: Dodgerblue;
}
Para usar este estilo, defina-o como um argumento durante a saída da mensagem:
WriteMsgTimeLn("WriteMsgTimeLn(). Order message with time","order");

Agora você pode criar novos estilos e usá-los.


Cores

Usando os links a seguir, você pode encontrar a tabela de cores. Eu não acho que todos irão gostar do meu esquema ed cores.

http://www.computerhope.com/htmcolor.htm
http://www.immigration-usa.com/html_colors.html
http://html-color-codes.com/
https://it.utexas.edu/

Para usar as cores das tabelas que possuem exibição de 16-bits (por exemplo, C34A2C), você deve usar o símbolo # na sua frente, por exemplo:

#body
{
   background-color: #C34A2C;
}


Criação dos seus próprios arquivos de estilo

Para criar um novo arquivo de estilo, abra o arquivo "default.css", modifique-o e salve-o com um novo nome. Ao criar o arquivo, defina o último parâmetro, que indica o caminho do arquivo de estilo que você quer usar, por exemplo:


CreateHtmlFile("logs\log1.html","testing library generateHTML","logs\styles\myStyle.css ");

Criação e uso simultâneo de vários arquivos log

Nós nunca selecionamos o arquivo que iremos usar nos trabalhos com a biblioteca, e isso resulta em simplicidade. Mas surge a questão: como podemos escrever a mensagem em vários arquivos log de modo simultâneo? É tudo muito simples. A função de criação de arquivos html devolve o valor "int". Este é o identificador do arquivo. Além disso, temos a variável global “int htmlFileHandle”, que mostra qual arquivo está em uso no momento. Nós só precisamos lembrar os identificadores de todos os arquivos log, e então atribuir os seus valores à variável “htmlFileHandle” quando necessário.

Isso é tudo que eu queria lhe dizer. Agora nós temos um modo simples de criar e exibir dados eficientemente. Espero que isto seja útil para muitos traders, e torne o seu trabalho mais fácil.


Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/1432

Arquivos anexados |
generateHTML.mq4 (3.2 KB)
Execução do terminal do cliente MetaTrader 4 em Linux-Desktop Execução do terminal do cliente MetaTrader 4 em Linux-Desktop
Descrição de uma configuração passo a passo em desktop Linux usando um wine não emulador para executar o terminal do cliente MetaTrader4.
Segredos do terminal do cliente MetaTrader 4: Biblioteca de arquivos no MetaEditor Segredos do terminal do cliente MetaTrader 4: Biblioteca de arquivos no MetaEditor
Durante a criação de programas personalizados, o editor de código possui grande importância. Quanto mais funções estiverem disponíveis no editor, mais rápida e conveniente será a criação do programa. Muitos programas são criados com base em um código pré-existente. Você usa um indicador ou um script que não é completamente adequado aos seus objetivos? Faça o download do código deste programa no nosso website e personalize-o para os seus fins.
Como não cair em armadilhas de otimização? Como não cair em armadilhas de otimização?
O artigo descreve os métodos para se entender melhor os resultados da otimização do provador. Ele também fornece algumas dicas que ajudam a evitar a "otimização prejudicial".
Construção de linhas fractais Construção de linhas fractais
O artigo descreve a construção de linhas fractais de vários tipos através do uso de linhas de tendência e fractais.