Análisis de las brechas temporales de precios en MQL5 (Parte I): Creando un indicador básico
En el trading algorítmico moderno, una de las tareas clave consiste en detectar la presencia de los grandes participantes del mercado. Los inversores institucionales, los fondos de cobertura y los bancos dejan huellas distintivas de sus actividades que los tráders experimentados pueden aprender a reconocer y utilizar en sus operaciones. Uno de los fenómenos más interesantes y menos estudiados es el de las brechas temporales: las zonas que el mercado atraviesa con tal rapidez que solo un sistema automatizado puede detectar ese patrón de eficiencia.
En este artículo, analizaremos el desarrollo de un indicador único para MetaTrader 5 que se especializa en la detección y el análisis automáticos de brechas temporales. Nuestra hipótesis principal es que, cuando entra un gran volumen de operaciones en el mercado, el precio se mueve a través de ciertas zonas de precios tan rápidamente que se crea una brecha temporal: un periodo en el que prácticamente no hay actividad de negociación en esa zona.
Fundamentos teóricos de las brechas temporales
Cuando un gran operador institucional toma la decisión de entrar en una posición, se enfrenta a un problema fundamental de liquidez. Para ejecutar el volumen requerido sin afectar significativamente el precio, se usa la ejecución algorítmica, con grandes órdenes distribuidas a lo largo del tiempo. También se utiliza la liquidez oculta a través de órdenes iceberg y dark pools, y a menudo se coordinan las acciones de varios fondos para sincronizar las entradas.
El resultado de dicha actividad es una situación en la que el precio atraviesa muy rápidamente una zona determinada, "vaciando" por completo toda la liquidez disponible. Después de eso, dicha zona permanece prácticamente "vacía" durante un tiempo prolongado, ya que los algoritmos institucionales ya han cumplido su tarea y han pasado a otros niveles de precios.
Un análisis de los distintos tipos de influencia institucional nos permite comprender mejor la mecánica de la formación de las brechas temporales:
| Tipo de impacto institucional | Carácter del volumen | Velocidad de ejecución | Duración de la ausencia | Reacción típica durante el retesteo |
|---|---|---|---|---|
| Fondos de cobertura (de tamaño mediano) | 5-20 millones de USD | Rápida (2-5 barras) | 8-15 barras | Rebote fuerte (75%) |
| Fondos de pensiones | 50-200 millones de USD | Lenta (10-20 barras) | 20-40 barras | Rebote moderado (60%) |
| Bancos centrales | Más de 500 millones de USD | Muy rápida (1-3 barras) | 30-60 barras | Rebote contundente (85%) |
Modelo matemático
Para cuantificar las brechas temporales, hemos desarrollado un coeficiente de impacto volumétrico (CIV) que se calcula utilizando la fórmula:
КОВ = (V × ΔP × LF × SF) / (T²) где: V - объем сделок в зоне ΔP - изменение цены при прохождении LF - фактор ликвидности SF - сессионный фактор активности T - время исполнения в барах
La relación cuadrática con respecto al tiempo refleja un hecho fundamental: cuanto más rápido ocurre el movimiento del precio con un volumen significativo, más probable es el impacto de un gran operador institucional. Este aparato matemático permite la identificación automática de zonas con velocidades de ejecución de transacciones anormalmente altas.
Arquitectura del indicador
El indicador "Volume Time Gap Analysis" se basa en una arquitectura modular que incluye un módulo de escaneo para identificar posibles zonas de impacto, un motor analítico para calcular las características de las brechas, un sistema de monitoreo para rastrear las zonas activas y un módulo de visualización para mostrar los resultados en un gráfico.
La arquitectura se basa en la estructura VolumeTimeGap, que encapsula todas las características necesarias de la brecha 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; // Статус активности разрыва };
Esta estructura contiene tanto parámetros estáticos, determinados en el momento en que se forma la brecha, como características dinámicas, que se actualizan cada vez que el precio interactúa con la zona.
Algoritmo de detección de brechas temporales
El proceso de detección de brechas temporales es una secuencia compleja de operaciones. El primer paso consiste en crear una cuadrícula adaptativa que divida el rango de precios actual en zonas de análisis. La densidad de la cuadrícula se adapta de forma automática a la volatilidad del instrumento y a la profundidad del análisis.
La segunda fase consiste en un análisis forense de cada zona, que incluye un análisis detallado de las brechas temporales de presencia y ausencia del precio, el cálculo de las características volumétricas y la determinación de la velocidad de entrada y salida de la zona.
La tercera etapa consiste en la validación de la evidencia: una comprobación sistemática de si la evidencia es suficiente para confirmar la formación de una brecha temporal basada en criterios estadísticos rigurosos.
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 se somete a un análisis detallado. ZoneForensics, una estructura especializada, acumula sistemáticamente evidencia sobre la naturaleza del comportamiento de los precios en la zona analizada:
struct ZoneForensics { int total_appearances; // Общее количество появлений цены в зоне int longest_absence; // Самый длинный период отсутствия double volume_burst_intensity; // Интенсивность объемных всплесков double exit_velocity; // Скорость покидания зоны datetime first_contact; // Время первого контакта с зоной datetime last_contact; // Время последнего контакта };
El proceso de examen incluye el análisis de cada barra histórica determinando el hecho de si el precio se encuentra en la zona investigada, la medición de la intensidad de la actividad del volumen en cada contacto y el cálculo de las características de la velocidad de entrada y salida de la zona.
Criterios para la suficiencia de la evidencia
La creación de una brecha temporal solo se produce cuando se cumplen criterios estrictos de suficiencia de la señal. El sistema comprueba la duración mínima de ausencia de un precio en la zona, el tiempo máximo de estancia permitido, los valores umbral del impacto volumétrico y las características de velocidad.
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; }
La evaluación integral del índice de confianza combina tres componentes clave: impacto volumétrico, características de velocidad y duración del brecha. Solo cuando se supera el valor umbral se crea una nueva brecha temporal.
La principal innovación de este indicador reside en el cálculo de la "huella institucional", una métrica compleja que evalúa cuantitativamente la probabilidad de presencia de un actor institucional importante en la formación de una zona. El cálculo se basa en el análisis de tres componentes: la concentración temporal de la actividad, la intensidad relativa del volumen y las características de velocidad del movimiento de los precios.
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); }
El componente temporal refleja el grado de concentración de la actividad de negociación a lo largo del tiempo: cuanto mayor sea la proporción entre el periodo de ausencia y el periodo de presencia, mayor será la probabilidad de influencia institucional. El componente de volumen normaliza la intensidad de las operaciones en relación con la actividad media del mercado, mientras que el componente de velocidad mide la anomalía de la velocidad de los movimientos de precios.
Cada brecha temporal tiene una característica dinámica de "intensidad de memoria" que refleja el grado de influencia de la zona en el comportamiento actual del precio. La fuerza de la memoria evoluciona con el tiempo según una fórmula compleja que considera tanto el proceso natural de olvido del mercado de los acontecimientos históricos como los factores cíclicos de la actividad comercial.
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; }
El decaimiento exponencial modela el proceso natural de la disminución de la influencia de los eventos históricos en los precios actuales. El componente cíclico considera las fluctuaciones diarias de la actividad comercial, lo que refleja el hecho de que la influencia de las zonas institucionales puede fortalecerse o debilitarse dependiendo de la hora de la sesión comercial.
Un elemento importante del sistema es el seguimiento automático del momento en que se “cierra” o “rellena” la brecha temporal. Esto ocurre cuando el precio atraviesa completamente la zona, lo cual demuestra que el interés institucional en este nivel se ha agotado.
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; }
Cuando se detecta el cierre de una brecha, el sistema cambia automáticamente la visualización de la zona, pasando al estado de "cerrada" y notificando al tráder sobre el final del ciclo de vida de este nivel institucional.
Adaptación a las particularidades de los diferentes instrumentos.
Los instrumentos Forex se caracterizan por una alta liquidez y una volatilidad relativamente baja, lo cual requiere reducir Volume_Impact_Threshold al rango de 1,5-2,0 y reducir Min_Gap_Bars a 5-10 barras. La naturaleza continua del comercio de divisas hace que las brechas temporales sean menos pronunciadas, pero más estables a lo largo del tiempo.
El mercado de valores, con su estructura de sesiones y periodos de cierre, crea las condiciones naturales para la formación de brechas temporales. Los ajustes recomendados incluyen un Volume_Impact_Threshold en el rango de 2,0 a 3,0 y un Min_Gap_Bars de 8 a 15 barras. Debemos prestar especial atención a las brechas que se producen durante los periodos de eventos corporativos y elaboración de informes.
Los mercados de criptomonedas se caracterizan por una volatilidad extrema y la presencia de grandes actores institucionales, lo cual requiere aumentar el Volume_Impact_Threshold a 2,5-4,0 y, simultáneamente, reducir el Min_Gap_Bars a 3-8 barras debido a la alta velocidad de los movimientos de precios.
Señales del indicador
Las brechas temporales ofrecen oportunidades únicas para generar señales de trading de alta calidad. La señal más efectiva es un rebote desde el límite de la brecha cuando el precio se acerca a la zona y muestra signos de reversión. La probabilidad de un rebote exitoso está directamente correlacionada con la fuerza de la memoria de la brecha y sus estadísticas de pruebas anteriores.
La señal de cierre de la brecha surge cuando el precio atraviesa completamente la zona y puede utilizarse para negociar si continúa el movimiento en la dirección del cierre. Resultan de particular interés las señales de ruptura falsas, que se producen cuando un intento fallido de cerrar una brecha da lugar a un fuerte movimiento en la dirección opuesta.
En mi caso, lo que mejor funciona son los rebotes:

Este indicador ha sido probado con bastante éxito en la cuenta:

Conclusión y perspectivas
El indicador identifica zonas de actividad institucional usando un modelo matemático, la evaluación de la memoria del mercado y un sistema de notificación. Mejora las señales de otros métodos y ayuda a gestionar los riesgos con mayor precisión.
Este indicador muestra una eficacia particular como parte de sistemas de negociación complejos, complementando y mejorando las señales de otros métodos de análisis técnico. La capacidad de cuantificar la calidad de cada señal de negociación permite adoptar enfoques diferenciados para la gestión de riesgos y el posicionamiento.
Los planes de desarrollo incluyen:
- aprendizaje automático para la adaptación a instrumentos específicos;
- nuevas métricas basadas en la microestructura del mercado;
- versiones para diferentes clases de activos;
- análisis en múltiples marcos temporales para la elaboración de estrategias multinivel.
La implementación del análisis de múltiples marcos temporales nos permitirá identificar estructuras jerárquicas de brechas temporales, donde grandes zonas institucionales en marcos temporales superiores contienen muchas brechas más pequeñas en periodos inferiores. Esto descubrirá nuevas oportunidades para desarrollar estrategias de negociación multinivel con diferentes horizontes de planificación.
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/18592
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Este artículo ha sido escrito por un usuario del sitio web y refleja su punto de vista personal. MetaQuotes Ltd. no se responsabiliza de la exactitud de la información ofrecida, ni de las posibles consecuencias del uso de las soluciones, estrategias o recomendaciones descritas.
Desarrollo de un kit de herramientas para el análisis de la acción del precio (Parte 26): Herramienta de patrones pin bar y envolventes con divergencia del RSI (patrones múltiples)
Algoritmo de ecolocalización de delfines — Dolphin Echolocation Algorithm (DEA)
Particularidades del trabajo con números del tipo double en MQL4
Automatización de estrategias de trading en MQL5 (Parte 18): Estrategia de scalping «Trend Bounce» con envolventes: infraestructura básica y generación de señales (Parte I)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Buenos días! Hay advertencias durante la compilación, he adjuntado una captura de pantalla.