Indicador técnico

Buffers Horários para Coleta de Dados no MetaTrader 5
MetaTrader5
Buffers Horários para Coleta de Dados no MetaTrader 5

Objetivo Se você está buscando coletar dados para modelagem, este indicador é uma mão na roda! Ele cria um vetor de buffers binários para cada hora do dia, facilitando a inclusão de colunas de hora em suas análises. Praticamente um facilitador para quem trabalha com modelos econômicos! Ao coletar dados de outros indicadores, por exemplo, usando a função CopyBuffer, este indicador possibilita a adição de colunas de hora como dados extras. Uma ótima maneira de enriquecer suas análises! Um código simples para quem coleta dados, especialmente se você está pensando em Machine Learning. Com ele, você já tem uma variável dummy (buffers de 0 a 23) ou uma variável de hora (buffer 24) pronta para uso em modelagem. Explorando o Código Começamos declarando o número de buffers e plots como 25: #property indicator_chart_window #property indicator_buffers 25 #property indicator_plots 25 Rotulagem dos Buffers Definimos os rótulos dos buffers para a janela de dados: #property indicator_label1 "Hora 00" #property indicator_label2 "Hora 01" #property indicator_label3 "Hora 02" #property indicator_label4 "Hora 03" #property indicator_label5 "Hora 04" #property indicator_label6 "Hora 05" #property indicator_label7 "Hora 06" #property indicator_label8 "Hora 07" #property indicator_label9 "Hora 08" #property indicator_label10 "Hora 09" #property indicator_label11 "Hora 10" #property indicator_label12 "Hora 11" #property indicator_label13 "Hora 12" #property indicator_label14 "Hora 13" #property indicator_label15 "Hora 14" #property indicator_label16 "Hora 15" #property indicator_label17 "Hora 16" #property indicator_label18 "Hora 17" #property indicator_label19 "Hora 18" #property indicator_label20 "Hora 19" #property indicator_label21 "Hora 20" #property indicator_label22 "Hora 21" #property indicator_label23 "Hora 22" #property indicator_label24 "Hora 23" #property indicator_label25 "Hora" Declaração dos Buffers Em seguida, declaramos os buffers e uma variável inteira para a hora do dia, que será calculada posteriormente. double hourBuffer0[]; double hourBuffer1[]; double hourBuffer2[]; double hourBuffer3[]; double hourBuffer4[]; double hourBuffer5[]; double hourBuffer6[]; double hourBuffer7[]; double hourBuffer8[]; double hourBuffer9[]; double hourBuffer10[]; double hourBuffer11[]; double hourBuffer12[]; double hourBuffer13[]; double hourBuffer14[]; double hourBuffer15[]; double hourBuffer16[]; double hourBuffer17[]; double hourBuffer18[]; double hourBuffer19[]; double hourBuffer20[]; double hourBuffer21[]; double hourBuffer22[]; double hourBuffer23[]; double hourBuffer[]; int bar_hour; Indexação e Desenho dos Gráficos Setamos o índice para todos os buffers como dados, e desabilitamos o desenho usando um loop. É importante notar que tentar fazer a indexação via loop apresentou erro, então fizemos isso manualmente. No entanto, o loop funcionou perfeitamente para PlotIndexSetInteger. // Atribuindo buffers ao índice, ocultando do gráfico, mostrando na janela de dados SetIndexBuffer(0, hourBuffer0, INDICATOR_DATA); SetIndexBuffer(1, hourBuffer1, INDICATOR_DATA); SetIndexBuffer(2, hourBuffer2, INDICATOR_DATA); SetIndexBuffer(3, hourBuffer3, INDICATOR_DATA); SetIndexBuffer(4, hourBuffer4, INDICATOR_DATA); SetIndexBuffer(5, hourBuffer5, INDICATOR_DATA); SetIndexBuffer(6, hourBuffer6, INDICATOR_DATA); SetIndexBuffer(7, hourBuffer7, INDICATOR_DATA); SetIndexBuffer(8, hourBuffer8, INDICATOR_DATA); SetIndexBuffer(9, hourBuffer9, INDICATOR_DATA); SetIndexBuffer(10, hourBuffer10, INDICATOR_DATA); SetIndexBuffer(11, hourBuffer11, INDICATOR_DATA); SetIndexBuffer(12, hourBuffer12, INDICATOR_DATA); SetIndexBuffer(13, hourBuffer13, INDICATOR_DATA); SetIndexBuffer(14, hourBuffer14, INDICATOR_DATA); SetIndexBuffer(15, hourBuffer15, INDICATOR_DATA); SetIndexBuffer(16, hourBuffer16, INDICATOR_DATA); SetIndexBuffer(17, hourBuffer17, INDICATOR_DATA); SetIndexBuffer(18, hourBuffer18, INDICATOR_DATA); SetIndexBuffer(19, hourBuffer19, INDICATOR_DATA); SetIndexBuffer(20, hourBuffer20, INDICATOR_DATA); SetIndexBuffer(21, hourBuffer21, INDICATOR_DATA); SetIndexBuffer(22, hourBuffer22, INDICATOR_DATA); SetIndexBuffer(23, hourBuffer23, INDICATOR_DATA); SetIndexBuffer(24, hourBuffer, INDICATOR_DATA); for(int i = 0; i < 24; i++) { PlotIndexSetInteger(i, PLOT_DRAW_TYPE, DRAW_NONE); PlotIndexSetInteger(i, PLOT_SHOW_DATA, true); } return(INIT_SUCCEEDED);} Função OnCalculate e Loop do Programa A seguir, passamos para a função OnCalculate: Nela, zeramos todos os buffers e alteramos somente o correspondente à hora atual para um. if(rates_total 0 ? prev_calculated - 1 : 0); for(int i = start; i < rates_total; i++) { // Calcular hora (0..23) para a barra i bar_hour = (int)((time[i] % 86400) / 3600); // 1) Zerar TODOS os 24 buffers para a barra i hourBuffer0[i] = 0.0; hourBuffer1[i] = 0.0; hourBuffer2[i] = 0.0; hourBuffer3[i] = 0.0; hourBuffer4[i] = 0.0; hourBuffer5[i] = 0.0; hourBuffer6[i] = 0.0; hourBuffer7[i] = 0.0; hourBuffer8[i] = 0.0; hourBuffer9[i] = 0.0; hourBuffer10[i] = 0.0; hourBuffer11[i] = 0.0; hourBuffer12[i] = 0.0; hourBuffer13[i] = 0.0; hourBuffer14[i] = 0.0; hourBuffer15[i] = 0.0; hourBuffer16[i] = 0.0; hourBuffer17[i] = 0.0; hourBuffer18[i] = 0.0; hourBuffer19[i] = 0.0; hourBuffer20[i] = 0.0; hourBuffer21[i] = 0.0; hourBuffer22[i] = 0.0; hourBuffer23[i] = 0.0; hourBuffer[i] = EMPTY_VALUE; // 2) Agora setamos APENAS o buffer correspondente para 1 switch(bar_hour) { case 0: hourBuffer0[i] = 1.0; hourBuffer[i] = bar_hour; break; case 1: hourBuffer1[i] = 1.0; hourBuffer[i] = bar_hour; break; case 2: hourBuffer2[i] = 1.0; hourBuffer[i] = bar_hour; break; case 3: hourBuffer3[i] = 1.0; hourBuffer[i] = bar_hour; break; case 4: hourBuffer4[i] = 1.0; hourBuffer[i] = bar_hour; break; case 5: hourBuffer5[i] = 1.0; hourBuffer[i] = bar_hour; break; case 6: hourBuffer6[i] = 1.0; hourBuffer[i] = bar_hour; break; case 7: hourBuffer7[i] = 1.0; hourBuffer[i] = bar_hour; break; case 8: hourBuffer8[i] = 1.0; hourBuffer[i] = bar_hour; break; case 9: hourBuffer9[i] = 1.0; hourBuffer[i] = bar_hour; break; case 10: hourBuffer10[i] = 1.0; hourBuffer[i] = bar_hour; break; case 11: hourBuffer11[i] = 1.0; hourBuffer[i] = bar_hour; break; case 12: hourBuffer12[i] = 1.0; hourBuffer[i] = bar_hour; break; case 13: hourBuffer13[i] = 1.0; hourBuffer[i] = bar_hour; break; case 14: hourBuffer14[i] = 1.0; hourBuffer[i] = bar_hour; break; case 15: hourBuffer15[i] = 1.0; hourBuffer[i] = bar_hour; break; case 16: hourBuffer16[i] = 1.0; hourBuffer[i] = bar_hour; break; case 17: hourBuffer17[i] = 1.0; hourBuffer[i] = bar_hour; break; case 18: hourBuffer18[i] = 1.0; hourBuffer[i] = bar_hour; break; case 19: hourBuffer19[i] = 1.0; hourBuffer[i] = bar_hour; break; case 20: hourBuffer20[i] = 1.0; hourBuffer[i] = bar_hour; break; case 21: hourBuffer21[i] = 1.0; hourBuffer[i] = bar_hour; break; case 22: hourBuffer22[i] = 1.0; hourBuffer[i] = bar_hour; break; case 23: hourBuffer23[i] = 1.0; hourBuffer[i] = bar_hour; break; } string localHourText = HourToText(bar_hour); Comment("A hora é: ", localHourText); } // Retornar número de barras processadas return(rates_total);} Função para adicionar sabor ao comentário Por último, um programa para um comentário: Isso é, na verdade, um cheque de depuração, mas deixei o comentário como está. string HourToText(int bh) { string TextHour; switch(bh) { case 0: TextHour = "12 am"; // meia-noite em formato de 12 horas break; case 1: TextHour = "1 am"; break; case 2: TextHour = "2 am"; break; case 3: TextHour = "3 am"; break; case 4: TextHour = "4 am"; break; case 5: TextHour = "5 am"; break; case 6: TextHour = "6 am"; break; case 7: TextHour = "7 am"; break; case 8: TextHour = "8 am"; break; case 9: TextHour = "9 am"; break; case 10: TextHour = "10 am"; break; case 11: TextHour = "11 am"; break; case 12: TextHour = "12 pm"; // meio-dia em formato de 12 horas break; case 13: TextHour = "1 pm"; break; case 14: TextHour = "2 pm"; break; case 15: TextHour = "3 pm"; break; case 16: TextHour = "4 pm"; break; case 17: TextHour = "5 pm"; break; case 18: TextHour = "6 pm"; break; case 19: TextHour = "7 pm"; break; case 20: TextHour = "8 pm"; break; case 21: TextHour = "9 pm"; break; case 22: TextHour = "10 pm"; break; case 23: TextHour = "11 pm"; break; default: // Apenas para o caso de 'bh' estar fora do intervalo (0..23) TextHour = "Desconhecido"; break; } return TextHour; } Note que isso só exibe atualmente através da janela de dados. Feliz Natal e um próspero Ano Novo de 2025 a todos!

2024.12.25
Indicador Fibonacci Bollinger Bands para MetaTrader 5: Potencialize sua Análise Técnica
MetaTrader5
Indicador Fibonacci Bollinger Bands para MetaTrader 5: Potencialize sua Análise Técnica

Se você está em busca de ferramentas para aprimorar sua análise técnica, precisa conhecer o indicador Fibonacci Bollinger Bands. Este indicador é uma conversão do Pine Script (desenvolvido por Rashad) para a linguagem MQL5, que combina a eficiência das Bollinger Bands com os níveis de Fibonacci, oferecendo uma perspectiva única para identificar zonas de suporte e resistência dinâmicas. Principais características: Calcula automaticamente os níveis de Fibonacci nas Bollinger Bands. Proporciona uma visão diferenciada para operações de rompimento e reversão. Compatível com MetaTrader 5. Esse indicador é ideal para traders que desejam fortalecer suas análises técnicas. Baixe e teste hoje mesmo! Código do Pine Script: study(shorttitle="FBB", title="Fibonacci Bollinger Bands", overlay=true)\nlength = input(200, minval=1)\nsrc = input(hlc3, title="Source")\nmult = input(3.0, minval=0.001, maxval=50)\nbasis = vwma(src, length)\ndev = mult * stdev(src, length)\nupper_1= basis + (0.236*dev)\nupper_2= basis + (0.382*dev)\nupper_3= basis + (0.5*dev)\nupper_4= basis + (0.618*dev)\nupper_5= basis + (0.764*dev)\nupper_6= basis + (1*dev)\nlower_1= basis - (0.236*dev)\nlower_2= basis - (0.382*dev)\nlower_3= basis - (0.5*dev)\nlower_4= basis - (0.618*dev)\nlower_5= basis - (0.764*dev)\nlower_6= basis - (1*dev)\nplot(basis, color=fuchsia, linewidth=2)\np1 = plot(upper_1, color=white, linewidth=1, title="0.236")\np2 = plot(upper_2, color=white, linewidth=1, title="0.382")\np3 = plot(upper_3, color=white, linewidth=1, title="0.5")\np4 = plot(upper_4, color=white, linewidth=1, title="0.618")\np5 = plot(upper_5, color=white, linewidth=1, title="0.764")\np6 = plot(upper_6, color=red, linewidth=2, title="1")\np13 = plot(lower_1, color=white, linewidth=1, title="0.236")\np14 = plot(lower_2, color=white, linewidth=1, title="0.382")\np15 = plot(lower_3, color=white, linewidth=1, title="0.5")\np16 = plot(lower_4, color=white, linewidth=1, title="0.618")\np17 = plot(lower_5, color=white, linewidth=1, title="0.764")\np18 = plot(lower_6, color=green, linewidth=2, title="1") Exemplo em MQL5:

2024.12.04
Calendário Econômico: Monitoramento e Cache para Testes de Estratégia no MetaTrader 5
MetaTrader5
Calendário Econômico: Monitoramento e Cache para Testes de Estratégia no MetaTrader 5

Para resumir tudo: o calendário econômico embutido no MetaTrader 5 não está (completamente) sincronizado com as cotações históricas. As cotações são marcadas com timestamps de acordo com os fusos horários que estavam em vigor no servidor no momento da formação de cada barra correspondente. Uma vez formadas, as barras permanecem inalteradas, incluindo seus timestamps. Por outro lado, o calendário econômico fornece informações sobre eventos (passados, presentes e futuros) de acordo com o fuso horário atual do servidor. Muitos corretores seguem um cronograma de fuso horário específico, incluindo a ativação e desativação do horário de verão, o que pode fazer com que os timestamps dos eventos históricos estejam deslocados em até 1 hora em relação às barras associadas, durante cerca de metade do ano. Além disso, os corretores às vezes mudam de fuso horário de maneira mais radical do que apenas a troca do horário de verão. As cotações históricas podem parecer deslocadas várias horas para a esquerda ou para a direita em relação ao horário dos eventos econômicos que originalmente ocorreram, mas que agora são reportados pelo calendário no fuso horário atualizado do servidor. Considerando que as notícias vêm de diferentes países com seus próprios horários de verão e que seu servidor pode estar localizado em uma região com outro cronograma, o horário das liberações de notícias pode "pular" visualmente para frente e para trás nos gráficos de maneira peculiar (por exemplo, por várias semanas na primavera e no outono). Tudo isso pode não parecer tão importante online, mas e se quisermos testar uma estratégia baseada em notícias? Sim, você pode dizer que o calendário não é suportado nativamente no tester do MetaTrader, mas muitos traders gostam de operar com notícias, e todos os outros que não estão interessados devem acompanhar as notícias para simplesmente se afastar do mercado antes que ele fique agitado durante esses eventos. Portanto, realizar testes de estratégia com o calendário é essencial. É por isso que faz muito sentido exportar o calendário para um armazenamento externo (arquivo, banco de dados) e depois importá-lo para o tester. Uma dessas ferramentas de arquivamento para a experiência com o calendário no tester foi apresentada no livro de algotrading. Entramos em um problema de desincronização das cotações históricas com os eventos históricos. Para simplificar, esse problema foi deixado sem resolução no livro. Agora, a situação foi solucionada graças à versão estendida do CalendarCache.mqh e do indicador CalendarMonitorCachedTZ.mq5. Esta é uma versão ligeiramente alterada do CalendarMonitorCached.mq5 do livro. O indicador monitora eventos de notícias e atualiza dinamicamente uma tabela no gráfico com vários eventos passados e futuros. Todo o trabalho relacionado à correção de horários é feito em segundo plano - na outra biblioteca pública TimeServerDST.mqh. Para entender melhor como a correção de horários funciona, você pode usar o script CalendarCSVForDates.mq5 e comparar arquivos CSV com e sem correção lado a lado. E aqui está como a biblioteca é incorporada nos códigos fonte de ambos os programas - o script e este indicador. #include &lt;TimeServerDST.mqh&gt; // incluindo antes do cache do calendário habilita o suporte à correção de fuso horário#include &lt;MQL5Book/CalendarFilterCached.mqh&gt;#include &lt;MQL5Book/CalendarCache.mqh&gt; Como no indicador original, existe a entrada de string CalendarCacheFile, onde você pode fornecer um nome de arquivo de calendário para leitura ou gravação. Quando o indicador é anexado a um gráfico online com CalendarCacheFile vazio, ele funciona com o calendário embutido em tempo real. Quando o indicador é executado com um nome específico em CalendarCacheFile e o arquivo não existe, o indicador exporta os registros do calendário para o arquivo de cache (cria o arquivo) e sai. Este é o estágio em que os timestamps devem/podem ser corrigidos (veja FixCachedTimesBySymbolHistory abaixo). Quando o indicador é executado com um nome de arquivo de cache existente em CalendarCacheFile, ele carrega o cache e trabalha com essa cópia da mesma forma que com o calendário embutido. Isso é especialmente útil para o tester. Por favor, não se esqueça que o tester requer especificar arquivos adicionais, neste caso - o arquivo de calendário online preparado, na diretiva #property tester_file OU você deve colocar o arquivo de calendário na pasta comum C:/Users/&lt;Usuário&gt;/AppData/Roaming/MetaQuotes/Terminal/Common/. Claro, o cache também pode ser carregado em um EA durante testes de retrocessos e otimizações. A string de entrada FixCachedTimesBySymbolHistory é processada da seguinte forma. Se estiver vazia, o indicador salva o cache sem correções de horário. Para habilitar as correções de horário durante a exportação, você deve especificar um símbolo, que será usado para a detecção empírica dos fusos horários históricos do servidor. Ele funciona com base no histórico de cotações H1, preferencialmente "XAUUSD" ou "EURUSD". Com a ajuda dessa entrada, apenas algumas linhas são adicionadas à nova versão do indicador: if (StringLen(FixCachedTimesBySymbolHistory))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cache[].adjustTZonHistory(FixCachedTimesBySymbolHistory, true); O método adjustTZonHistory foi especificamente introduzido na classe CalendarCache para ajustes de timestamps, e sua implementação utiliza os internos do TimeServerDST.mqh. O método deve ser chamado online apenas (não no tester). Normalmente, o método deve ser chamado em objetos de cache preenchidos a partir do calendário embutido, logo após o preenchimento. Caso contrário, se o cache for carregado de um arquivo de calendário, ou se o método já foi chamado anteriormente, o conteúdo do cache pode já estar ajustado. Então você aplicaria uma correção sobre a correção e obteria timestamps errados. O segundo parâmetro (true) instrui o método a registrar os limites das alterações aplicadas no log. Algo assim: Correção de horário iniciada em 2021.07.19 00:30:002021.07.19 00:30:00: 148786 -10800 diff=-36002021.11.08 01:50:00: 135918 -7200 OK2022.03.14 04:30:00: 161085 -10800 diff=-36002022.11.07 04:00:00: 165962 -7200 OK2023.03.13 01:50:00: 168500 -10800 diff=-36002023.11.06 01:50:00: 169270 -7200 OK2024.03.11 01:50:00: 181258 -10800 diff=-36002024.11.04 02:30:00: 208469 -7200 OK Cada linha contém um horário e ID de um evento onde uma nova discrepância foi detectada, o deslocamento do horário do servidor no evento e qual diferença deve ser aplicada a todos os timestamps subsequentes para eliminar o viés no horário do servidor no momento do cache do calendário. Os arquivos mqh anexados (CalendarFilter.mqh, CalendarCache.mqh, QuickSortStructT(Ref).mqh) contêm correções e melhorias em comparação com suas versões originais do livro. Atualizações 11.11.2024 - pequenas correções e atualizações em CalendarFilter.mqh, CalendarCache.mqh; 22.11.2024 - pequenas correções e melhorias em CalendarCache.mqh.

2024.11.11
Altos e Baixos Extremos: Indicador para MetaTrader 5
MetaTrader5
Altos e Baixos Extremos: Indicador para MetaTrader 5

Se você está em busca de um indicador que marque os extremos de preços com precisão, você está no lugar certo! Esse indicador é uma ferramenta valiosa para identificar os pontos mais altos e mais baixos dentro de um período definido. O que o torna especial é que ele não se baseia apenas nos preços de abertura, máxima, mínima e fechamento (OHLC), mas também considera os preços de compra e venda de cada barra. Outra característica interessante desse indicador é que ele evita desenhar linhas em áreas de quebra de estrutura, ou seja, quando um novo topo ou fundo é formado. Isso significa que ele só irá mostrar linhas em áreas de suporte e resistência reais, o que pode ajudar bastante na hora de tomar decisões de compra ou venda. E não se preocupe, você pode ajustar essa funcionalidade conforme a sua estratégia, tornando possível visualizar os preços extremos e as inclinações das linhas quando o mercado está em tendência. ---------------------------------------------------- Novidades na versão 2.0 Agora, o indicador utiliza uma otimização que considera apenas os ticks da barra atual, permitindo que ele funcione perfeitamente em timeframes mais altos. Foram removidos buffers desnecessários, tornando-o mais eficiente. Com essas melhorias, você terá uma ferramenta ainda mais poderosa para suas operações. Experimente e veja como ele pode ajudar a aprimorar suas análises!

2024.11.09
Indicador Hammer: Identificando Reversões no MetaTrader 5
MetaTrader5
Indicador Hammer: Identificando Reversões no MetaTrader 5

O Indicador Hammer é uma ferramenta poderosa que ajuda a identificar formações de velas importantes, como martelos verdes, vermelhos e martelos invertidos, no gráfico do MetaTrader 5. Ele foi projetado para destacar potenciais pontos de reversão de preço ao analisar a estrutura das velas em cada barra. Um martelo é normalmente caracterizado por um corpo pequeno e uma longa sombra inferior, indicando uma possível pressão de compra após uma tendência de baixa. Por outro lado, o martelo invertido possui uma longa sombra superior e pode sugerir uma reversão após uma tendência de alta. Esse indicador calcula o tamanho e a proporção das sombras e corpos das velas para detectar esses padrões, utilizando três parâmetros principais que podem ser personalizados: MaxRatioShortWick: Define a proporção máxima para a sombra curta em relação à vela completa, filtrando padrões com sombras superiores mínimas. MinRatioLongWick: Estabelece a proporção mínima para a sombra longa, assegurando que os padrões detectados tenham comprimentos de sombra significativos em comparação com o corpo da vela. MinCandleSize: Especifica o tamanho mínimo da vela necessário para qualificar-se como um padrão de martelo ou martelo invertido. Uma vez que um padrão é identificado, o indicador exibe uma seta em uma cor designada (verde ou vermelha) no gráfico, posicionada próximo ao preço mais alto ou mais baixo da vela, dependendo da direção do padrão. As funções dentro do código cuidam da criação e posicionamento desses objetos gráficos, além de limpar os objetos quando o indicador é removido do gráfico. Esse indicador é ideal para traders que buscam identificar potenciais reversões, e seus parâmetros podem ser ajustados para se adequar a diferentes intervalos de tempo e condições de mercado. É uma ferramenta versátil que pode complementar diversas estratégias de trading, oferecendo dicas visuais precoces para possíveis mudanças de preço.

2024.10.31
Indicador de Dias da Semana e Semanas do Ano para MetaTrader 5: Como Utilizar
MetaTrader5
Indicador de Dias da Semana e Semanas do Ano para MetaTrader 5: Como Utilizar

O indicador WeekDays exibe o Dia da Semana, Semana do Ano, Dia do Ano ou Índice da Barra na Janela de Dados, além de opcionalmente mostrar etiquetas no gráfico. Como de costume, as informações na Janela de Dados são atualizadas dinamicamente conforme o movimento do mouse: o nome do dia é sempre atualizado rapidamente na coluna da esquerda, enquanto o conteúdo da coluna da direita é definido pelas configurações, especificamente os parâmetros WholePart e FractionalPart. Cada um deles permite que o usuário selecione uma das entidades a serem exibidas: Dia da Semana, Semana do Ano, Dia do Ano, Índice da Barra ou Nenhum. WholePart - selecionador para o número antes do ponto decimal; FractionalPart - selecionador para o número após o ponto decimal; Duas propriedades selecionadas (números inteiros) são combinadas em um único valor decimal para cada barra e armazenadas no buffer do indicador. Claro que, o buffer é invisível no gráfico devido ao estilo DRAW_NONE, pois seus valores são sintéticos. Por exemplo, na captura de tela abaixo, o nome do dia é Terça-feira, e o buffer que contém o Week.DoY (índice do Dia do Ano) mostra o valor 44.302, que corresponde à 44ª semana e ao 302º dia do ano, respectivamente. Os outros parâmetros permitem ao usuário especificar se deseja ShowLabels no gráfico, qual FontName, FontSize, FontColor utilizar, bem como o Padding das bordas superior/inferior, como Align-á-las (superior/meio/inferior) e um RotationAngle opcional para alinhamento central. O padrão clrNONE para FontColor significa cor reversa para o fundo atual do gráfico.

2024.10.29
Indicador AutoFibo: Níveis de Fibonacci com Base no ZigZag para MetaTrader 5
MetaTrader5
Indicador AutoFibo: Níveis de Fibonacci com Base no ZigZag para MetaTrader 5

Características do Indicador AutoFibo: Níveis de Fibonacci Automáticos: O indicador desenha automaticamente as linhas de retração de Fibonacci com base nas altas e baixas recentes do ZigZag, proporcionando uma visão clara dos possíveis pontos de reversão. Opções de Fibonacci Dinâmicas e Estáticas: Os usuários podem escolher entre níveis de retração de Fibonacci dinâmicos, que se atualizam continuamente com os últimos pontos do ZigZag, ou níveis estáticos, que permanecem fixos nas altas ou baixas significativas anteriores. Aparência Personalizável: É possível ajustar a cor, o estilo e a largura das linhas de Fibonacci tanto para os níveis dinâmicos quanto para os estáticos, permitindo uma visualização personalizada que se adapta a diferentes fundos e estilos de gráfico. Otimizado para MetaTrader 5: O indicador aproveita ao máximo o manuseio de objetos gráficos do MT5, oferecendo uma experiência de gráfico fluida e eficiente. Parâmetros do Indicador: Configurações do ZigZag ( ExtDepth , ExtDeviation , ExtBackstep ): Ajuste a sensibilidade do padrão ZigZag para capturar mais ou menos oscilações de preço. Configurações de Fibonacci Dinâmicas: Personalize a cor, o estilo da linha e a largura das linhas de retração dinâmicas de Fibonacci. Configurações de Fibonacci Estáticas: Personalize a aparência das linhas de Fibonacci estáticas com base na segunda alta/baixa mais recente do ZigZag. Como Usar: O indicador AutoFibo é ideal para estratégias de negociação que seguem tendências e de reversão. Ao sobrepor os níveis de Fibonacci ao padrão ZigZag, ele permite que os traders avaliem visualmente os níveis de retração e os potenciais pontos de entrada/saída. Este indicador pode ser utilizado em diversos períodos de tempo, tornando-se versátil tanto para operações diárias quanto para negociações de longo prazo.

2024.10.25
PTB: O Indicador Essencial para MetaTrader 5
MetaTrader5
PTB: O Indicador Essencial para MetaTrader 5

Descrição do Indicador: PTB.mq5 Visão Geral: O indicador PTB.mq5 foi desenvolvido para ser utilizado na plataforma de negociação MetaTrader 5. Ele calcula e exibe os níveis máximos e mínimos de curto e longo prazo, além dos níveis de retração de Fibonacci com base nesses extremos. Características: - Mínimos e Máximos de Curto Prazo: O indicador calcula os preços mais altos e mais baixos ao longo de um período curto definido pelo usuário, ajudando os traders a identificar níveis imediatos de suporte e resistência. - Mínimos e Máximos de Longo Prazo: Ele também calcula os preços mais altos e mais baixos em um período mais extenso, fornecendo uma visão sobre as tendências gerais do mercado. - Níveis de Fibonacci: O indicador traça os importantes níveis de retração de Fibonacci (23,6%, 38,2%, 50%, 61,8% e 78,6%) com base nos máximos e mínimos de longo prazo, amplamente utilizados pelos traders para identificar potenciais pontos de reversão no mercado. Parâmetros de Entrada: - shortLength: O número de candles a serem considerados para calcular os máximos e mínimos de curto prazo. - longLength: O número de candles a serem considerados para calcular os máximos e mínimos de longo prazo. Representação Visual: - O indicador utiliza cores e larguras distintas para as diferentes linhas traçadas: &nbsp; - Máximo Curto: Vermelho (largura: 3) &nbsp; - Mínimo Curto: Azul (largura: 3) &nbsp; - Máximo Longo: Verde (largura: 3) &nbsp; - Mínimo Longo: Laranja (largura: 3) &nbsp; - Níveis de Fibonacci: &nbsp; &nbsp; - 78,6%: Roxo (largura: 1) &nbsp; &nbsp; - 23,6%: Aqua (largura: 1) &nbsp; &nbsp; - 38,2%: Amarelo (largura: 1) &nbsp; &nbsp; - 61,8%: Marrom (largura: 1) &nbsp; &nbsp; - 50%: Branco (largura: 3) Lógica de Cálculo: - O indicador percorre os dados de preços para calcular os valores máximos e mínimos tanto para os períodos curtos quanto longos. - Em seguida, ele calcula os níveis de Fibonacci com base na diferença entre os máximos e mínimos de longo prazo.

2024.09.22
Como Copiar e Colar Objetos Gráficos no MetaTrader 5 com o ChartObjectsCopyPaste
MetaTrader5
Como Copiar e Colar Objetos Gráficos no MetaTrader 5 com o ChartObjectsCopyPaste

Você já se viu na situação de precisar copiar e colar objetos gráficos entre gráficos abertos? Aposto que sim! O curioso é que o MetaTrader não possui uma funcionalidade de "Copiar &amp; Colar" para objetos. A única maneira de conseguir algo parecido é utilizando templates (arquivos .tpl). Porém, o template armazena todo o estado do gráfico, incluindo indicadores, configurações e uma série de informações auxiliares que podem ser irrelevantes para o que você realmente precisa. Foi pensando nisso que desenvolvi o indicador ChartObjectsCopyPaste.mq5. Ele permite copiar objetos selecionados para a área de transferência do Windows, de onde podem ser colados em outro gráfico. Sem complicações! O indicador é baseado em outro indicador publicado no livro de algotrading - ObjectGroupEdit.mq5. Siga o link para descobrir mais sobre todas as classes subjacentes (ObjectMonitor, MapArray e outras) que trabalham nos bastidores. Este indicador não possui buffers e deve ser anexado a pelo menos 2 gráficos: o gráfico de origem, de onde você quer copiar os objetos, e o gráfico de destino, onde você planeja colá-los. Enquanto estiver rodando em um gráfico, o indicador rastreia os objetos gráficos existentes e anota quais estão selecionados. Como de costume, os comandos de "Copiar &amp; Colar" funcionam em par: Pressione a tecla de atalho Ctrl+Q para copiar todos os objetos selecionados para a área de transferência do Windows como texto (você pode salvar e visualizar esse texto em qualquer editor, veja um exemplo abaixo). No gráfico de destino, pressione Ctrl+J para colar todos os objetos da área de transferência. Por que Ctrl+Q/Ctrl+J? Essas são apenas duas combinações de teclas disponíveis, escolhidas entre poucas opções. Isso acontece porque o MetaTrader intercepta e não propaga muitas teclas de atalho para programas MQL. Em particular, as combinações padrão Ctrl+C/Ctrl+V/Ctrl+Ins/Shift+Ins não funcionam nesse contexto. Como o código fonte está disponível, você pode alterar as teclas de atalho para outras combinações. Como o indicador utiliza DLLs do sistema para acessar a área de transferência do Windows, você deve permitir a importação de DLLs na caixa de diálogo Propriedades, na aba Dependências. Devido ao fato de que a Codebase não permite importações de DLL, o código relacionado à área de transferência está envolto em uma diretiva de pré-processador condicional #ifdef&nbsp;DLL_LINK, então, por favor, descomente a linha #define DLL_LINK antes da compilação. Caso contrário, você verá que os stubs da função de área de transferência mostrarão alertas em resposta à pressão das teclas de atalho, mas nenhuma ação real será realizada! As entradas são: MakeAllSelectable - flag para tornar todos os objetos selecionáveis (o que normalmente é falso para objetos criados programaticamente); LogDetails - flag para registrar todas as propriedades dos objetos transferidos no log; O indicador não verifica se os objetos colados correspondem ao gráfico de destino real, como símbolo, faixa de preços, número de subjanelas, etc. - isso você deve fazer manualmente. Veja um exemplo de texto da área de transferência com 2 objetos: OBJ_VLINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H1 Linha Vertical 5578&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 enum ENUM_OBJECT_PROPERTY_INTEGER 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_COLOR&nbsp;&nbsp; 55295 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_STYLE&nbsp;&nbsp; 2 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_WIDTH&nbsp;&nbsp; 1 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_BACK&nbsp;&nbsp;&nbsp;&nbsp;0 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_SELECTED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TYPE&nbsp;&nbsp;&nbsp;&nbsp;0 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME&nbsp;&nbsp;&nbsp;&nbsp;1726739940 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_SELECTABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_CREATETIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1726847009 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIMEFRAMES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2097151 200&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_LEVELS&nbsp;&nbsp;0 207&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_ZORDER&nbsp;&nbsp;0 208&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_HIDDEN&nbsp;&nbsp;0 1032&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_RAY&nbsp;&nbsp;&nbsp;&nbsp; 1 enum ENUM_OBJECT_PROPERTY_DOUBLE 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE&nbsp;&nbsp; 1.11449 enum ENUM_OBJECT_PROPERTY_STRING 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_NAME&nbsp;&nbsp;&nbsp;&nbsp;H1 Linha Vertical 5578 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TEXT&nbsp;&nbsp;&nbsp;&nbsp; 206&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TOOLTIP OBJ_CHANNEL&nbsp;&nbsp;&nbsp;&nbsp; H1 Canal Equidistante 40885&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 enum ENUM_OBJECT_PROPERTY_INTEGER 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_COLOR&nbsp;&nbsp; 255 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_STYLE&nbsp;&nbsp; 0 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_WIDTH&nbsp;&nbsp; 1 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_BACK&nbsp;&nbsp;&nbsp;&nbsp;0 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_SELECTED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TYPE&nbsp;&nbsp;&nbsp;&nbsp;5 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME&nbsp;&nbsp;&nbsp;&nbsp;1726758000 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME.1&nbsp;&nbsp;1726797600 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME.2&nbsp;&nbsp;1726758000 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_SELECTABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_CREATETIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1726847883 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_TIMEFRAMES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2097151 200&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_LEVELS&nbsp;&nbsp;0 207&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_ZORDER&nbsp;&nbsp;0 208&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_HIDDEN&nbsp;&nbsp;0 1003&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_RAY_LEFT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 1004&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_RAY_RIGHT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 1031&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_FILL&nbsp;&nbsp;&nbsp;&nbsp;0 enum ENUM_OBJECT_PROPERTY_DOUBLE 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE&nbsp;&nbsp; -28.113879003558715 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE.1 -21.708185053380777 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE.2 -48.04270462633452 enum ENUM_OBJECT_PROPERTY_STRING 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_NAME&nbsp;&nbsp;&nbsp;&nbsp;H1 Canal Equidistante 40885 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TEXT&nbsp;&nbsp;&nbsp;&nbsp; 206&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TOOLTIP E aqui estão esses objetos colados no gráfico:

2024.09.21
Como Usar o Indicador RSI EMA Engulfing Bar V3 no MetaTrader 5
MetaTrader5
Como Usar o Indicador RSI EMA Engulfing Bar V3 no MetaTrader 5

Se você está em busca de oportunidades de compra no MetaTrader 5, o indicador RSI EMA Engulfing Bar V3 pode ser uma ferramenta valiosa. Ele combina diversos indicadores técnicos e padrões de ação do preço para ajudá-lo a identificar possíveis reversões de mercado. Vamos entender como ele funciona! Condições de Compra 1. Condição do RSI: O Índice de Força Relativa (RSI) para o período atual deve estar abaixo de um limite baixo especificado (RsiLow). Isso indica que o ativo está em condição de sobrecompra. 2. Padrão de Candlestick: O indicador verifica um padrão específico de candlestick em três candles consecutivos: O candle atual (1) fecha acima da abertura (bullish). O candle anterior (2) fecha abaixo da abertura (bearish). O fechamento do candle atual está acima da abertura do candle anterior. O fechamento do candle atual está abaixo da máxima do candle anterior. 3. Condições de Médias Móveis: O fechamento do candle atual deve estar abaixo da EMA (Média Móvel Exponencial). Uma EMA de longo prazo (Shiftpast) deve estar abaixo de uma EMA de curto prazo (Shiftnow), sugerindo uma tendência de alta. É possível alterar o período de médias móveis para identificar momentos de alta e baixa: por exemplo, se a média de 5 períodos (ID5) estiver acima da média de 6 períodos (ID6) há 5 candles atrás, considere ajustar para 3-4, 7-9 ou 10-13. 4. Sinal de Compra: Se todas as condições forem atendidas, o alerta gera um sinal de Compra com uma seta para cima na mínima do candle atual. Esse alerta é projetado para identificar potenciais configurações de reversão bullish/bearish. Ele busca condições de sobrecompra (RSI baixo) combinadas com um padrão específico de candlestick que sugere que a pressão de compra está começando a superar a pressão de venda. As condições das médias móveis ajudam a confirmar a direção da tendência.

2024.09.13
Primeiro Anterior 4 5 6 7 8 9 10 11 12 13 14 Próximo Último