Características del Wizard MQL5 que debe conocer (Parte 83): Uso de patrones del oscilador estocástico y el FrAMA — Arquetipos de comportamiento
Introducción
Nuestra plataforma, MetaTrader 4/5, ha gozado de una amplia aceptación a lo largo de las dos décadas que lleva en el mercado, sobre todo por su flexibilidad, que, en esencia, permite tanto el trading manual como el automatizado. Por ejemplo, los modos manual y automático no solo están disponibles para adaptarse a diversos estilos de negociación, sino que además cuentan con los conjuntos de herramientas adecuados. Hay un calendario de eventos y noticias para el trading manual y una consola del probador de estrategias para el trading automatizado, entre muchas otras herramientas para cada modalidad.
Sin embargo, el asistente de MQL5, que favorece la automatización de las operaciones —y no el trading manual—, es el héroe anónimo que permite crear prototipos de sistemas de múltiples señales con trailing stops personalizables y gestión del capital. En cada asesor experto creado mediante el asistente se encuentra una combinación de elementos básicos: una o varias clases de señales; cierta lógica de trailing stop; y reglas de gestión del capital. La clase de señales, en la que se centra principalmente gran parte de los artículos de esta serie, es donde se detectan los patrones, se deducen las probabilidades y se toman las decisiones de negociación.
En este artículo, volvemos a profundizar en una clase de señales personalizada que combina el oscilador estocástico y la media móvil adaptativa fractal. La combinación de estos dos indicadores tan conocidos tiene como objetivo proporcionarnos un potente sistema híbrido cuyo objetivo final sea ofrecer una representación binaria de la lógica de estos indicadores mediante un procesamiento por etapas. Esto sirve principalmente como filtro de ruido digital para los patrones del mercado. Como es habitual, analizaremos 10 patrones de indicadores que se adaptan a diferentes tipos de mercados: con tendencia o con reversión a la media, correlacionados o desacoplados y de baja o alta volatilidad. Cada uno de estos diez patrones que definiremos en la clase de señales personalizada representa una configuración concreta de la pendiente del FrAMA, de la posición del estocástico o de un patrón de precios.
Por lo tanto, el diseño de nuestra clase de señales personalizada se adapta bien a la naturaleza modular del asistente de MQL5, y el código adjunto al final del artículo debe colocarse en la carpeta «MQL5\Include\Expert\Signal\Custom», o tal y como se indica en el encabezado del archivo «.mq5» adjunto. Los nuevos lectores pueden encontrar aquí instrucciones sobre cómo hacerlo, así como sobre cómo crear un asesor experto con el asistente. Cada uno de los diez patrones de la clase de señales personalizada es «autónomo», en el sentido de que todos utilizan el mismo marco de cálculo; sin embargo, los usuarios pueden activarlos o desactivarlos, asignarles distintas ponderaciones o optimizar las condiciones de cada uno por separado en el probador de estrategias. Por lo tanto, toda la configuración de nuestro asesor experto no es una «caja negra», sino que es lo más transparente posible. Al ser altamente personalizable, resulta, en esencia, adaptable y está mejor preparado para hacer frente a los distintos tipos de mercados, con un nivel de ajuste muy preciso, ya sean mercados con tendencia o con reversión a la media, mercados correlacionados o desacoplados, o mercados con baja o alta volatilidad.
Por lo tanto, el framework de pruebas que aquí se presenta analiza cómo se comportan nuestros diez patrones de señales en cada uno de estos regímenes de mercado. Llevamos a cabo el entrenamiento o la optimización habituales durante un año y, a continuación, realizamos una prueba prospectiva durante el año siguiente. Analizando estos distintos regímenes, también estamos llevando a cabo pruebas con diferentes clases de activos: materias primas, acciones y divisas. Más concretamente, vamos a realizar pruebas con el XAU/USD, el índice S&P 500 y el par USD/JPY. Todas las pruebas se realizan en el marco temporal de 4 horas, con un periodo de entrenamiento que abarca desde julio de 2023 hasta julio de 2024, mientras que las pruebas prospectivas se extienden desde julio de 2024 hasta julio de 2025.
Al final de este artículo, esperamos demostrar cómo la simple combinación complementaria de estos dos indicadores puede transformarse en un sistema de toma de decisiones con potencial para detectar patrones que dependen del contexto. Esperamos ofrecer no solo un marco para la experimentación, sino también uno que permita seleccionar ideas que puedan integrarse en sus propias estrategias o sistemas de trading.
Fusión del oscilador estocástico y FrAMA
Para comprender mejor cómo el oscilador estocástico y la media móvil adaptativa fractal (FrAMA) podrían complementarse entre sí, es fundamental entender qué mide cada indicador. Sin embargo, más allá de eso, podría haber motivos para valorar el uso de patrones binarios vectorizados como una comprobación o filtro adicional de las señales de nuestros indicadores.
No obstante, si empezamos por el FrAMA, se trata de una media móvil que ajusta su sensibilidad en función de la dimensión fractal de los movimientos de los precios. Podría decirse que su objetivo es ofrecer un comportamiento más suave cuando los mercados siguen una tendencia y una mayor capacidad de respuesta en mercados con movimientos erráticos y frecuentes cambios de dirección o en situaciones de precios de tipo «fractal». Su fórmula viene dada por:
![]()
Cuando:
![]()
Y:

Donde:
- P(t) es el precio actual (normalmente el precio de cierre),
- D es la dimensión fractal, una medida de la irregularidad del mercado,
- N1 y N2 son los rangos de precios en segmentos consecutivos dentro de la ventana retrospectiva del FrAMA.
En los casos en que los mercados se vuelven más uniformes y con una tendencia más marcada, el valor D tendería a acercarse a uno. Esto, a su vez, aumenta el valor de alfa y hace que el FrAMA siga más de cerca el precio, como una media móvil rápida. Sin embargo, cuando el mercado es más caótico o se mueve dentro de un rango, D tiende a acercarse a 2. Esto hace que el FrAMA sea más suave o prácticamente plano, ya que en ese caso sirve para filtrar ese ruido. Por consiguiente, en la clase de señales personalizada que utilizamos a continuación, el FrAMA actúa como eje central de la tendencia, adaptándose al contexto. Recalibra dinámicamente su pendiente en función de la volatilidad y la estructura de precios.
El oscilador estocástico, creado por George Lane, es uno de los indicadores de impulso más antiguos y, quizá, más utilizados. Cuantifica la posición del precio de cierre actual con respecto al rango entre el máximo y el mínimo de un periodo fijo. Este indicador consta de dos búferes, denominados K y D. Sus fórmulas son las siguientes:

Donde:
- Ct = cierre actual,
- Hn = máximo más alto de los últimos n períodos,
- Ln = mínimo más bajo de los últimos n períodos,
- SMAm = media móvil simple de %K a lo largo de m períodos.
Dentro de la biblioteca de indicadores integrada de MQL5, la clase correspondiente a este indicador es, como cabría esperar, CiStochastic. Se puede acceder a estos dos búferes, K y D, mediante los métodos Main y Signal, respectivamente, de una instancia de esta clase. Como es bien sabido, K oscila entre 0 y 100: un valor por debajo de 20 indica que el activo se encuentra en zona de sobreventa, mientras que un valor por encima de 80 podría indicar una zona de sobrecompra. Los cruces de las líneas K y D, así como sus patrones en estos umbrales y en sus proximidades, son importantes para detectar cambios de tendencia y continuaciones. En este artículo, estos elementos constituyen la base de nuestras representaciones binarias, que nos sirven de señal.
Una vez definidos nuestros dos indicadores, podemos plantearnos ahora su «fusión». La combinación de FrAMA y el indicador estocástico crea una lógica bidimensional en la que FrAMA detecta la dirección de la tendencia y adapta su grado de suavizado para que podamos obtener una medida dinámica del sesgo del mercado, ya sea alcista, bajista o lateral; por su parte, el indicador estocástico identifica el agotamiento del impulso o los momentos oportunos de entrada en relación con el rango de precios predominante. El uso de ambos tiende a compensar las debilidades de cada uno. El FrAMA evita el ruido sin tendencia derivado de señales prematuras, mientras que el indicador estocástico ayuda a evitar entradas tardías cuando se producen reversiones. A continuación se muestra una lista de las funciones personalizadas adicionales que se han incorporado para esta combinación de indicadores.
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::FlatFrama(int ind) { const double tol = m_pips * m_symbol.Point(); for(int i = ind; i < m_past+ind; i++) if(MathAbs(FrAMASlope(i)) > tol) return false; return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::FarAboveFrama(const int ind, double mult) { double dist = MathAbs(Close(ind) - FrAMA(ind)); double atr = High(ind + 1) - Low(ind + 1); if(atr <= 0.0) return false; //printf(__FUNCTION__ + " dist & atr are: %.5f, & %.5f ", dist, atr); return (Close(ind) > FrAMA(ind) && dist > mult * m_symbol.Point() * atr / 4.0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::FarBelowFrama(const int ind, double mult) { const double dist = MathAbs(Close(ind) - FrAMA(ind)); const double atr = High(ind + 1) - Low(ind + 1); if(atr <= 0.0) return false; //printf(__FUNCTION__); return (Close(ind) < FrAMA(ind) && dist > mult * m_symbol.Point() * atr / 4.0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::BullishDivergence() { int a = -1, b = -1; for(int i = 2; i <= m_past + 2; i++) { if(Low(i) < Low(i - 1) && Low(i) < Low(i + 1)) { if(a == -1) a = i; else { b = i; break; } } } if(a == -1 || b == -1) return false; bool priceLL = (Low(a) < Low(b)); bool oscHL = (K(a) > K(b)); return (priceLL && oscHL); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::BearishDivergence() { int a = -1, b = -1; for(int i = 2; i <= m_past + 2; i++) { if(High(i) > High(i - 1) && High(i) > High(i + 1)) { if(a == -1) a = i; else { b = i; break; } } } if(a == -1 || b == -1) return false; bool priceHH = (High(a) > High(b)); bool oscLH = (K(a) < K(b)); return (priceHH && oscLH); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::FramaTurningUp() { return (FrAMASlope(X() + 3) < 0 && FrAMASlope(X() + 2) < 0 && FrAMASlope(X() + 1) > 0 && FrAMASlope(X()) > 0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::FramaTurningDown() { return (FrAMASlope(X() + 3) > 0 && FrAMASlope(X() + 2) > 0 && FrAMASlope(X() + 1) < 0 && FrAMASlope(X()) < 0); }
Para los nuevos lectores, a fin de obtener una representación binaria, la condición de cada indicador se verifica utilizando un sistema booleano de «verdadero» o «falso». Así, por ejemplo, se comprueba si hay pendiente, si se da una condición de rango, etc. Cada uno de estos resultados se convierte entonces en una señal de 1 bit; al agrupar estas señales, se obtiene un vector binario en el que los 1 indican la presencia de un patrón y los 0, su ausencia. En esencia, este método digitaliza la evolución analógica de los precios, lo que permite que un asesor experto interprete el mercado como una serie de vectores booleanos. Además, estos vectores son ligeros desde el punto de vista computacional, lo que permite realizar más de una comprobación de patrones por cada nueva barra de precios, minimizando así la carga de la CPU.
Framework de pruebas
Nuestro objetivo al analizar los patrones de señal del oscilador estocástico y del FrAMA no se limita a realizar pruebas retrospectivas de una única estrategia, sino que consiste en comprender mejor cómo se comportan diez patrones de indicadores distintos en diferentes entornos de mercado. Para garantizar la coherencia estadística, todas nuestras pruebas se realizan con la misma configuración de optimización de los parámetros de entrada, con la salvedad importante de que determinados tipos de activos se someten a prueba en diferentes arquetipos de mercado.
Los diez patrones de señal se prueban en el marco temporal de 4 horas, como solución intermedia entre reducir el ruido con un periodo que no sea demasiado corto y mantener una frecuencia de operaciones suficiente con un periodo que no sea demasiado largo. Como se ha mencionado anteriormente, cada patrón se entrena y optimiza entre el 1 de julio de 2023 y el 1 de julio de 2024, mientras que la prueba prospectiva y la validación se llevan a cabo entre el 1 de julio de 2024 y el 1 de julio de 2025. Esta división garantiza un año completo de entrenamiento dentro de la muestra, seguido de otro año de validación fuera de la muestra.
Durante la optimización, ajustamos los umbrales habituales de apertura y cierre de la clase de señales personalizada, el desplazamiento del precio de entrada de las órdenes limitadas, así como el take profit. Además, siempre ajustamos el umbral de apertura o activación de cada patrón de señal, tal y como hemos venido haciendo en artículos anteriores. Aparte de estos ajustes, introducimos el ajuste del periodo retrospectivo y del umbral en pips. El parámetro de máscara de bits «PatternsUsed» también se ajusta manualmente para cada ejecución de un patrón de señal, tal y como ya se ha explicado en artículos anteriores.
Con el fin de contextualizar mejor todos los patrones binarios, las pruebas se agruparon por instrumento financiero según un arquetipo de mercado concreto. Los instrumentos financieros seleccionados tenían por objeto ilustrar de la mejor manera posible cada uno de estos comportamientos del mercado. Esto se presentó en una tabla de la siguiente manera:
| Tipo de mercado | Patrones probados | Instrumento financiero utilizado | Justificación |
|---|---|---|---|
| Tendencial | 0,6 | XAU/USD | La capacidad del oro para seguir una tendencia cuando se alinean los factores macroeconómicos |
| Con reversión a la media | 1,7 | XAU/USD | Las consolidaciones intradía del oro, que podrían indicar picos de impulso |
| Correlacionado | 2 | SPX | Fuertes correlaciones entre acciones y señales de alineación del impulso |
| Desacoplado | 3,9 | SPX | La lógica de la divergencia y el desacoplamiento puede dar buenos resultados en algunos sectores asimétricos |
| Alta volatilidad | 4,8 | USD JPY | La volatilidad del yen puede indicar sobreextensiones y patrones de giro en la línea media |
| Baja volatilidad | 5 | USD JPY | Los movimientos laterales y el FrAMA plano pueden ser frecuentes en ciclos de volatilidad reducida. |
Nuestra tabla anterior tiene por objeto permitir que cada patrón de señal se analice en el «entorno para el que está concebido conceptualmente».
Nuestro criterio de optimización fue el «criterio complejo» integrado, que puede entenderse que prioriza la robustez y una mejor generalización frente al beneficio por sí solo. Además, dado que estructuramos cada patrón de señal como un bloque lógico binario autónomo, es posible confirmar o descartar con mayor precisión la relevancia contextual de cada patrón respecto al arquetipo de mercado del instrumento financiero analizado. Por lo tanto, los desarrolladores pueden reutilizar este framework para estrategias híbridas independientes, adaptándolo con cambios mínimos en el código.
Patrón-0: Alineación de la ruptura en un mercado con tendencia
Nuestro primer patrón está diseñado para funcionar especialmente bien en mercados con un fuerte impulso direccional. Su lógica fundamental se basa en la pendiente adaptativa del FrAMA y en las señales de cruce del estocástico. En MQL5 lo implementamos de la siguiente manera:
SELL: el precio se encuentra por debajo del FrAMA; la pendiente del FrAMA es negativa, lo que indica un impulso bajista; la línea %K del estocástico cruza por debajo de %D, lo que señala un cruce bajista; el valor de %K está por encima de 80, lo que significa que el mercado se encontraba en zona de sobrecompra.

//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return((Close(X()) > FrAMA(X()) && FrAMASlope(X()) > 0 && CrossUp(K(X()), D(X()), K(X() + 1), D(X() + 1)) && K(X()) < 20) ? true : false); } else if(T == POSITION_TYPE_SELL) { return((Close(X()) < FrAMA(X()) && FrAMASlope(X()) < 0 && CrossDown(K(X()), D(X()), K(X() + 1), D(X() + 1)) && K(X()) > 80) ? true : false); } return(false); }
La señal de venta, que es el reflejo de la señal alcista, se da cuando el precio se sitúa por debajo del FrAMA, esta presenta una pendiente negativa y se produce un cruce a la baja en el estocástico con la línea %K por encima de 80. El patrón 0 resume la transición de la contracción a la expansión, el rasgo característico del inicio de las tendencias. En nuestro caso, elegimos el oro, una materia prima, porque suele alternar entre movimientos direccionales prolongados y trampas de consolidación, normalmente impulsados por narrativas macroeconómicas que incluyen las expectativas de inflación y las posturas de política monetaria de los bancos centrales. Elegimos el oro para aprovechar la sensibilidad a las tendencias del patrón 0. A continuación se presentan también los resultados de la prueba prospectiva para el patrón 0:

Apenas conseguimos obtener algún beneficio en la prueba prospectiva. El «éxito» de este patrón podría poner de relieve dos observaciones clave. En primer lugar, la elección del instrumento financiero analizado podría haber sido adecuada, dada la dinámica del XAU como instrumento de fuerte impulso, influida por factores macroeconómicos. La amplitud de su rango diario suele permitir que el componente estocástico se recupere de los niveles de sobreventa sin que se produzcan reversiones prematuras. En segundo lugar, la solidez del patrón también podría haber sido clave en este caso, dado que estamos considerando dos medidas ortogonales: la dirección de la tendencia y la reaceleración del impulso. Cada uno de los dos indicadores aporta datos únicos a la decisión binaria, que da buenos resultados no solo durante el entrenamiento, sino también en la prueba prospectiva.
Patrón 1: Reversión a la media con giro en gancho
Mientras que con el patrón 0 buscábamos rupturas en mercados con tendencia, con este patrón de señal adoptamos una postura algo opuesta, centrándonos en la reversión a la media. Buscamos puntos de agotamiento en los que el precio se desvía temporalmente del equilibrio antes de retornar bruscamente a él. Este patrón aprovecha la sensibilidad del estocástico en los extremos a corto plazo, mientras que el FrAMA actúa como línea de referencia dinámica y ayuda a identificar sobreextensiones dentro de su rango adaptativo.
El patrón 1 debería funcionar bien con activos que oscilan mucho en torno a una tendencia central, en los que se registran picos y valles frecuentes en el impulso, con una volatilidad relativamente «estable». El oro puede presentar estas características, sobre todo en sus fases de consolidación tras fuertes subidas o caídas. Esto se implementa en MQL5 de la siguiente manera:
SELL - El precio está por encima del FrAMA (zona de sobrevaloración); la línea %K es superior a 85, lo que indica una fuerte sobrecompra; la línea %K está bajando, es decir, su valor es inferior al de hace una barra

//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return((Close(X()) < FrAMA(X()) && K(X()) < 15 && K(X()) > K(X() + 1)) ? true : false); } else if(T == POSITION_TYPE_SELL) { return((Close(X()) > FrAMA(X()) && K(X()) > 85 && K(X()) < K(X() + 1)) ? true : false); } return(false); }
Tanto las señales de compra como las de venta detectan el primer giro de la línea %K cuando se encuentra en zonas extremas. Esto se hace tomando posiciones contrarias al comportamiento colectivo de los participantes del mercado a corto plazo. El FrAMA actúa como filtro y garantiza que las entradas se produzcan cuando el precio se ha alejado de la media, que, recordemos, se está «adaptando» constantemente. El objetivo es reducir las falsas reversiones en las tendencias alcistas o bajistas.
El oro, aunque suele mostrar tendencias marcadas, también puede ser adecuado para patrones de reversión a la media en sus fases de consolidación. Puede oscilar dentro de rangos estrechos y sin una dirección definida, sobre todo cuando los catalizadores macroeconómicos están inactivos. En estos momentos, la pendiente de la curva FrAMA tiende a aplanarse, lo que representa un equilibrio adaptativo que apunta al «valor razonable». Cuando, al mismo tiempo, el indicador estocástico se gira dentro de las zonas extremas —por debajo de 15 o por encima de 85—, refleja el agotamiento de las posiciones especulativas, lo que ofrece oportunidades de entrada ante un cambio de tendencia. Las pruebas prospectivas fueron rentables y nos ofrecieron el siguiente informe.

Patrón 2: Continuación de la tendencia correlacionada
Nuestro tercer patrón está diseñado para aprovechar las prolongaciones sostenidas de las tendencias en entornos de mercado con correlaciones, en los que los activos muestran movimientos sincronizados impulsados por influencias macroeconómicas comunes. Este patrón aprovecha un FrAMA robusto que presenta una pendiente positiva pronunciada para las compras o, a la inversa, una pendiente negativa pronunciada para las ventas. Esto debe combinarse, por tanto, con una posición coherente del oscilador estocástico. En concreto, las líneas K y D deben mantenerse por encima de 50 al abrir una posición larga o por debajo de 50 al abrir una posición corta. Con esto se pretende representar un impulso persistente. En MQL5 lo implementamos de la siguiente manera.
SELL - La pendiente del FrAMA es marcadamente negativa, lo que confirma una tendencia bajista; durante el periodo retrospectivo, tanto el %K como el %D del estocástico se mantuvieron por debajo de 50, lo que indica un sentimiento bajista persistente.

//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::IsPattern_2(ENUM_POSITION_TYPE T) { const double strong = m_pips * m_symbol.Point(); bool up = (FrAMASlope(X()) > strong); bool down = (FrAMASlope(X()) < -strong); bool over = true, under = true; for(int i = 0; i < m_past; i++) { over &= (K(X() + i) > 50 && D(X() + i) > 50); under &= (K(X() + i) < 50 && D(X() + i) < 50); } if(T == POSITION_TYPE_BUY) { return((up && over) ? true : false); } else if(T == POSITION_TYPE_SELL) { return((down && under) ? true : false); } return(false); }
En sentido estricto, cualquier activo puede utilizarse, al menos, para poner a prueba este patrón, y el hecho de que hayamos usado el SPY no constituía en modo alguno una recomendación firme. Sin embargo, podría decirse que el índice es adecuado para este patrón, ya que, de los diez patrones que estamos analizando, este es uno de los que más se apoya en la correlación, y este índice suele presentar una elevada correlación con las acciones que lo componen. Por lo tanto, la autocorrelación tiende a ser elevada en determinados periodos. Nuestra prueba prospectiva arrojó resultados ligeramente prometedores, tal y como se indica a continuación.

Patrón 3: Reconocimiento de divergencias desacopladas
Nuestro cuarto patrón se aleja de las reglas basadas exclusivamente en el seguimiento de la tendencia y se centra, en cambio, en el desacoplamiento del mercado. Es en este momento cuando el precio y el impulso empiezan a desincronizarse. Este patrón aprovecha el contraste estructural entre el FrAMA y el oscilador estocástico: la primera ofrece una representación suavizada de la tendencia, mientras que el segundo mide la energía interna a corto plazo. El objetivo es detectar divergencias, tanto alcistas como bajistas, momentos antes de que el precio alcance un nuevo extremo, para realizar operaciones de compra y venta, respectivamente. Tras esta señal, el oscilador estocástico debe dejar de confirmar la continuidad del impulso, lo que podría indicar un agotamiento. Con ello se pretende señalar un desacoplamiento, sobre todo en entornos que suelen estar correlacionados y presentan muchos comportamientos sincronizados. En MQL5 lo implementamos de la siguiente manera.
SELL - El precio está por encima del FrAMA, pero el impulso indica lo contrario; hay una divergencia bajista; el precio alcanza un máximo más alto, pero el %K del estocástico alcanza un máximo más bajo.

//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return((Close(X()) < FrAMA(X()) && BullishDivergence()) ? true : false); } else if(T == POSITION_TYPE_SELL) { return((Close(X()) > FrAMA(X()) && BearishDivergence()) ? true : false); } return(false); }
El índice SPY se prestaba a este patrón en el sentido de que suele presentar autocorrelación, dada la sincronización que existe entre él y sus activos subyacentes. Por ello, esta configuración está preparada para un desacoplamiento temporal ocasional cuando se produzcan algunas divergencias «inevitables» entre sectores. Por ejemplo, el sector tecnológico podría repuntar mientras que el energético se debilita, en función de determinados factores coyunturales o de noticias inesperadas. Estas divergencias intersectoriales pueden manifestarse durante los puntos de inflexión macroeconómicos y, a menudo, presagian divergencias en los indicadores a nivel de índice. En este caso, el FrAMA constituye la «línea de base» estructural, mientras que el oscilador estocástico actúa como un «acelerómetro a corto plazo». Cuando ambos están en desacuerdo, esto suele preceder a un agotamiento de la tendencia o a una fase de reequilibrio. Los resultados de la prueba prospectiva para el patrón 3 fueron los siguientes.

El buen resultado del patrón 3 podría deberse a que no se persigue el precio, sino que se anticipan las rupturas en las correlaciones, que suelen preceder a los puntos de inflexión más generales del mercado.
Patrón 4: Sobreextensión por alta volatilidad
Nuestro quinto patrón, y el último que mencionaremos en este artículo en concreto, está diseñado para identificar los extremos provocados por la volatilidad. Estos extremos se producen cuando el precio se aleja considerablemente de su media adaptativa antes de que se produzca una corrección o una continuación. Esta regla combina la línea de base adaptativa del FrAMA con un filtro de distancia. En esencia, intentamos detectar desviaciones estadísticamente significativas que se ven amplificadas por un aumento de la volatilidad.
Este patrón está pensado para funcionar en mercados con movimientos rápidos, en los que son habituales las sobreextensiones y los impulsos tendenciales suelen alejarse del equilibrio antes de normalizarse. Por eso hemos elegido el par USD/JPY para este patrón. Lo implementaremos en MQL5 de la siguiente manera.
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::IsPattern_4(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return((FarAboveFrama(X()) && K(X()) > 60) ? true : false); } else if(T == POSITION_TYPE_SELL) { return((FarBelowFrama(X()) && K(X()) < 40) ? true : false); } return(false); }
Al utilizar una distancia dinámica como hiperparámetro adicional, «dist», la señal solo se activa si la desviación es estadísticamente significativa. El parámetro de entrada «mult» también se podría haber ajustado, aunque se utiliza prácticamente como un valor epsilon o distinto de cero. Los lectores pueden examinar el código adjunto a continuación y comprobar si ajustar este parámetro influiría de manera significativa en el rendimiento del patrón de señal.
Volviendo al par USD/JPY, este par de divisas —y probablemente también la mayoría de los pares con el yen— tiende a mostrar su volatilidad de forma asimétrica. Esto resulta especialmente evidente cuando se producen ráfagas de tendencia prolongadas, como cuando existen diferencias en la política monetaria o en los tipos de interés entre la Reserva Federal y el Banco de Japón. Sin embargo, estas suelen ir seguidas de movimientos contrarios de magnitud casi equivalente. También se observan fuertes reacciones ante los cambios en la liquidez intradía o ante la publicación de noticias económicas importantes. Todos estos factores encajan con el enfoque de este patrón, basado en una volatilidad elevada. Este patrón resultó rentable en la prueba prospectiva, tal y como se muestra en el informe que figura a continuación.

La dependencia del patrón 4 del ajuste en función de la volatilidad podría atribuirse a estos resultados favorables.
Conclusión
Para esta combinación de indicadores contamos con los 10 patrones habituales, tal y como ha sido el caso con las señales de indicadores combinados; sin embargo, en este artículo solo analizaremos 5 de ellos. En nuestra próxima entrega continuaremos donde lo dejamos hoy. Sin embargo, como hemos visto, la combinación del FrAMA y el oscilador estocástico en una clase de señales personalizada ha mostrado cierto potencial para resultar útil más allá de nuestras limitadas ventanas de prueba. Cada uno de los cinco patrones que hemos analizado representaba un patrón de comportamiento concreto que se manifestaba de manera más evidente en un activo o instrumento financiero específico. Hemos realizado pruebas con XAU/USD, SPX y USD/JPY, y en el próximo artículo seguiremos usando estos instrumentos financieros para analizar patrones de mercado distintos, aunque relacionados.
Aviso legal
Esto no constituye asesoramiento financiero. Estos artículos no pretenden afirmar que comprendemos los mercados, sino invitar al debate de ideas. El objetivo no es mostrar la existencia de un «santo grial», sino más bien explorar el abanico de oportunidades disponibles y, con suerte, mostrar cómo se podrían aprovechar. El trabajo de pulido y la diligencia necesaria recaen siempre en el lector, en caso de que decida incorporar parte del material aquí presentado.
| nombre | descripción |
|---|---|
| WZ-83.mq5 | Asesor experto creado mediante el asistente, cuyo encabezado incluye el nombre y la ubicación de los archivos incluidos |
| SignalWZ_83.mqh | Archivo de la clase de señales personalizada para crear un asesor experto con el asistente |
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/19857
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.