English Русский 中文 Español Deutsch 日本語
preview
Desenvolvimento de ferramentas para análise do movimento de preços (Parte 2): Script de comentários analíticos

Desenvolvimento de ferramentas para análise do movimento de preços (Parte 2): Script de comentários analíticos

MetaTrader 5Exemplos |
172 0
Christian Benjamin
Christian Benjamin

Introdução

Para simplificar a análise da ação do preço e acelerar a avaliação do mercado, desenvolvi uma ferramenta robusta baseada no conceito de projetor de gráficos. Esta ferramenta oferece um resumo eficiente dos principais indicadores de mercado, permitindo que os traders executem um único script sem precisar navegar pelo gráfico. Ela exibe de forma eficaz indicadores-chave, incluindo os preços de abertura e fechamento do dia anterior, níveis relevantes de suporte e resistência, máximas e mínimas do dia anterior e o volume de negociação. Além disso, para maior praticidade, uma tabela vertical é exibida diretamente no gráfico.

A ferramenta desenha automaticamente linhas importantes de suporte e resistência, oferecendo dicas visuais para a análise. Ela também fornece comentários úteis sobre as condições de mercado e possíveis movimentos, acrescentando um contexto valioso para decisões de trading.

Vamos abordar os seguintes tópicos:

  1. Por que exatamente esta ferramenta?
  2. Visão geral da nova ferramenta
  3. Script em MQL5
  4. Desenvolvimento do código
  5. Testes
  6. Considerações finais


Por que exatamente esta ferramenta?

Após estudar como certas informações de mercado influenciam as previsões de direção, criei uma ferramenta voltada para fornecer rapidamente os dados mais relevantes do mercado. Isso significa que você não precisará analisar dados históricos ou realizar cálculos complexos. A principal característica dessa ferramenta é a entrega da informação em apenas alguns segundos.

Ela mostra os preços de abertura e fechamento do dia anterior, além de destacar níveis-chave de resistência e suporte. Talvez o mais importante seja o fato de que ela calcula tanto o volume atual quanto o do dia anterior. Os dados de volume são cruciais, pois determinam os pontos de entrada no mercado. Quando o volume de hoje é significativamente maior que o de ontem, isso indica que mais traders estão entrando no jogo, o que pode causar movimentos de preço mais intensos e reforçar a tendência predominante, seja de alta (bullish) ou de baixa (bearish). Ao combinar todas essas informações, a ferramenta oferece uma visão do possível direcionamento do preço.

Algumas das principais características estão apresentadas na tabela abaixo.

Vantagens Descrição
Definição de níveis-chave Conhecer os preços máximos e mínimos do dia anterior pode ajudar os traders a identificar níveis psicológicos importantes, onde a pressão de compra ou de venda pode se intensificar.
Dados de volume A análise de volume ajuda os traders a avaliar o interesse do mercado. Um volume elevado em determinado nível de preço frequentemente indica forte confiança dos traders, tornando-o um ponto de referência essencial para negociações futuras.
Confirmação de tendência Os preços de abertura e fechamento oferecem uma visão do sentimento do mercado. Um fechamento superior em relação à abertura indica sentimento bullish, enquanto o contrário sugere sentimento bearish.
Marcações no grafo O script adiciona linhas horizontais de suporte e resistência no grafo, fornecendo dicas visuais que podem melhorar a análise. Esse suporte visual facilita a compreensão dos níveis de mercado e da dinâmica de preços.
Comentários O uso do campo de comentários no grafo ajuda a resumir rapidamente análises importantes, o que pode contribuir para decisões mais ágeis.
Ferramenta de aprendizado Para traders iniciantes, o script pode servir como uma ferramenta educativa, ajudando-os a entender como ler e interpretar dados históricos de preços, volumes e suas implicações para movimentos futuros.
Eficiência e economia de tempo A ferramenta automatiza o cálculo e a extração de indicadores-chave, economizando tempo. Isso permite que os traders se concentrem na execução de seus planos de trading, em vez da coleta de dados.


Visão geral do script

O script em MQL5 que vamos destrinchar ajuda você a reunir automaticamente os indicadores mais relevantes do dia de negociação anterior. Isso simplifica a análise, permitindo dedicar mais tempo ao desenvolvimento da estratégia e menos à coleta de dados. Como funciona o script? 

1. Calcula e exibe os principais níveis técnicos por meio da extração direta de dados do dia de negociação anterior dentro da plataforma de trading.

Níveis técnicos principais

Figura 1. Informações básicas

Na figura 1, estão representadas as informações básicas do mercado, incluindo os preços de abertura e fechamento do dia anterior, os níveis-chave de resistência e suporte, bem como a forma como o mercado reage a esses níveis.

2. Anotação de grafos para uso imediato.

Exibição das informações

Figura 2. Dados no grafo

Na figura 2, vemos como as informações de referência são apresentadas diretamente no grafo do MetaTrader 5.

Vamos analisar o script em mais detalhes para compreender seu funcionamento.


Script em MQL5

O script foi projetado para analisar os resultados do mercado no dia anterior e fornecer aos traders uma análise essencial. Ele é especialmente útil para traders intradiários e analistas técnicos que dependem da compreensão dos últimos movimentos de preço e volumes para tomar decisões de trading bem fundamentadas. Abaixo está o script completo, pronto para ser implementado na sua plataforma MetaTrader 5:

//+------------------------------------------------------------------+
//|                                                          ACS.mq5 |
//|                        Copyright 2024, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2024, MetaQuotes Software Corp."
#property link        "https://www.mql5.com/en/users/lynnchris"
#property description "Script that displays previous day metrics on the current chart and predicts market direction."
#property version     "1.0"

#include <Trade\Trade.mqh>

//+------------------------------------------------------------------+
//| Input parameters                                                 |
//+------------------------------------------------------------------+
input color TableTextColor = clrBlue; // Text color for the table
input int   TableXOffset   = 10;      // X offset for the table
input int   TableYOffset   = 50;      // Y offset for the table
input color SupportColor = clrGreen; // Color for the support line
input color ResistanceColor = clrRed; // Color for the resistance line

//+------------------------------------------------------------------+
//| Global variables                                                 |
//+------------------------------------------------------------------+
double prevDayHigh, prevDayLow, prevDayOpen, prevDayClose, prevDayVolume;
double currentDayVolume;
double keySupport, keyResistance; // Initialized but will be calculated

//+------------------------------------------------------------------+
//| Main function                                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Get previous day's data
   int prevDayIndex = iBarShift(NULL, PERIOD_D1, iTime(NULL, PERIOD_D1, 1));

   if(prevDayIndex == -1)
     {
      Print("Error retrieving previous day's data.");
      return;
     }

   prevDayHigh    = iHigh(NULL, PERIOD_D1, prevDayIndex);
   prevDayLow     = iLow(NULL, PERIOD_D1, prevDayIndex);
   prevDayOpen    = iOpen(NULL, PERIOD_D1, prevDayIndex);
   prevDayClose   = iClose(NULL, PERIOD_D1, prevDayIndex);
   prevDayVolume  = iVolume(NULL, PERIOD_D1, prevDayIndex);

//--- Get today's volume
   currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Current day's volume

//--- Calculate key support and resistance
   keySupport = prevDayLow;  // Support level can be set to the previous day's low
   keyResistance = prevDayHigh; // Resistance level can be set to the previous day's high

//--- Manage existing lines (if any)
//ObjectDelete("SupportLine");
//ObjectDelete("ResistanceLine");

//--- Create support line
   if(!ObjectCreate(0, "SupportLine", OBJ_HLINE, 0, 0, keySupport))
     {
      Print("Failed to create SupportLine");
     }
   ObjectSetInteger(0, "SupportLine", OBJPROP_COLOR, SupportColor);
   ObjectSetInteger(0, "SupportLine", OBJPROP_WIDTH, 2); // Set the width of the line

//--- Create resistance line
   if(!ObjectCreate(0, "ResistanceLine", OBJ_HLINE, 0, 0, keyResistance))
     {
      Print("Failed to create ResistanceLine");
     }
   ObjectSetInteger(0, "ResistanceLine", OBJPROP_COLOR, ResistanceColor);
   ObjectSetInteger(0, "ResistanceLine", OBJPROP_WIDTH, 2); // Set the width of the line

//--- Determine the day's nature (Bullish or Bearish)
   string marketNature;
   if(prevDayClose > prevDayOpen)
     {
      marketNature = "Bullish";
     }
   else
      if(prevDayClose < prevDayOpen)
        {
         marketNature = "Bearish";
        }
      else
        {
         marketNature = "Neutral";
        }

//--- Compare volumes and determine market sentiment
   string volumeCommentary;
   if(currentDayVolume > prevDayVolume)
     {
      volumeCommentary = "Current day volume is higher than previous day volume. Bullish sentiment may continue.";
     }
   else
      if(currentDayVolume < prevDayVolume)
        {
         volumeCommentary = "Current day volume is lower than previous day volume. Bearish sentiment may follow.";
        }
      else
        {
         volumeCommentary = "Current day volume is equal to previous day volume. Market sentiment remains uncertain.";
        }

//--- Generate market movement commentary
   string marketCommentary;
   if(marketNature == "Bullish")
     {
      marketCommentary = "The market closed higher yesterday, indicating bullish sentiment. Look for potential continuation patterns.";
     }
   else
      if(marketNature == "Bearish")
        {
         marketCommentary = "The market closed lower yesterday, indicating bearish sentiment. Consider taking positions that align with this trend.";
        }
      else
        {
         marketCommentary = "The market showed neutrality with little change. Watch for potential breakout opportunities.";
        }

//--- Display the information in a table-like format on the chart
   string textOutput = "Previous Day Analytics:\n";
   textOutput += "Open: " + DoubleToString(prevDayOpen, 5) + "\n";
   textOutput += "Close: " + DoubleToString(prevDayClose, 5) + "\n";
   textOutput += "High: " + DoubleToString(prevDayHigh, 5) + "\n";
   textOutput += "Low: " + DoubleToString(prevDayLow, 5) + "\n";
   textOutput += "Volume (Prev Day): " + DoubleToString(prevDayVolume, 0) + "\n";
   textOutput += "Volume (Current Day): " + DoubleToString(currentDayVolume, 0) + "\n";
   textOutput += "Support: " + DoubleToString(keySupport, 5) + "\n";
   textOutput += "Resistance: " + DoubleToString(keyResistance, 5) + "\n";
   textOutput += "\nMarket Nature: " + marketNature + "\n";
   textOutput += volumeCommentary + "\n";
   textOutput += marketCommentary;

// Draw the text output on the chart
   Comment(textOutput);
  }

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


Desenvolvimento do código

Vamos implementar nosso código no MetaEditor. Neste caso, optamos por criar um script. Abaixo, descrevemos as etapas para atingir esse objetivo.

1. Propriedades

Essas propriedades permitem indicar corretamente a autoria do seu trabalho e compartilhar informações importantes sobre o autor ou a fonte do script. Elas também especificam a versão do script, o que é útil para acompanhar atualizações e informar os usuários sobre quaisquer mudanças.

#property copyright "2024, MetaQuotes Software Corp"
#property link      "https://www.mql5.com/en/users/lynnchris"
#property version   "1.0"

2. Adição das bibliotecas necessárias

Esta linha inclui a biblioteca Trade.mqh.

Trade – o termo provavelmente se refere a diferentes funções, classes ou objetos voltados para o gerenciamento de operações de trading. Esses elementos facilitam a execução de negociações, a verificação do status de ordens e o processamento de tarefas relacionadas dentro de seus algoritmos de trading.

.mqh – a extensão de arquivo usada para arquivos de cabeçalho da MetaQuotes. No MetaTrader, arquivos .mqh servem para armazenar código reutilizável, incluindo funções, classes ou bibliotecas. Esse código pode ser facilmente incorporado em outros programas MQL, aumentando a eficiência e a modularidade.

#include <Trade\Trade.mqh>

3. Parâmetros de entrada: 

Um parâmetro de entrada é uma variável definida em um programa MQL5 que os usuários podem configurar no testador de estratégias ou nas configurações de entrada de um EA (Expert Advisor), sem a necessidade de alterar o código base.

O script também permite que os traders insiram parâmetros personalizados, oferecendo flexibilidade para adaptar a análise às suas preferências. Isso significa que eles podem escolher símbolos específicos ou cores para as linhas de suporte e resistência, tornando a ferramenta mais personalizada e de fácil leitura.

input color TableTextColor = clrBlue; // Text color for the table
input int   TableXOffset   = 10;      // X offset for the table
input int   TableYOffset   = 50;      // Y offset for the table
input color SupportColor = clrGreen; // Color for the support line
input color ResistanceColor = clrRed; // Color for the resistance line

Em seguida, passamos às variáveis globais. Essas variáveis armazenam informações sobre o comportamento de preço do dia anterior e o volume do dia atual. As variáveis keySupport e keyResistance são inicializadas posteriormente no código.

double prevDayHigh, prevDayLow, prevDayOpen, prevDayClose, prevDayVolume;
double currentDayVolume;
double keySupport, keyResistance; // Initialized but will be calculated

4. Funcionalidade principal:

Esta é a função principal, a partir da qual a execução do script tem início. Todo o conteúdo desta função será executado assim que o script for iniciado. Os scripts são programas de execução única, projetados para realizar tarefas específicas no ambiente do MetaTrader 5, como abrir uma negociação, modificar ordens ou gerar sinais.

void OnStart()

Primeiro, extraímos os dados do dia de negociação anterior, incluindo níveis de preço e volume. Nesta etapa, é definido o índice da última barra diária concluída, o que é essencial para analisar o comportamento recente do mercado e tomar decisões de trading fundamentadas.

int prevDayIndex = iBarShift(NULL, PERIOD_D1, iTime(NULL, PERIOD_D1, 1));

Em seguida, verifica-se se o índice do dia anterior foi obtido com sucesso. Caso contrário, é exibida uma mensagem de erro e a função é encerrada.

if (prevDayIndex == -1)
{
   Print("Error retrieving previous day's data.");
   return;
}

Depois, são extraídos os dados do dia anterior:

prevDayHigh    = iHigh(NULL, PERIOD_D1, prevDayIndex);
prevDayLow     = iLow(NULL, PERIOD_D1, prevDayIndex);
prevDayOpen    = iOpen(NULL, PERIOD_D1, prevDayIndex);
prevDayClose   = iClose(NULL, PERIOD_D1, prevDayIndex);
prevDayVolume  = iVolume(NULL, PERIOD_D1, prevDayIndex);

Obtenção do volume do dia atual

Permite capturar o volume do dia em curso.

currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Current day's volume

Cálculo dos níveis de suporte e resistência

O nível de suporte é definido no mínimo do dia anterior, enquanto o nível de resistência é definido no máximo do dia anterior.

keySupport = prevDayLow;  // Support level can be set to the previous day's low
keyResistance = prevDayHigh; // Resistance level can be set to the previous day's high

Criação das linhas de suporte e resistência

Aqui é feita a tentativa de criar uma linha horizontal representando o suporte. Em caso de falha, é exibida uma mensagem de erro. O mesmo processo ocorre para a linha de resistência.

if (!ObjectCreate(0, "SupportLine", OBJ_HLINE, 0, 0, keySupport))
{
   Print("Failed to create SupportLine");
}

Definição da natureza do mercado

Na etapa seguinte, determina-se se o mercado foi bullish, bearish ou neutro com base nos preços de abertura e fechamento do dia anterior:

if (prevDayClose > prevDayOpen)
{
   marketNature = "Bullish";
}
else if (prevDayClose < prevDayOpen)
{
   marketNature = "Bearish";
}
else
{
   marketNature = "Neutral";
}

Comentário

A função Comment() permite exibir texto descritivo diretamente no gráfico de trading. Isso pode ser usado para mostrar informações importantes, como valores atuais, sinais de trading ou mensagens de status.

Abaixo está o comentário referente ao dia atual e ao anterior:

if (currentDayVolume > prevDayVolume)
{
   volumeCommentary = "Current day volume is higher...";
}
else if (currentDayVolume < prevDayVolume)
{
   volumeCommentary = "Current day volume is lower...";
}
else
{
   volumeCommentary = "Current day volume is equal...";
}

O script utiliza a função Comment para registrar no gráfico uma mensagem clara e formatada, exibindo a abertura, a máxima, a mínima, o fechamento do dia anterior, assim como os volumes do dia anterior e do dia atual. Isso serve como referência imediata para os traders.

if (marketNature == "Bullish")
{
   marketCommentary = "The market closed higher yesterday...";
}
else if (marketNature == "Bearish")
{
   marketCommentary = "The market closed lower yesterday...";
}
else
{
   marketCommentary = "The market showed neutrality...";
}

Exibição dos dados

Por fim, é criada uma mensagem de texto com todos os dados coletados, e ela é exibida no gráfico:

string textOutput = "Previous Day Analytics:\n";
textOutput += "Open: " + DoubleToString(prevDayOpen, 5) + "\n";
...
textOutput += marketCommentary;

// Draw the text output on the chart
Comment(textOutput);


Testes

Os passos a seguir garantem a implementação bem-sucedida do script.

1: Abra o MetaTrader 5 e vá até o MetaEditor.

2: No MetaEditor, crie um novo script selecionando "Criar" > "Script".

3: Copie e cole o script fornecido no editor.

4: Compile o script usando o botão "Compilar". Certifique-se de que não haja erros.

5: Volte ao MetaTrader, localize o script no painel "Navegador", dentro da seção "Scripts", e arraste-o para o gráfico desejado. Após arrastar o script para o gráfico, obtive o seguinte resultado:

  Resultado do teste 1

Figura 3. Resultado do primeiro teste da ferramenta

6: Defina quaisquer parâmetros de entrada personalizados (se desejar) na janela de diálogo exibida. Abaixo está uma imagem em GIF demonstrando como alterei alguns parâmetros no MetaTrader 5.

  Alteração de parâmetros

Figura 4. Configuração de parâmetros

Após a execução do script, foram obtidos os seguintes resultados. Abaixo estão três imagens em GIF de diferentes pares nos quais testei o script. No primeiro GIF é mostrada a dupla USDSEK, que apresentou os seguintes resultados.

  Resultado do funcionamento da ferramenta

Figura 5. Resultado do segundo teste da ferramenta

Na figura 5 acima, a ferramenta representa de forma eficiente as informações necessárias. Ela indica uma expectativa de sentimento bullish no mercado. Inicialmente, o mercado passou por um pequeno movimento bearish, mas ao longo do dia surgiu um forte impulso bullish.

Em segundo lugar, também analisamos o índice Crash 900.

  Resultado do teste

Figura 6. Resultado do terceiro teste da ferramenta

Na figura 6 do índice Crash 900, as informações também foram apresentadas de forma clara, mostrando sentimentos bearish que se desenvolveram de forma rápida e unidirecional.

Lastly, we analyzed the USDCNH pair, as detailed below.

  Resultado

Figura 7. Resultado do quarto teste da ferramenta

Na figura 7 acima, a ferramenta apresentou resultados excepcionalmente bons, apontando para um movimento bullish do mercado. O mercado reagiu de forma correspondente, respeitando tanto os níveis de resistência quanto de suporte.

Além disso, durante os testes da ferramenta na figura 3 (índice Boom 300), foram obtidos alguns resultados notáveis. Ela ilustra de forma clara os preços de abertura e fechamento do dia anterior, fornecendo informações valiosas para a análise do mercado e de seu comportamento. Os dados também apontam para uma tendência bearish.


Considerações finais

Após o desenvolvimento e os testes bem-sucedidos da ferramenta, posso afirmar com segurança que o instrumento de comentários analíticos é confiável. Sua capacidade de analisar rapidamente os movimentos anteriores do mercado, identificar níveis de suporte e resistência, calcular volumes de negociação e fornecer informações sobre possíveis movimentos futuros de preços com base nos dados coletados é impressionante.

 As informações são apresentadas de forma clara, o que aumenta a praticidade de uso. Incentivo os traders a integrarem suas próprias estratégias de trading a essa ferramenta, a fim de aprimorar seus resultados e tomar decisões mais assertivas. Além disso, observei que a ferramenta funciona de maneira mais eficaz ao longo do dia, já que calcula volumes temporais atuais, que podem ser necessários para uma análise precisa.

Data Nome da ferramenta   Características Versão  Atualizações  Observações
01/10/24 Chart Projector Script para sobreposição do efeito fantasma no movimento do preço do dia anterior.  1.0 Versão inicial Primeira ferramenta no Lynnchris Tools Chest
18/11/24 Analytical Comment Fornece informações do dia anterior em formato de tabela, além de prever a direção futura do mercado.  1.0 Versão inicial Segunda ferramenta no Lynnchris Tools Chest

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

Arquivos anexados |
Negociando com o Calendário Econômico MQL5 (Parte 2): Criando um Painel de Notícias Negociando com o Calendário Econômico MQL5 (Parte 2): Criando um Painel de Notícias
Neste artigo, criamos um painel prático de notícias usando o Calendário Econômico MQL5 para aprimorar nossa estratégia de negociação. Começamos projetando o layout, focando em elementos-chave como nomes dos eventos, importância e horário, antes de avançar para a configuração dentro do MQL5. Por fim, implementamos um sistema de filtragem para exibir apenas as notícias mais relevantes, dando aos traders acesso rápido a eventos econômicos impactantes.
Ciência de dados e aprendizado de máquina (Parte 32): Como manter a relevância de modelos de IA com treinamento on-line Ciência de dados e aprendizado de máquina (Parte 32): Como manter a relevância de modelos de IA com treinamento on-line
No mundo em constante transformação do trading, adaptar-se às mudanças do mercado é simplesmente uma necessidade. Todos os dias surgem novos padrões e tendências, o que torna difícil até mesmo para os modelos mais avançados de aprendizado de máquina manterem sua eficácia diante de condições em mutação. Neste artigo, vamos falar sobre como manter os modelos relevantes e capazes de reagir a novos dados de mercado por meio de reeducação automática.
Informação mútua como critério para seleção progressiva de características Informação mútua como critério para seleção progressiva de características
Neste artigo apresentamos a implementação da seleção progressiva de características em MQL5, baseada na informação mútua entre o conjunto ótimo de preditores e a variável alvo.
Automatização de estratégias de trading com MQL5 (Parte 1): Sistema Profitunity (Trading Chaos de Bill Williams) Automatização de estratégias de trading com MQL5 (Parte 1): Sistema Profitunity (Trading Chaos de Bill Williams)
Neste artigo exploraremos o sistema Profitunity de autoria de Bill Williams, destrinchando seus principais componentes e sua abordagem única para operar em condições caóticas de mercado. Demonstramos para o leitor a implementação da estratégia na linguagem de programação MQL5, com ênfase na automatização dos principais indicadores e sinais de entrada/saída. Finalmente, testaremos e otimizaremos a estratégia, analisando em detalhes sua eficácia em diferentes cenários de mercado.