Análise de lacunas tempo<rais de preço em MQL5 (Parte II): Criamos um mapa de calor da distribuição de liquidez no tempo
Na primeira parte do artigo, destrinchamos o conceito de lacunas temporais e sua relação com a atividade institucional. No entanto, detectar essas lacunas é apenas metade da tarefa. Para negociar de forma eficaz, o trader precisa ver o quadro completo: onde o preço passa muito tempo, onde passa pouco, e como essas zonas interagem entre si.
É exatamente aqui que entra o nosso indicador, uma ferramenta que transforma padrões temporais invisíveis em um mapa de calor visual e intuitivo. Se na primeira parte procurávamos anomalias (lacunas), agora construímos um mapa completo do comportamento normal do preço.
A ideia principal é simples: representar todo o intervalo de preços como um conjunto de microzonas e, para cada zona, calcular quanto tempo o preço permaneceu nela. Quanto maior o tempo, mais "quente" é a zona e mais importante ela se torna para o mercado. O resultado é visualizado por meio de um esquema de cores que vai do vermelho frio ao azul quente.
Base matemática: do caos à ordem
Qualquer mercado pode ser representado como uma luta contínua entre oferta e demanda. Nos locais onde essa disputa é mais intensa, o preço permanece por mais tempo. Matematicamente, isso é expresso por meio da função de densidade temporal:
T(p) = Σt_i, где цена находится в диапазоне [p-δ, p+δ]
Aqui p é o nível de preço analisado, δ é o tamanho da zona de análise, e t_i é a duração de cada período em que o preço permaneceu nessa zona.
Mas os dados brutos dizem pouco por si só. É necessária uma normalização que transforme valores absolutos de tempo em porcentagens relativas. Usamos a fórmula:
P(p) = ((T(p) - T_min) / (T_max - T_min)) × 99% + 1%
Essa fórmula garante que as zonas mais "frias" recebam 1% de presença (cor vermelha), enquanto as zonas mais "quentes" recebam 100% (cor azul). Todas as demais zonas são distribuídas entre esses extremos de forma proporcional à sua importância.
Arquitetura da solução: modularidade como base da confiabilidade
A criação desse indicador exige uma arquitetura bem planejada. Na base está a estrutura PriceLevel, que encapsula todas as informações sobre cada nível de preço:
struct PriceLevel { double price; // Центральная цена уровня double price_high; // Верхняя граница зоны double price_low; // Нижняя граница зоны long time_spent; // Накопленное время в барах double presence_percent; // Процент присутствия color level_color; // Динамический цвет string object_name; // Уникальный идентификатор };
Cada nível vive sua própria dinâmica: acumula tempo, recalcula porcentagens e altera sua cor. Não se trata apenas de uma estrutura de dados, mas de uma entidade viva do mercado.
A principal inovação foi o uso de uma janela deslizante de análise. Em vez de processar todo o histórico disponível (o que poderia levar segundos), analisamos apenas as últimas MaxHistory barras por meio de uma janela de tamanho AnalysisPeriod. Isso garante resultados atualizados com desempenho aceitável.
Algoritmo: a matemática encontra a realidade
O processo começa com a determinação do intervalo de preços para análise. O algoritmo encontra automaticamente o máximo e o mínimo dentro do período estudado, o que permite adaptar-se à volatilidade de qualquer instrumento.
Em seguida, esse intervalo é dividido em zonas iguais. O número de zonas é calculado dinamicamente: se o tamanho do tick estiver especificado, ele é utilizado; caso contrário, utiliza-se o Point mínimo do instrumento. Ao mesmo tempo, o sistema equilibra entre detalhamento, com pelo menos 50 níveis, e desempenho, com no máximo 1000 níveis.
A parte que mais consome recursos é o cálculo do tempo em cada nível. Uma abordagem ingênua exigiria verificar cada barra contra cada nível, o que resulta em complexidade O(n²). Otimizamos isso para O(n×k), onde k é o número médio de níveis afetados por uma única barra.
// Оптимизация: находим только релевантные уровни для каждого бара int startLevel = MathMax(0, (int)((lowPrice - minPrice) / realTickSize)); int endLevel = MathMin(totalPriceLevels - 1, (int)((highPrice - minPrice) / realTickSize) + 1); for(int levelIdx = startLevel; levelIdx <= endLevel; levelIdx++) { if(DoesBarTouchLevel(highPrice, lowPrice, levels[levelIdx])) { levels[levelIdx].time_spent++; } }
A função DoesBarTouchLevel verifica a interseção do intervalo High-Low da barra com os limites do nível de preço. A lógica é simples: se o máximo da barra estiver acima do limite inferior do nível e o mínimo da barra estiver abaixo do limite superior, então existe interseção.
Alquimia das cores: transformando números em imagens
Após o cálculo do tempo, começa a parte mais criativa, que é a transformação dos dados brutos em um esquema de cores. Utilizamos um sistema de cinco etapas: vermelho (1%), laranja (25%), amarelo (50%), azul-claro (75%), azul (100%).
Entre os pontos principais ocorre uma interpolação suave. Por exemplo, um nível com 37% de presença receberá uma cor entre laranja e amarelo. A interpolação funciona no espaço RGB:
color InterpolateColor(color color1, color color2, double factor) { // Разложение на RGB компоненты int r1 = (color1 >> 16) & 0xFF; int g1 = (color1 >> 8) & 0xFF; int b1 = color1 & 0xFF; // Линейная интерполяция каждого канала int r = (int)(r1 + (r2 - r1) * factor); int g = (int)(g1 + (g2 - g1) * factor); int b = (int)(b1 + (b2 - b1) * factor); return (r << 16) | (g << 8) | b; }
O resultado são transições de cores suaves que criam um mapa de calor natural do mercado.
Visualização: do algoritmo ao gráfico
Cada nível de preço é exibido como um retângulo no gráfico. A criação de milhares de objetos gráficos é uma tarefa tecnicamente complexa que exige otimização.
Os retângulos são posicionados desde o início do período de análise até o momento atual, cobrindo toda a área estudada. Cada objeto é configurado para funcionar em modo de fundo: ele não interfere na análise do gráfico, não é selecionado ao clicar e é redesenhado automaticamente quando a escala muda.
O sistema de gerenciamento de objetos inclui um mecanismo de limpeza dos resultados anteriores antes da renderização dos novos. Isso evita o acúmulo de "lixo" no gráfico e garante a atualização correta da visualização.
Em modo de tempo real, o desempenho é crítico. O indicador utiliza vários níveis de otimização:
- o primeiro nível são cálculos preguiçosos. O recálculo ocorre apenas quando surge uma nova barra. O sistema monitora o momento da última atualização e executa os cálculos somente quando ocorre alteração.
- o segundo nível é a otimização de memória. Os arrays de dados são alocados uma única vez e reutilizados. As estruturas de dados são projetadas para consumo mínimo de memória: são utilizados long em vez de double para contadores, e evitam-se variáveis de string desnecessárias.
- o terceiro nível é a otimização algorítmica. A janela deslizante de análise limita o volume de dados processados. A grade adaptativa de níveis evita a criação de um número excessivo de zonas.
Interpretação dos resultados: o que dizem as cores
As zonas vermelhas (1–25% de presença) indicam áreas pelas quais o preço passa rapidamente. Essas são potenciais zonas de lacunas temporais discutidas na primeira parte do artigo. Nas zonas vermelhas frequentemente se formam rejeições e rompimentos falsos, portanto exigem uma abordagem cautelosa.
As zonas laranja e amarelas (25-75% de presença) representam áreas de atividade moderada. Aqui o preço permanece periodicamente, mas sem dominância clara. Essas são zonas de transição que podem tornar-se suporte ou resistência, dependendo do contexto do mercado. É exatamente nelas que se negocia melhor a favor da tendência.
As zonas azul-claro e azul (75-100%) são as protagonistas da nossa análise. Aqui o preço passa o maior tempo, o que indica alta atividade de negociação. Esses níveis possuem uma forte força magnética: o preço retorna regularmente a eles, utilizando-os como apoio para o movimento ou como barreira a ser superada.
A estratégia mais eficaz é negociar rejeições a partir das zonas azuis. Quando o preço se aproxima de uma área de presença máxima, a probabilidade de reversão torna-se significativamente maior que a média. Isso funciona especialmente bem em mercados laterais, nos quais as zonas azuis definem claramente os limites do canal.
Rompimentos através de zonas amarelas frequentemente sinalizam continuação do movimento. Se o preço atravessa facilmente uma área de presença média com bom volume, isso indica ausência de resistência significativa adiante.
Já as estratégias de rejeição funcionam melhor através das zonas vermelhas.
A combinação com análise de volume fortalece os sinais várias vezes. Quando uma zona azul no tempo coincide com alto volume no perfil de volume, forma-se uma área de importância máxima.
Configuração para diferentes mercados: universalidade por meio da adaptação
O Forex, com sua alta liquidez, exige maiores valores de AnalysisPeriod (300-500 barras) e MaxHistory (5000-8000 barras). Os movimentos aqui são mais suaves, portanto é necessária maior profundidade de análise para identificar zonas relevantes.
O mercado de ações funciona bem com configurações moderadas: AnalysisPeriod de 200-300 barras, MaxHistory de 3000-5000 barras. A estrutura de sessões cria pausas naturais que aparecem claramente no mapa de calor.
O tamanho do tick (TickSize) é criticamente importante para o funcionamento correto. Se for definido um valor muito pequeno, surgirá detalhamento excessivo sem utilidade prática. Um valor muito grande levará à perda de nuances importantes. O valor 0, modo automático, normalmente é ideal, pois o sistema seleciona o tamanho com base nas características do instrumento.
A transparência (Transparency) afeta não apenas a percepção visual, mas também o desempenho. Valores altos (70-90%) criam um mapa semitransparente que não interfere na análise das velas, mas exige mais recursos para renderização.
O limite de 1000 níveis não foi introduzido por acaso. O MetaTrader 5 possui restrições quanto ao número de objetos gráficos, e exceder limites razoáveis leva à desaceleração da interface sem melhoria significativa na qualidade da análise.
Integração com outras ferramentas: sinergia de métodos
O indicador de mapa de calor complementa perfeitamente o perfil de volume. A coincidência de zonas azuis de tempo com picos de volume cria áreas de importância excepcional. Essas zonas frequentemente se tornam pontos-chave para movimentos de preço de longo prazo.
A combinação com níveis de Fibonacci produz resultados interessantes. Quando níveis importantes de Fibonacci coincidem com zonas azuis do mapa de calor, sua relevância aumenta significativamente. Isso é natural: níveis matemáticos são reforçados pelo comportamento real do preço.
Indicadores de volatilidade, por exemplo as Bandas de Bollinger, funcionam bem em conjunto com o mapa de calor. A expansão das bandas em zonas vermelhas frequentemente antecede movimentos fortes, enquanto o estreitamento nas zonas azuis indica acumulação de energia para um impulso futuro.
Na próxima versão do indicador está planejada a inclusão de aprendizado de máquina para otimização automática dos parâmetros para um instrumento específico. O algoritmo analisará as estatísticas de reação dos níveis e ajustará as configurações para máxima eficiência.
A integração com sistemas de alertas permitirá receber notificações quando o preço se aproximar de zonas-chave. Isso é especialmente útil para swing traders que não podem monitorar os gráficos constantemente.
A exportação de dados para sistemas externos abrirá possibilidades para a criação de robôs de negociação baseados no mapa de calor. Os robôs poderão utilizar a força dos níveis como filtro adicional para entrada em posição.
Filosofia do método: o tempo como moeda do mercado
Na base do indicador está uma ideia profunda: o tempo é a moeda do mercado. Os participantes do mercado gastam tempo de forma tão consciente quanto gastam dinheiro. Quanto mais tempo é gasto em um determinado nível, mais emoções, decisões e capital estão associados a ele.

Essa ligação emocional cria memória de mercado. Mesmo quando o preço se afasta de um nível significativo, a memória sobre ele permanece no subconsciente dos participantes. Quando o preço retorna a esse nível, antigas lembranças despertam: para alguns, lembranças de lucro; para outros, lembranças de perdas. Essas lembranças influenciam novas decisões de negociação.
O mapa de calor do tempo torna essa memória invisível visível. Ele transforma a psicologia do mercado em matemática, emoções em algoritmos e intuição em dados.
Considerações finais: um novo olhar sobre verdades antigas
O indicador não revela novos princípios, ele torna os antigos mais claros. Os níveis de suporte e resistência sempre existiram, mas agora podem ser medidos e classificados por importância. O mapa de calor mostra onde o mercado passa tempo e, portanto, onde está escondida a verdadeira força.Em combinação com o indicador de lacunas temporais, isso oferece uma visão completa do comportamento dos grandes participantes: onde eles agem rapidamente e onde permanecem por mais tempo. Juntos, os instrumentos permitem compreender melhor a estrutura do mercado e tomar decisões baseadas em lógica, e não apenas em intuição.
Na próxima parte veremos como unir tudo isso em um único sistema de negociação.
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/18661
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.
Caminhe em novos trilhos: Personalize indicadores no MQL5
Indicador de sazonalidade por horas, dias da semana e meses
Está chegando o novo MetaTrader 5 e MQL5
Operando com o Calendário Econômico do MQL5 (Parte 6): Automatizando a Entrada de Trades com Análise de Eventos de Notícias e Temporizadores de Contagem Regressiva
- 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
Isso me faz lembrar: eu costumava fazer isso há muito tempo,
Na minha opinião, você tem apenas um pouco incompleto - resta revelar a estrutura regular (ou mostrar que ela não existe).
Esse não é um mapa de calor, é claro - apenas o extremo da parte regular de um mapa de temperatura semelhante.
A propósito, o mapa é calculado usando o método mais trabalhoso e propenso a erros.
Tudo é mais simples - para cada vela, 2 pares {price,weight} : { price=high, weight=-1; } { price=low,weight=+1;} A coleção é classificada por preço, a soma com a acumulação por peso é o mapa de calor. Em seguida, ele é quantificado como você desejar.