English Русский 中文 Español Deutsch 日本語 한국어 Français Italiano Türkçe
Guia prático do MQL5: utilização de diferentes modos de impressão

Guia prático do MQL5: utilização de diferentes modos de impressão

MetaTrader 5Exemplos | 20 março 2014, 13:49
3 677 1
Anatoli Kazharski
Anatoli Kazharski

Introdução

Este é o primeiro artigo da série Livro de receitas MQL5. Vou iniciar com exemplos simples para permitir que aqueles que estejam dando os seus primeiros passos em programação se familiarizem gradativamente com a nova linguagem. Eu me lembro que as minhas primeiras tentativas de projetar e programar sistemas de negociação foram muito difíceis, visto que era a primeira linguagem de programação da minha vida. Até então eu costumava pensar que eu não tinha sido feito para isso e que dificilmente seria capaz de entendê-la algum dia.

Entretanto, no fim das contas foi mais fácil do que eu pensava e apenas demorou alguns meses até que eu pudesse desenvolver um programa razoavelmente complexo. Você pode descobrir mais sobre isso no artigo chamado "Oportunidades ilimitadas com o MetaTrader 5 e MQL5".

Aqui, tentarei guiar os desenvolvedores de Expert Advisors iniciantes através do processo de programação, passando do mais simples ao complexo. Não vou copiar aqui qualquer informação disponível na Ajuda do menu do MetaEditor 5, então prepare-se para apertar F1 com muita frequência. Ao mesmo tempo, esta série de artigos oferecerá a você muitos exemplos, funções prontas para uso e esquemas que podem ser usados em seus desenvolvimentos, tanto em formato original como personalizado.

Então, vamos começar. Neste artigo, criaremos um script simples que imprime as propriedades de símbolo em diversos modos. Ao desenvolver um programa, especialmente no início do processo de aprendizagem, frequentemente haverá situações em que o programa não responde da forma esperada. Se isso acontecer, você terá que verificar os valores de determinadas variáveis envolvidas nos cálculos. Em nosso caso, analisaremos detalhadamente três métodos em que usaremos as funções Print(), Comment() e Alert(). E após isso, você poderá decidir qual método é mais conveniente para você.


Assistente MQL5

O meu estudo da linguagem MQL5 começou com scripts. É muito fácil e rápido. Quando o script é carregado, ele executa a função que você criou e em seguida é apagado do gráfico. Isso permite que você faça testes enquanto procede e observa em que direção mover.

Se você ainda não instalou o terminal de negociação MetaTrader 5, você pode fazer isso agora mesmo. Após a instalação, inicie o terminal e abra o MetaEditor 5 apertando a tecla F4. Essa tecla pode ser usada para alternar rapidamente entre o terminal de negociação MetaTrader 5 e o MetaEditor 5. Você também pode iniciar o MetaEditor 5 clicando no botão adequado na barra de ferramentas do terminal. Certifique-se de estudar muito bem a interface do programa utilizando a Ajuda (F1) no terminal de negociação e no MetaEditor 5, visto que apenas abordaremos alguns problemas rapidamente, se é que faremos isso.

Inicie o MetaEditor 5 e pressione Ctrl+N ou o botão Novo abaixo do menu principal no painel do MetaEditor. Uma janela do Assistente MQL5 aparecerá e nela você poderá selecionar o tipo de programa que deseja criar. Em nosso caso, selecionamos Script e clicamos em Próximo:

Figura 1. Assistente MQL5 - Script

Figura 1. Assistente MQL5 - Script

Em seguida, você precisará inserir o nome do script (nome do arquivo). De forma padrão, os scripts são criados em Metatrader 5\MQL5\Scripts\file_name.mq5. Nesse diretório, você também pode criar outras pastas para agrupar os seus arquivos de acordo com a finalidade deles.

Figura 2. MQL5 Wizard - Nome do arquivo

Figura 2. MQL5 Wizard - Nome do arquivo

Neste ponto, você também pode adicionar parâmetros de entrada, se necessário. Quando tudo estiver configurado e pronto, clique em Finalizar. Um novo documento será criado com a utilização do modelo e você poderá continuar com o script:

//+------------------------------------------------------------------+
//|                                                   PrintModes.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
    
  }
//+------------------------------------------------------------------+


Escrever um código

Tudo que está após barras duplas é um comentário e não afeta a execução do programa. É sempre recomendável fornecer comentários detalhados para o seu código visto que isso facilita consideravelmente a compreensão da lógica do programa, especialmente após um longo intervalo.

Tudo que foi colocado após #property nas três primeiras linhas do código acima está relacionado às propriedades do programa. Mais informações sobre cada função e propriedade podem ser encontradas na Referência MQL5. Para visualizar rapidamente a descrição de qualquer função, você apenas precisa dar um clique duplo sobre a função para selecioná-la e apertar F1. A janela de Ajuda abrirá, mostrando a você a descrição da função selecionada.

A isso segue a função principal do script - OnStart() que é a que contém todas as outras funções e cálculos.

Precisamos habilitar a possibilidade de selecionar um método para imprimir as informações requeridas antes da execução do programa. Isso significa que devemos ter um parâmetro externo que permita selecionar o modo necessário a partir da lista suspensa. Além disso, precisamos especificar outra propriedade (#property) que será responsável por abrir uma janela com parâmetros externos do script antes da execução do programa. Essa propriedade é script_show_inputs. Vamos adicioná-la embaixo de todas as outras propriedades que já estão no código:

#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//---

Para ter a lista suspensa nos parâmetros externos, precisamos criar enumeração de todos os modos. Vamos inserir este código após as propriedades do programa:

// ENUMERATION
enum ENUM_PRINT_MODE
  {
   PRINT   = 0,
   COMMENT = 1,
   ALERT   = 2
  };
//---

A isso segue o único parâmetro externo deste script - PrintMode:

// INPUT PARAMETERS
input ENUM_PRINT_MODE printMode=PRINT; // Print mode

Os parâmetros de entrada são obrigatoriamente localizados no início do programa, com o modificador input que define o parâmetro externo sendo posicionado antes do tipo de variável. Se rodarmos o script agora, uma janela para o programa irá abrir e poderemos selecionar um modo de impressão a partir da lista suspensa do parâmetro Modo de impressão :

Fig. 3. Janela de parâmetros de script

Fig. 3. Janela de parâmetros de script

Depois, podemos criar variáveis e atribuir alguns valores a elas (em nosso caso, imprimiremos alguns dados de símbolo) para depois imprimí-las usando o modo especificado pelo usuário no parâmetro externo. Para este propósito, precisamos organizar uma função de usuário separada - PrintSymbolProperties() - que será chamada na função OnStart() principal.

Para criar a função, precisamos apenas inserir o código como mostrado abaixo:

//+------------------------------------------------------------------+
//| PRINTING SYMBOL PROPERTIES                                       |
//+------------------------------------------------------------------+
void PrintSymbolProperties()
  {
    
  }

O tipo de valor a ser retornado deve ser especificado antes do nome da função. Alternativamente, se a função não retornar nada, como em nosso caso, devemos colocar vazio. Além disso, precisamos escrever o código restante no corpo da função PrintSymbolProperties(), entre chaves. Vamos primeiro definir as variáveis.

string symb_symbol    = "";  // Symbol
int    symb_digits    = 0;   // Number of decimal places

int    symb_spread    = 0;   // Difference between the ask price and bid price (spread)
int    symb_stoplevel = 0;   // Stop levels
double symb_ask       = 0.0; // Ask price
double symb_bid       = 0.0; // Bid price

O tipo de variável depende do tipo de dado que será atribuído a ela. Agora vamos atribuir valores a essas variáveis. Para obter as propriedades de símbolo, a MQL5 oferece funções especiais para cada tipo de dado.

symb_symbol    =Symbol();
symb_digits    =(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
symb_spread    =(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
symb_stoplevel =(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
symb_ask       =SymbolInfoDouble(_Symbol,SYMBOL_ASK);
symb_bid       =SymbolInfoDouble(_Symbol,SYMBOL_BID);
//---

Para assegurar uma aprendizagem adequada do material, utilize a Referência MQL5 para estudar cada função e os parâmetros transferidos por ela. Na Referência, todas as propriedades de símbolo são exibidas em uma tabela a que você terá que se referir frequentemente.

Agora que as variáveis têm valores atribuídos a elas, apenas precisamos escrever um código adequado para cada modo de impressão. Ele tem o seguinte aspecto:

//---
// If it says to print to the journal
   if(printMode==PRINT)
     {
      Print("Symbol: ",symb_symbol,"\n",
            "Digits: ",symb_digits,"\n",
            "Spread: ",symb_spread,"\n",
            "Stops Level: ",symb_stoplevel,"\n",
            "Ask: ",symb_ask,"\n",
            "Bid: ",symb_bid
            );
     }
//---
// If it says to print to the chart
   if(printMode==COMMENT)
     {
      int mb_res=-1; // Variable with the option selected in the dialog box
      //---
      Comment("Symbol: ",symb_symbol,"\n",
              "Digits: ",symb_digits,"\n",
              "Spread: ",symb_spread,"\n",
              "Stops Level: ",symb_stoplevel,"\n",
              "Ask: ",symb_ask,"\n",
              "Bid: ",symb_bid
              );
      //---
      // Open a dialog box
      mb_res=MessageBox("Do you want to delete comments from the chart?",NULL,MB_YESNO|MB_ICONQUESTION);
      //---
      // If "Yes" is clicked, remove the comments from the chart 
      if(mb_res==IDYES) { Comment(""); }
      //---
      return;
     }
//---
// If it says to print to the alert window
   if(printMode==ALERT)
     {
      Alert("Symbol: "+symb_symbol+"\n",
            "Digits: "+IntegerToString(symb_digits)+"\n",
            "Spread: "+IntegerToString(symb_spread)+"\n",
            "Stops Level: "+IntegerToString(symb_stoplevel)+"\n",
            "Ask: "+DoubleToString(symb_ask,_Digits)+"\n",
            "Bid: "+DoubleToString(symb_bid,_Digits)
            );
     }
//---

Se você selecionar PRINT para o parâmetro externo do Expert Advisor, as informações serão impressas no diário de Expert Advisors (Caixa de Ferramentas - aba Experts):

Figura 4. Caixa de Ferramentas - aba Experts

Figura 4. Caixa de Ferramentas - aba Experts

Se você selecionar COMMENT, as informações serão exibidas no canto superior esquerdo do gráfico. Após as informações aparecerem no gráfico, a função MessageBox() abrirá uma caixa de diálogo que perguntará se você deseja apagar os comentários do gráfico:

Figura 5. Comentários no canto superior esquerdo do gráfico

Figura 5. Comentários no canto superior esquerdo do gráfico

Se você optar por ALERT, após a execução do script, uma janela de alerta contendo as informações solicitadas ou uma simples mensagem de usuário aparecerá. Nesse caso, assim como no caso da opção PRINT, as informações também são impressas no diário, mas é acompanhada adicionalmente por uma notificação sonora.

Figura 6. Janela de alerta

Figura 6. Janela de alerta

Segue abaixo o código completo do script:

//+------------------------------------------------------------------+
//|                                                   PrintModes.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2012, MetaQuotes Software Corp."
#property link        "http://tol64.blogspot.com"
#property description "email: hello.tol64@gmail.com"
#property version     "1.00"
#property script_show_inputs
//---
//--- ENUMERATION
enum ENUM_PRINT_MODE
  {
   PRINT   = 0,
   COMMENT = 1,
   ALERT   = 2
  };
//---
// INPUT PARAMETERS
input ENUM_PRINT_MODE printMode=PRINT; // Print mode
//---
//+------------------------------------------------------------------+
//| MAIN FUNCTION                                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   PrintSymbolProperties();
  }
//+------------------------------------------------------------------+
//| PRINTING SYMBOL PROPERTIES                                       |
//+------------------------------------------------------------------+
void PrintSymbolProperties()
  {
   string symb_symbol    = "";  // Symbol
   int    symb_digits    = 0;   // Number of decimal places
   int    symb_spread    = 0;   // Difference between the ask price and bid price (spread)
   int    symb_stoplevel = 0;   // Stop levels
   double symb_ask       = 0.0; // Ask price
   double symb_bid       = 0.0; // Bid price
//---
   symb_symbol    =Symbol();
   symb_digits    =(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
   symb_spread    =(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
   symb_stoplevel =(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
   symb_ask       =SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   symb_bid       =SymbolInfoDouble(_Symbol,SYMBOL_BID);
//---
// If it says to print to the journal
   if(printMode==PRINT)
     {
      Print("Symbol: ",symb_symbol,"\n",
            "Digits: ",symb_digits,"\n",
            "Spread: ",symb_spread,"\n",
            "Stops Level: ",symb_stoplevel,"\n",
            "Ask: ",symb_ask,"\n",
            "Bid: ",symb_bid
            );
     }
//---
// If it says to print to the chart
   if(printMode==COMMENT)
     {
      int mb_res=-1; // Variable with the option selected in the dialog box
      //---
      Comment("Symbol: ",symb_symbol,"\n",
              "Digits: ",symb_digits,"\n",
              "Spread: ",symb_spread,"\n",
              "Stops Level: ",symb_stoplevel,"\n",
              "Ask: ",symb_ask,"\n",
              "Bid: ",symb_bid
              );
      //---
      // Open a dialog box
      mb_res=MessageBox("Do you want to delete comments from the chart?",NULL,MB_YESNO|MB_ICONQUESTION);
      //---
      // If "Yes" is clicked, remove the comments from the chart  
      if(mb_res==IDYES) { Comment(""); }
      //---
      return;
     }
//---
// If it says to print to the alert window
   if(printMode==ALERT)
     {
      Alert("Symbol: "+symb_symbol+"\n",
            "Digits: "+IntegerToString(symb_digits)+"\n",
            "Spread: "+IntegerToString(symb_spread)+"\n",
            "Stops Level: "+IntegerToString(symb_stoplevel)+"\n",
            "Ask: "+DoubleToString(symb_ask,_Digits)+"\n",
            "Bid: "+DoubleToString(symb_bid,_Digits)
            );
     }
  }

//+------------------------------------------------------------------+


Conclusão

Terminaremos o artigo aqui. Além dos métodos descritos acima, você também pode escrever os dados em um arquivo. Ele pode ser um arquivo de texto simples ou mesmo um relatório em HTML bem formatado utilizando CSS. Mas esses métodos são muito mais complicados para iniciantes e os que foram apresentados acima devem ser suficientes para começar.

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/638

Arquivos anexados |
printmodes.mq5 (3.54 KB)
Últimos Comentários | Ir para discussão (1)
Daniel Ilha
Daniel Ilha | 9 jul 2017 em 15:39

Estou inciando os estudos em MQL5, achei este artigo muito bom, muito explicativo.Agradeço pelo material

Guia prático do MQL5: obter propriedades de posição Guia prático do MQL5: obter propriedades de posição
Neste artigo, criaremos um script que capta todas as propriedades de posição e as exibe para o usuário em uma caixa de diálogo. Com a execução do script, você será capaz de selecionar entre dois modos disponíveis na lista suspensa nos parâmetros externos: tanto visualizar as propriedades da posição apenas no símbolo atual ou visualizar as propriedades da posição em todos os símbolos.
O MQL5 Market está fazendo um ano de idade O MQL5 Market está fazendo um ano de idade
Já passou um ano desde o lançamento das vendas no Mercado MQL5. Foi um ano de trabalho duro, que transformou o novo serviço na maior loja de robôs de negociação e de indicadores técnicos para a plataforma MetaTrader 5.
Guia prático do MQL5: Propriedades de posição no painel de informações personalizado Guia prático do MQL5: Propriedades de posição no painel de informações personalizado
Agora criaremos um Consultor Especialista simples que obterá propriedades de posição no símbolo atual e as exibirá no painel personalizado de informações durante as negociações manuais. O painel de informações será criado usando objetos gráficos e a informação exibida será atualizada a cada ponto. Isto será muito mais conveniente do que ter que executar manualmente todas as vezes o script descrito no artigo anterior da série, chamado "Guia prático do MQL5: Obter propriedades de posição".
Widgets de sinais de negociação para MetaTrader 4 e MetaTrader 5 Widgets de sinais de negociação para MetaTrader 4 e MetaTrader 5
Recentemente, o usuário do MetaTrader 4 e MetaTrader 5 recebeu uma oportunidade de tornar-se um provedor de sinais e receber lucros adicionais. Agora, você pode exibir os seus sucessos de negociação em seu website, blog ou página de rede social utilizando os novos widgets. Os benefícios do uso de widgets são óbvios: eles aumentam a popularidade do provedor de sinais, estabelecem a reputação deles como negociadores de sucesso bem como atraem novos assinantes. Todos os negociadores que colocam os widgets em outros websites podem desfrutar desses benefícios.