Desenvolvimento de ferramentas para análise do movimento de preços (Parte 2): Script de comentários analíticos
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:
- Por que exatamente esta ferramenta?
- Visão geral da nova ferramenta
- Script em MQL5
- Desenvolvimento do código
- Testes
- 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.

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.

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:

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.

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.

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.

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.

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
Aviso: Todos os direitos sobre esses materiais pertencem à MetaQuotes Ltd. É proibida a reimpressão total ou parcial.
Esse artigo foi escrito por um usuário do site e reflete seu ponto de vista pessoal. A MetaQuotes Ltd. não se responsabiliza pela precisão das informações apresentadas nem pelas possíveis consequências decorrentes do uso das soluções, estratégias ou recomendações descritas.
Negociando com o Calendário Econômico MQL5 (Parte 2): Criando um Painel de Notícias
Ciência de dados e aprendizado de máquina (Parte 32): Como manter a relevância de modelos de IA com treinamento on-line
Informação mútua como critério para seleção progressiva de características
Automatização de estratégias de trading com MQL5 (Parte 1): Sistema Profitunity (Trading Chaos de Bill Williams)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso