Русский
preview
A análise de lacunas temporais de preço em MQL5 (Parte I): Criando um indicador básico

A análise de lacunas temporais de preço em MQL5 (Parte I): Criando um indicador básico

MetaTrader 5Sistemas de negociação |
28 1
Yevgeniy Koshtenko
Yevgeniy Koshtenko

No trading algorítmico moderno, uma das tarefas centrais é detectar a presença de grandes participantes no mercado. Investidores institucionais, hedge funds e bancos deixam “impressões digitais” características de sua atividade, que um trader experiente pode aprender a reconhecer e utilizar na negociação. Um dos fenômenos mais interessantes e pouco estudados é o das lacunas temporais , zonas que o preço atravessa tão rapidamente que essa eficiência só pode ser percebida por uma máquina.

Neste artigo, analisaremos o desenvolvimento de um indicador exclusivo para o MetaTrader 5, especializado na detecção e análise automáticas de lacunas temporais. Nossa hipótese principal é que, quando um grande volume entra no mercado, o preço percorre determinadas zonas de preço com tal rapidez que se forma uma lacuna temporal, um período em que a atividade de negociação nessa zona é praticamente inexistente.


Fundamentos teóricos das lacunas temporais

Quando um grande participante institucional decide entrar em uma posição, ele enfrenta um problema fundamental de liquidez. Para acumular o volume necessário sem impactar significativamente o preço, utiliza-se execução algorítmica com a distribuição da ordem de grande porte ao longo do tempo. Também é empregada liquidez oculta por meio de ordens iceberg e dark pools, e muitas vezes as ações de vários fundos são coordenadas para sincronizar as entradas.

O resultado dessa atividade é uma situação em que o preço atravessa muito rapidamente uma determinada zona, “esgotando” completamente toda a liquidez disponível. Depois disso, essa zona permanece praticamente “vazia” por um período prolongado, pois os algoritmos institucionais já concluíram sua tarefa e passaram a outros níveis de preço.

A análise de diferentes tipos de impacto institucional permite compreender melhor a mecânica de formação das lacunas temporais:

Tipo de impacto institucional
Características do volume
Velocidade de execução
Duração da ausência  Reação típica no reteste
Hedge funds (tamanho médio)
5–20 milhões USD
Rápida (2–5 barras)
 8–15 barras Rejeição forte (75%)
Fundos de pensão
50–200 milhões USD
Lenta (10–20 barras)
 20–40 barras Rejeição moderada (60%)
Bancos centrais
500+ milhões USD
Muito rápida (1–3 barras)
 30–60 barras Rejeição acentuada (85%)


Modelo matemático

Para a avaliação quantitativa das lacunas temporais, desenvolvemos o coeficiente de impacto volumétrico (CIV), calculado pela fórmula:

КОВ = (V × ΔP × LF × SF) / (T²)

где:
V - объем сделок в зоне
ΔP - изменение цены при прохождении
LF - фактор ликвидности
SF - сессионный фактор активности
T - время исполнения в барах

A dependência quadrática em relação ao tempo reflete um fato fundamental: quanto mais rapidamente ocorre um movimento de preço acompanhado de volume significativo, maior a probabilidade de impacto de um grande participante institucional. Esse aparato matemático permite identificar automaticamente zonas com velocidade de execução de negociações anormalmente elevada.


Arquitetura do indicador

O indicador "Volume Time Gap Analysis" é construído com base em uma arquitetura modular que inclui um módulo de varredura para a busca de zonas potenciais de impacto, um motor analítico para o cálculo das características das lacunas, um sistema de monitoramento para o acompanhamento das zonas ativas e um módulo de visualização para a exibição dos resultados no gráfico.

A base da arquitetura é a estrutura VolumeTimeGap, que encapsula todas as características necessárias de uma lacuna temporal:

struct VolumeTimeGap
{
   datetime formation_time;           // Момент образования разрыва
   double   price_low, price_high;    // Границы ценовой зоны
   double   volume_concentration;     // Концентрация объемного воздействия
   double   institutional_footprint;  // Отпечаток институционального воздействия
   double   memory_strength;          // Сила рыночной памяти
   double   liquidation_speed;        // Скорость ликвидации позиций
   int      test_count;               // Количество тестирований зоны
   double   success_rate;             // Процент успешных отбоев
   bool     is_active;                // Статус активности разрыва
};

Essa estrutura contém tanto parâmetros estáticos, definidos no momento da formação da lacuna, quanto características dinâmicas, que são atualizadas a cada interação do preço com a zona.


Algoritmo de detecção de lacunas temporais

O processo de detecção de lacunas temporais representa uma sequência complexa de operações. A primeira etapa consiste na criação de uma grade adaptativa que divide a faixa de preço atual em zonas de análise. A densidade da grade adapta-se automaticamente à volatilidade do instrumento e à profundidade da análise.

Na segunda etapa, é realizada uma perícia detalhada de cada zona, que inclui a análise minuciosa dos intervalos de tempo de presença e ausência do preço, o cálculo das características volumétricas e a determinação da velocidade de entrada e saída da zona.

A terceira etapa consiste na validação das evidências, uma verificação sistemática da suficiência das provas para a criação de uma lacuna com base em critérios estatísticos rigorosos.

void ScanForVolumeTimeGaps(int analysis_depth)
{
   double highs[], lows[], opens[], closes[], volumes[];
   datetime times[];
   
   if(!PrepareMarketData(highs, lows, opens, closes, volumes, times, analysis_depth))
       return;
       
   double price_range_max = highs[ArrayMaximum(highs)];
   double price_range_min = lows[ArrayMinimum(lows)];
   double total_range = price_range_max - price_range_min;
   
   int grid_density = CalculateOptimalGridDensity(total_range);
   double grid_step = total_range / grid_density;
   
   for(int level = 0; level < grid_density; level++)
   {
       double zone_center = price_range_min + (level * grid_step);
       double zone_width = grid_step * Price_Zone_Sensitivity;
       
       AnalyzeZoneForVolumeGaps(zone_center - zone_width/2, 
                               zone_center + zone_width/2,
                               highs, lows, opens, closes, volumes, times);
   }
}
Cada zona potencial é submetida a uma análise detalhada. Uma estrutura especial ZoneForensics acumula sistematicamente evidências sobre o comportamento do preço na zona em estudo:
struct ZoneForensics
{
   int total_appearances;            // Общее количество появлений цены в зоне
   int longest_absence;              // Самый длинный период отсутствия
   double volume_burst_intensity;    // Интенсивность объемных всплесков
   double exit_velocity;             // Скорость покидания зоны
   datetime first_contact;           // Время первого контакта с зоной
   datetime last_contact;            // Время последнего контакта
};

O processo de perícia inclui a análise de cada barra histórica com a determinação do fato de o preço ter permanecido na zona analisada, a medição da intensidade da atividade volumétrica em cada contato e o cálculo das características de velocidade de entrada e saída da zona.


Critérios de suficiência das evidências

A criação de uma lacuna temporal ocorre apenas quando são atendidos critérios rigorosos de suficiência do sinal. O sistema verifica a duração mínima de ausência do preço na zona, o tempo máximo admissível de permanência, os valores-limite de impacto volumétrico e as características de velocidade.

bool IsEvidenceSufficientForGap(const ZoneForensics &evidence)
{
   if(evidence.longest_absence < Min_Gap_Bars) return false;
   if(evidence.total_appearances > Max_Time_In_Zone) return false;
   
   double volume_impact = CalculateVolumeImpactCoefficient(evidence);
   if(volume_impact < Volume_Impact_Threshold) return false;
   
   double velocity_score = evidence.exit_velocity / GetAverageMarketVelocity();
   if(velocity_score < VELOCITY_THRESHOLD) return false;
   
   double confidence_score = (volume_impact * 0.4) + 
                            (velocity_score * 0.3) + 
                            (evidence.longest_absence / Min_Gap_Bars * 0.3);
   
   return confidence_score > CONFIDENCE_THRESHOLD;
}

A avaliação integral confidence_score combina três componentes-chave: impacto volumétrico, características de velocidade e extensão temporal da lacuna. Somente quando o valor ultrapassa o limite estabelecido é criada uma nova lacuna temporal.

A inovação central do indicador é o cálculo da “impressão institucional”, uma métrica complexa que avalia quantitativamente a probabilidade de presença de um grande participante institucional na formação da zona. O cálculo baseia-se na análise de três componentes: concentração temporal da atividade, intensidade volumétrica relativa e características de velocidade do movimento do preço.

double CalculateInstitutionalFootprint(const ZoneForensics &evidence)
{
   double speed_component = (evidence.total_appearances > 0) ? 
       evidence.longest_absence / evidence.total_appearances : 0.0;
   
   double volume_component = evidence.volume_burst_intensity / GetAverageVolume(100);
   double velocity_component = evidence.exit_velocity / GetAverageMarketVelocity();
   
   return (speed_component * 0.4 + volume_component * 0.3 + velocity_component * 0.3);
}

O componente temporal reflete o grau de concentração da atividade de negociação no tempo, quanto maior a razão entre o período de ausência e o período de presença, maior a probabilidade de impacto institucional. O componente volumétrico normaliza a intensidade de negociação em relação à atividade média do mercado, e o componente de velocidade avalia a anomalia da velocidade do movimento do preço.

Cada lacuna temporal possui uma característica dinâmica denominada “força de memória”, que reflete o grau de influência da zona sobre o comportamento atual do preço. A força de memória varia ao longo do tempo segundo uma fórmula complexa que leva em consideração tanto o processo natural de esquecimento, pelo mercado, de eventos históricos quanto os fatores cíclicos da atividade de negociação.

void UpdateGapMemoryStrength(VolumeTimeGap &gap)
{
   double time_elapsed_hours = (double)(TimeCurrent() - gap.formation_time) / 3600.0;
   double base_decay_rate = 0.05;
   
   double daily_cycle = MathCos(2.0 * M_PI * time_elapsed_hours / 24.0);
   double cycle_factor = 1.0 + 0.1 * daily_cycle;
   
   gap.memory_strength = gap.institutional_footprint * 
                        MathExp(-base_decay_rate * time_elapsed_hours) * 
                        cycle_factor;
}

O decaimento exponencial modela o processo natural de redução da influência de eventos históricos sobre os preços atuais. O componente cíclico considera as oscilações intradiárias da atividade de negociação, refletindo o fato de que a influência de zonas institucionais pode se intensificar ou enfraquecer dependendo do momento da sessão de negociação.

Um elemento importante do sistema é o monitoramento automático do momento de “fechamento” ou “preenchimento” da lacuna temporal. Isso ocorre quando o preço atravessa completamente a zona, demonstrando que o interesse institucional naquele nível foi esgotado.

bool IsGapBeingMitigated(double current_price, const VolumeTimeGap &gap)
{
   for(int i = 0; i < 5; i++)
   {
      double high = iHigh(_Symbol, PERIOD_CURRENT, i);
      double low = iLow(_Symbol, PERIOD_CURRENT, i);
      double open = iOpen(_Symbol, PERIOD_CURRENT, i);
      double close = iClose(_Symbol, PERIOD_CURRENT, i);
      
      if((high >= gap.price_high && low <= gap.price_low) ||
         (open >= gap.price_high && close <= gap.price_low) ||
         (open <= gap.price_low && close >= gap.price_high))
      {
         return true;
      }
   }
   return false;
}

Ao detectar o fechamento da lacuna, o sistema altera automaticamente a representação visual da zona, transferindo-a para o status de “fechada” e notificando o trader sobre a conclusão do ciclo de vida desse nível institucional.


Adaptação às especificidades de diferentes instrumentos

Os instrumentos do mercado Forex caracterizam-se por alta liquidez e volatilidade relativamente baixa, o que exige a redução do Volume_Impact_Threshold para a faixa de 1.5-2.0 e a diminuição do Min_Gap_Bars para 5-10 barras. O caráter contínuo da negociação no Forex torna as lacunas temporais menos pronunciadas, porém mais estáveis ao longo do tempo.

O mercado acionário, com sua estrutura por sessões e períodos de fechamento, cria condições naturais para a formação de lacunas temporais. As configurações recomendadas incluem Volume_Impact_Threshold na faixa de 2.0-3.0 e Min_Gap_Bars de 8 a 15 barras. Deve-se dar atenção especial às lacunas formadas durante períodos de eventos corporativos e divulgação de resultados.

Os mercados de criptomoedas distinguem-se por volatilidade extrema e pela presença de grandes participantes institucionais, o que exige o aumento do Volume_Impact_Threshold para 2.5-4.0 com a redução simultânea do Min_Gap_Bars para 3-8 barras, em razão da alta velocidade dos movimentos de preço.


Sinais do indicador

As lacunas temporais oferecem oportunidades únicas para a geração de sinais de negociação de alta qualidade. O sinal mais eficaz é o de rejeição na fronteira da lacuna, quando o preço se aproxima da zona e demonstra sinais de reversão. A probabilidade de uma rejeição bem-sucedida correlaciona-se diretamente com a força de memória da lacuna e com a estatística de seus testes anteriores.

O sinal de fechamento da lacuna surge quando o preço atravessa completamente a zona e pode ser utilizado para negociar a continuação do movimento na direção do fechamento. Particularmente interessantes são os sinais de falso rompimento, quando uma tentativa malsucedida de fechar a lacuna resulta em um forte movimento na direção oposta.

No meu caso, as rejeições são as que apresentam melhor desempenho:

Este indicador vem sendo testado com sucesso em conta:


Conclusão e perspectivas

O indicador identifica zonas de atividade institucional por meio de um modelo matemático, da avaliação da memória de mercado e de um sistema de notificações. Ele reforça os sinais de outros métodos e auxilia na gestão de risco com maior precisão.

O indicador demonstra eficácia particular como parte de sistemas de negociação complexos, complementando e fortalecendo os sinais de outros métodos de análise técnica. A possibilidade de avaliação quantitativa da qualidade de cada sinal de negociação permite aplicar abordagens diferenciadas de gestão de risco e posicionamento.

Os planos de desenvolvimento incluem:

  • aprendizado de máquina para adaptação a instrumentos específicos;
  • novas métricas baseadas na microestrutura de mercado;
  • versões para diferentes classes de ativos;
  • análise multitemporal para a construção de estratégias multinível.

A implementação da análise multitemporal permitirá identificar estruturas hierárquicas de lacunas temporais, quando grandes zonas institucionais em timeframes superiores contêm múltiplas lacunas menores em períodos inferiores. Isso abrirá novas possibilidades para a construção de estratégias de negociação multinível com diferentes horizontes de planejamento.


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

Arquivos anexados |
Últimos Comentários | Ir para discussão (1)
Валерий Смирнов
Валерий Смирнов | 28 jun. 2025 em 08:14

Bom dia! Há avisos durante a compilação, anexei uma captura de tela.

Redes neurais em trading: Segmentação periódica adaptativa (LightGTS) Redes neurais em trading: Segmentação periódica adaptativa (LightGTS)
Propomos conhecer uma técnica inovadora de patching adaptativo, um método de segmentar séries temporais de forma flexível considerando sua periodicidade interna. Além disso, apresentamos uma técnica de codificação eficiente que permite preservar características semânticas importantes ao trabalhar com dados de diferentes escalas. Esses métodos abrem novas possibilidades para o processamento preciso de dados complexos multiescalares, característicos dos mercados financeiros, e aumentam significativamente a estabilidade e a fundamentação das previsões.
Estratégia da Águia — Eagle Strategy (ES) Estratégia da Águia — Eagle Strategy (ES)
Eagle Strategy é um algoritmo que imita a estratégia de caça em duas fases da águia: busca global por meio de voos de Lévy pelo método de Mantegna, alternada com intensificação local intensa do algoritmo de vaga-lumes, uma abordagem matematicamente fundamentada para o equilíbrio entre diversificação e intensificação, bem como um conceito bioinspirado que combina dois fenômenos naturais em um único método computacional.
Está chegando o novo MetaTrader 5 e MQL5 Está chegando o novo MetaTrader 5 e MQL5
Esta é apenas uma breve resenha do MetaTrader 5. Eu não posso descrever todos os novos recursos do sistema por um período tão curto de tempo - os testes começaram em 09.09.2009. Esta é uma data simbólica, e tenho certeza que será um número de sorte. Alguns dias passaram-se desde que eu obtive a versão beta do terminal MetaTrader 5 e MQL5. Eu ainda não consegui testar todos os seus recursos, mas já estou impressionado.
Técnicas do MQL5 Wizard que você deve conhecer (Parte 55): SAC com Prioritized Experience Replay Técnicas do MQL5 Wizard que você deve conhecer (Parte 55): SAC com Prioritized Experience Replay
Buffers de replay em Aprendizado por Reforço são particularmente importantes com algoritmos off-policy como DQN ou SAC. Isso coloca em destaque o processo de amostragem desse buffer de memória. Enquanto as opções padrão com SAC, por exemplo, utilizam seleção aleatória desse buffer, o Prioritized Experience Replay ajusta esse processo ao realizar amostragem com base em um score TD. Revisamos a importância do Aprendizado por Reforço e, como sempre, examinamos apenas essa hipótese (não a validação cruzada) em um Expert Advisor montado com o wizard.