Introducción a MQL5 (Parte 20): Introducción a los patrones armónicos
Introducción
¡Bienvenidos de nuevo a la parte 20 de la serie «Introducción a MQL5»! En esta parte, analizaremos otro patrón gráfico avanzado: el patrón armónico. Estos patrones se basan en ratios de Fibonacci precisos para identificar posibles zonas de reversión y son ampliamente reconocidos en el análisis técnico.
Si has estado intentando comprender este concepto en profundidad, este artículo es para ti. En este artículo te presentaremos el concepto, abordando la estructura de los patrones armónicos junto con las herramientas esenciales de extensión y retroceso de Fibonacci que se utilizan para definirlos.
Analizaremos los elementos esenciales de algunas de las estructuras armónicas más conocidas, como los patrones Gartley, Bat, Butterfly y Crab, así como las medidas precisas de Fibonacci que las definen. Dado que incluso una mínima desviación puede invalidar la configuración, es importante comprender estas proporciones. El próximo artículo se centrará en cómo aplicar estos conocimientos de forma programática en MQL5, lo que permitirá identificar automáticamente tanto los patrones armónicos bajistas como los alcistas.
En este artículo, aprenderás:
- Los fundamentos de los patrones armónicos y cómo se aplican en el trading.
- Los conceptos matemáticos que subyacen a los retrocesos de Fibonacci y por qué son importantes para la identificación de patrones.
- Cómo funcionan las extensiones de Fibonacci y su papel a la hora de determinar posibles objetivos de precio.
- La implementación de la detección de patrones armónicos en MQL5, incluyendo el uso de los ratios de Fibonacci mediante programación.
- La estructura de los distintos patrones armónicos y cómo identificarlos en un gráfico
Extensiones y retrocesos de Fibonacci
Es necesario que comprendas las extensiones y los retrocesos de Fibonacci antes de que podamos abordar el concepto de los patrones armónicos. Probablemente ya conozcas los objetos «Retroceso de Fibonacci» y «Extensión de Fibonacci» de la caja de herramientas de MetaTrader 5, pero ¿te has preguntado alguna vez cuáles son las fórmulas matemáticas que se utilizan para determinar esos niveles?
Si es así, estupendo; esta sección te ayudará a saber más. Si no es así, no te preocupes; te lo explicaré paso a paso. Al final de este análisis, sabrás exactamente cómo se calculan estos niveles de Fibonacci y por qué son fundamentales para identificar patrones armónicos.
Retroceso de FibonacciTanto el retroceso como la extensión de Fibonacci se basan en porcentajes. Piensa en ello como si se tratara de medir cuánto ha «retrocedido» o «superado» el mercado en un movimiento. Veamos un ejemplo sencillo. Imagina que el mercado traza un swing claro: primero un swing low y luego un swing high.

Para calcular los niveles de retroceso de Fibonacci, tomamos la diferencia entre estos dos puntos (la amplitud del movimiento).
Ejemplo:
double price_differecence; double swing_high; double swing_low; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_high = 1.16985; swing_low = 1.15656; price_differecence = swing_high - swing_low; }
Resta siempre swing_low de swing_high para obtener una diferencia de precio positiva. Si se invierte el orden, se obtiene un valor negativo.
¿Qué pasaría si el mercado cambiara de tendencia a mitad de camino de ese máximo? Eso es lo que se conoce como un retroceso del 50 %. Esto indica que se ha revertido la mitad de la subida del precio.
Ejemplo:
double price_diff_50_percent; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_high = 1.16985; swing_low = 1.15656; price_differecence = swing_high - swing_low; price_diff_50_percent = (50.0/100.0) * price_differecence; // (Fibonacci Retracement level / 100) * Price Difference }
En esta línea se calcula el 50 % de la diferencia total de precio, y el cálculo se realiza como una división en coma flotante, ya que se utilizan los valores 50,0 y 100,0 en lugar de simples números enteros. Esto es importante porque la división en coma flotante da como resultado un valor decimal exacto. Algunos lenguajes de programación interpretarían 50/100 como una división entre números enteros si lo hubiéramos expresado en números enteros.

Piensa en ello como subir diez peldaños de una escalera. Si das cinco pasos hacia atrás, habrás recorrido la mitad del camino que has subido. Puedes fijarte en determinados niveles porcentuales del retroceso de Fibonacci. El precio podría detenerse o revertirse en estos niveles, que a menudo actúan como zonas de soporte o resistencia ocultas. Según las proporciones de Fibonacci, cuando se dice que «el mercado ha retrocedido hasta el nivel del 61,8 %», el precio simplemente ha retrocedido casi dos tercios del trayecto entre el máximo y el mínimo del swing.
Extensión de FibonacciLa extensión de Fibonacci se centra en estimar hasta dónde podría llegar el siguiente movimiento más allá del swing inicial, mientras que el retroceso de Fibonacci se utiliza principalmente para evaluar cuánto ha retrocedido el mercado con respecto a un movimiento anterior. Aunque ambos se expresan en porcentajes, los niveles de extensión superan la oscilación original en un 100 %.
Si quieres analizar el mercado, puedes utilizar las extensiones de Fibonacci de dos maneras diferentes.
Primer escenario (uso estándar con retroceso):
En su aplicación habitual, la herramienta de extensión de Fibonacci requiere que el mercado retroceda antes de trazar los niveles de extensión. Aquí utilizarás tres anclajes:
- El primer punto de anclaje se coloca en el punto X.
- El segundo anclaje se coloca en el punto A.
- El tercer punto de referencia se sitúa en el punto B, donde B es un retroceso del movimiento XA.

Comenzamos con una oscilación de precios, a la que denominamos XA, en el primer escenario de las extensiones de Fibonacci. En este caso, X y A representan el punto de partida y el punto final del movimiento, respectivamente. Tras este primer movimiento del precio, el mercado suele retroceder hasta el punto B, que suele situarse aproximadamente a mitad de camino entre X y A. X, A y B son los tres puntos de referencia que utilizamos para calcular las extensiones de Fibonacci. La herramienta de extensión te permite hacerte una idea de hacia dónde podría dirigirse el mercado una vez que se haya completado el retroceso, al proyectar posibles objetivos de precio más allá del punto A.
Matemáticamente, primero calculamos la diferencia de precio entre X y A:
price difference = A − X
Esto nos da la longitud total del movimiento XA. A continuación, tomamos el ratio de extensión de Fibonacci elegido, por ejemplo, el 61,8 %, y lo expresamos en forma decimal dividiéndolo entre 100:
fibo ratio = 61.8 / 100.0
Ahora, multiplicamos esta relación por la diferencia de precio para determinar hasta dónde se extenderá más allá del punto A:
extension distance = fibo ratio × price difference
Por último, sumamos esta distancia de extensión al punto B para obtener el nivel de extensión de Fibonacci:
fibo extension = B + extension distance
En realidad, esto significa que la herramienta de extensión predice dónde podría terminar el siguiente tramo alcista más allá de A, si XA es un movimiento alcista y B es un retroceso de dicho movimiento. Del mismo modo, en un mercado bajista, la herramienta de extensión ayuda a localizar posibles objetivos a la baja más allá del nivel A. Gracias a este procedimiento matemático, las extensiones de Fibonacci son proyecciones sistemáticas basadas en relaciones proporcionales dentro de la oscilación del precio, y no meras líneas aleatorias en un gráfico.
Segundo escenario (uso directo en patrones armónicos):
La extensión de Fibonacci se aplica de forma diferente al retroceso convencional cuando se trabaja con patrones armónicos. El primer anclaje se coloca en el punto X, y el segundo y el tercero se colocan en el punto A, en lugar de utilizar la herramienta en un retroceso. En lugar de medir las correcciones, este enfoque se centra en estimar los objetivos de precios futuros.
Aunque en este caso la extensión y el retroceso de Fibonacci puedan parecer similares, no lo son. Si el punto A es un máximo del swing, solemos restarle el porcentaje de Fibonacci del tramo XA; si es un mínimo de oscilación, lo sumamos. Sin embargo, en el caso de las extensiones, sumamos el valor en lugar de restarlo si el punto A es un máximo del swing; por lo tanto, se trata de una extensión y no de un retroceso.

Ejemplo:
double price_differecence; double swing_high; //A double swing_low; //X double price_diff_161_8_percent; double fibo_extension_161_8; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_high = 1.16985; swing_low = 1.15656; price_differecence = swing_high - swing_low; price_diff_161_8_percent = (61.8/100.0) * price_differecence; fibo_extension_161_8 = swing_high + price_diff_161_8_percent; }
Por ejemplo, X a A se considera el 100 %. El nivel de Fibonacci de XA es del 61,8 %, lo que nos proporciona una extensión más allá del punto A. Cuando se suma este valor al punto A en lugar de restarlo, el nivel resultante es 161,8. Por este motivo, en los patrones armónicos se suelen emplear extensiones como 127,2 o 161,8; no se trata de retrocesos dentro del movimiento XA inicial, sino más bien de proyecciones más allá de este.
Este método elimina la necesidad de un retroceso real desde XA y facilita la identificación de la ubicación probable del siguiente movimiento en los patrones armónicos. Más bien, el movimiento del precio de X a A se amplía matemáticamente, y estas previsiones ayudan a determinar los puntos cruciales en los que el mercado podría revertir su tendencia o completar la estructura armónica.
Patrón armónico
Es mucho más sencillo analizar los patrones armónicos una vez que se han aclarado los conceptos de retroceso de Fibonacci y extensión de Fibonacci. Esto se debe a que las proporciones de Fibonacci constituyen la base de todos los patrones armónicos. En realidad, lo que distingue a cualquier patrón armónico es el grado en que los movimientos de precios coinciden con determinados niveles de retroceso y extensión de Fibonacci, además de la forma en que el patrón se presenta en el gráfico.
Las estructuras de precios geométricas que se repiten a lo largo de distintos periodos de tiempo se conocen como patrones armónicos. Consisten en oscilaciones sucesivas, o tramos, como XA, AB, BC y CD, y para que el patrón sea válido, cada tramo debe cumplir los requisitos exactos de Fibonacci. Los patrones armónicos son más específicos y objetivos que los patrones gráficos simples, como los triángulos o las banderas, ya que se basan en gran medida en ratios matemáticos.

Los patrones Gartley, Bat, Butterfly y Crab son algunos de los patrones armónicos más populares. La relación entre los tramos viene determinada por una «fórmula» de Fibonacci única para cada uno de estos patrones. Por ejemplo, para que un patrón se considere válido, el retroceso de AB con respecto a XA o la extensión de CD con respecto a BC deben situarse dentro de unos rangos de Fibonacci concretos y no ser arbitrarios.
Patrón armónico de mariposaEn un patrón de mariposa típico, el primer tramo va del punto X al A, lo que constituye el movimiento inicial del precio.

El punto B debería retroceder entre el 76 % y el 79 % del tramo X-A. Aunque a menudo se menciona el 78,6 % como el «retroceso ideal», el precio rara vez alcanza ese nivel exacto. Por este motivo, es más seguro utilizar un intervalo en lugar de un punto fijo.

Ejemplo:
double swing_low_x; //X double swing_high_x; //A double price_differecence; double fib_ret_79; double fib_ret_76; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_low_x = 1.15656; swing_high_x = 1.16985; price_differecence = swing_high_a - swing_low_x; fib_ret_79 = swing_high_x - ((79.0/100.0) * price_differecence); fib_ret_76 = swing_high_x - ((76.0/100.0) * price_differecence); /* if(B <= fib_ret_76 && B>= fib_ret_79) { } */ }
Explicación:
Este algoritmo calcula los niveles de retroceso de Fibonacci entre los puntos de oscilación X y A, sentando las bases para localizar el punto B en un patrón armónico Butterfly. Se determina la diferencia de precio y se calculan los niveles de retroceso del 79 % y del 76 % para establecer el rango dentro del cual, idealmente, debería formarse el punto B.
Una vez calculados los niveles de retroceso, podemos comparar el precio del punto B con este rango. En el bloque comentado:
if(B <= fib_ret_76 && B >= fib_ret_79) { } Esta condición determina si el punto B se encuentra dentro del retroceso del tramo XA especificado. El punto B cumple las reglas del patrón armónico «Butterfly» si se cumple la condición; en tal caso, podemos pasar a la validación adicional de los puntos C y D.
Por lo general, el segmento B-C retrocede entre aproximadamente el 38,2 % y casi el 88,6 % del movimiento anterior A-B. Este segmento ofrece cierta flexibilidad en comparación con los demás. Mientras este retroceso se mantenga dentro de los límites previstos, se considera que el conjunto del patrón es correcto.

double swing_low_x; //X double swing_high_a; //A double price_differecence; double fib_ret_79; double fib_ret_76; double swing_low_b; //B double price_differecence_ab; double fib_ret_88_6_ab; double fib_ret_38_2_ab; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_low_x = 1.15656; swing_high_a = 1.16985; price_differecence = swing_high_a - swing_low_x; fib_ret_79 = swing_high_a - ((79.0/100.0) * price_differecence); fib_ret_76 = swing_high_a - ((76.0/100.0) * price_differecence); price_differecence_ab = swing_high_a - swing_low_b; fib_ret_88_6_ab = swing_low_b + ((88.6/100.0) * price_differecence_ab); fib_ret_38_2_ab = swing_low_b + ((38.2/100.0) * price_differecence_ab); /* if(B <= fib_ret_76 && B>= fib_ret_79 && C >= fib_ret_38_2_ab && C <= fib_ret_88_6_ab) { } */ }
Explicación:
En esta sección se calcula la variación global del precio entre dos puntos significativos del mercado. Determina niveles concretos de retroceso de Fibonacci basados en este movimiento, que indican posibles puntos en los que el precio podría revertir su tendencia o encontrar soporte y resistencia. El nivel del 38,2 % utiliza una fracción menor del movimiento y la suma al mismo punto, mientras que el nivel de retroceso del 88,6 % establece dos niveles de referencia para el análisis, tomando la mayor parte del movimiento total del precio y sumándola al punto más bajo.
Estos niveles ayudan a identificar posibles zonas de reacción del precio durante un movimiento de retroceso. Por último, como parte de la lógica de confirmación del patrón, la instrucción «if» comentada determina si el punto B se encuentra entre dos niveles de retroceso concretos y si el punto C se encuentra, a su vez, dentro del rango de Fibonacci especificado.
Por último, el tramo C-D, que delimita la zona de posible reversión (PRZ), es el componente más importante del patrón de mariposa. El punto D en un patrón Butterfly válido se extiende desde el 127,2 % hasta el 161,8 % del tramo original X-A. Esta extensión conforma la zona de finalización, donde los operadores buscan posibles señales de reversión. Dado que X-A es el 100 %, D será aproximadamente el 161,8 % de X-A tras una extensión del 61,8 %.

Ejemplo:
double swing_low_x; //X double swing_high_a; //A double price_differecence; double fib_ret_79; double fib_ret_76; double swing_low_b; //B double price_differecence_ab; double fib_ret_88_6_ab; double fib_ret_38_2_ab; double xa_price_differecence; double fib_ext_127_2_xa; double fib_ext_161_8_xa; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_low_x = 1.15656; swing_high_a = 1.16985; price_differecence_ab = swing_high_a - swing_low_b; fib_ret_79 = swing_high_a - ((79.0/100.0) * price_differecence); fib_ret_76 = swing_high_a - ((76.0/100.0) * price_differecence); fib_ret_88_6_ab = swing_low_b + ((88.6/100.0) * price_differecence_ab); fib_ret_38_2_ab = swing_low_b + ((38.2/100.0) * price_differecence_ab); xa_price_differecence = swing_high_a - swing_low_x; fib_ext_127_2_xa = MathAbs(swing_low_x - ((127.2/100.0) * xa_price_differecence)); fib_ext_161_8_xa = MathAbs(swing_low_x - ((161.8/100.0) * xa_price_differecence)); /* if(B <= fib_ret_76 && B>= fib_ret_79 && C >= fib_ret_38_2_ab && C <= fib_ret_88_6_ab && D <= fib_ext_127_2_xa && D >= fib_ext_161_8_xa) { } */ }
Explicación:
Esta parte del código calcula la distancia entre dos puntos de oscilación clave de un patrón de mercado. A continuación, se utiliza la acción del precio para determinar los niveles de extensión de Fibonacci de ese segmento del patrón. Al calcular la diferencia entre los puntos de inicio y fin de la oscilación y aplicar los niveles de Fibonacci del 127,2 % y el 161,8 %, se prevé, en esencia, hacia dónde podría moverse el precio a continuación. Para garantizar que el cálculo funcione tanto en caso de subidas como de bajadas, el código utiliza una función que convierte cualquier resultado en un valor positivo (valor absoluto). A continuación, estos ratios se aplican al movimiento inicial del precio, sumándolos o restándolos según la dirección del movimiento, para obtener los niveles de extensión previstos.
Los fundamentos matemáticos de las extensiones y retrocesos de Fibonacci, así como su aplicación en MQL5, se conocen ya a la perfección. Para verificar los patrones armónicos, ahora sabemos cómo utilizar las proporciones de Fibonacci, calcular las diferencias de precio entre los puntos de oscilación e identificar los niveles importantes. La misma lógica que hemos utilizado aquí puede aplicarse a otros patrones armónicos, ya que todos ellos utilizan cálculos similares basados en la secuencia de Fibonacci para identificar posibles zonas de reversión y continuación. Ahora que contamos con este marco, podemos pasar con confianza a analizar otros patrones armónicos. Estos conceptos se aplicarán para identificar posibles oportunidades de trading utilizando la acción del precio y las relaciones de Fibonacci.
Patrón de Gartley: El patrón de Gartley se caracteriza por los tramos XA, AB, BC y CD. El punto D se encuentra dentro de la extensión del 127,2 %-161,8 % de XA; el punto B retrocede aproximadamente un 61,8 % de XA, y el punto C retrocede entre un 38,2 % y un 88,6 % de AB. Esto indica una posible zona de cambio de tendencia.
Patrón del murciélago: Ciertas proporciones de Fibonacci definen la estructura armónica conocida como el patrón del murciélago. El punto D, que suele situarse dentro de la zona de retroceso del 88,6 % de XA, marca la finalización del patrón, mientras que el punto B retrocede entre el 38,2 % y el 50 % del tramo XA.
Conclusión
En este artículo se han analizado los principios de los patrones armónicos y su aplicación en el trading. Ahora ya sabes cómo aplicar los retrocesos y las extensiones de Fibonacci en MQL5, así como los principios matemáticos en los que se basan. En el próximo artículo, pasaremos de la teoría a la práctica mediante el uso de patrones armónicos para crear un asesor experto (EA) totalmente operativo. Además, descubrirás cómo identificar visualmente y resaltar estos patrones en tus gráficos de trading utilizando los elementos gráficos de MQL5. Al finalizar el siguiente artículo, dispondrás de la información y los recursos necesarios para automatizar con éxito las estrategias de trading basadas en patrones armónicos.
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/19179
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.
Programación gráfica para principiantes (Parte II): Dominando la Interfaz, POO y Persistencia
De novato a experto: Noticias animadas utilizando MQL5 (IX) Gestión de múltiples símbolos en un único gráfico para el trading de noticias
Particularidades del trabajo con números del tipo double en MQL4
Motor de decisión Multi-IA para MQL5 (Parte 1): Integrar múltiples IA con votación por consenso
- 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