Características del Wizard MQL5 que debe conocer (Parte 65): Uso de los patrones FrAMA y Force Index
Introducción
Continuamos nuestra serie, donde la última vez analizamos los canales DeMarker y Envelopes, considerando la combinación del Fractal Adaptive Moving Average (FrAMA) y el Force Index Oscillator. FrAMA, al ser una media móvil, es un indicador de tendencia, mientras que el Force Index permite comprobar el volumen para ver si la tendencia se mantiene. Analizaremos los 10 patrones típicos que se pueden generar combinando estos dos indicadores, como ya hemos hecho en artículos anteriores. Realizamos el entrenamiento u optimización con EUR/USD en el marco temporal H4 para el año 2023. Las pruebas forward se realizan con este símbolo durante el año 2024.
Divergencia entre FrAMA y Force Index
Nuestro primer patrón surge de la divergencia entre FrAMA y el Force Index. Una señal alcista se produce cuando FrAMA muestra una tendencia bajista, ya sea porque el precio forma mínimos más bajos o porque prolonga su caída por debajo de FrAMA, mientras que el Force Index forma mínimos más altos, lo que implica una menor presión de venta. Este patrón sencillo, incluso dentro de su definición relativamente limitada, puede implementarse de diversas maneras. Optamos por implementarlo buscando caídas del precio por debajo de FrAMA mientras el Force Index sube por encima de su mínimo anterior sin dejar de mantenerse por debajo de cero.
La señal bajista se produce cuando una tendencia alcista de FrAMA, confirmada por máximos cada vez más altos en el precio, se observa junto con el Force Index formando máximos cada vez más bajos, lo que indica una disminución de la presión compradora. En MQL5 implementamos patrones tanto alcistas como bajistas de la siguiente manera:
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) < FRM(X()) && Close(X() + 1) > FRM(X() + 1) && 0.0 > FRC(X()) && FRC(X()) > FRC(X() + 1)) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) > FRM(X()) && Close(X() + 1) < FRM(X() + 1) && 0.0 < FRC(X()) && FRC(X()) < FRC(X() + 1)) { return(true); } return(false); }
Este patrón detecta posibles cambios de tendencia comparando la dirección de FrAMA con el impulso del Force Index. A menudo, una fuerte divergencia alcista/bajista indica un debilitamiento de las tendencias, lo que constituye la tesis clave de entrada. Este patrón, por lo tanto, combina la adaptabilidad con el impulso ponderado por volumen.
FrAMA ajusta su período de suavizado en función de la geometría fractal, lo que le permite responder con gran precisión a los cambios de precio a la vez que filtra el ruido. Por otro lado, el Force Index mide la intensidad de un movimiento de precios multiplicando la variación del precio por el volumen, lo que sirve como indicador de la presión de compra/venta. Se produce una divergencia alcista cuando FrAMA muestra una tendencia bajista, pero el Force Index forma mínimos más altos, lo que indica debilidad en la tendencia bajista actual. La divergencia bajista sigue la lógica opuesta. Este patrón está pensado, por su propia naturaleza, para capturar puntos de inflexión o giro en el mercado. Los resultados de las pruebas después del entrenamiento/optimización se presentan a continuación, y este patrón no supera la prueba forward durante el período designado de un año, 2024.

Cruce de FrAMA con confirmación del Force Index
Nuestro patrón 1 se basa en el cruce de FrAMA y en una confirmación del Force Index. La señal alcista se produce cuando el precio cruza por encima de FrAMA o cuando un FrAMA rápido cruza por encima de un FrAMA lento. Cuando esto sucede, el Force Index también cruzaría su línea cero. Por lo tanto, una señal bajista se produce cuando el precio cruza el FrAMA desde arriba para caer por debajo de él, mientras que el Force Index también se vuelve negativo al cruzar su línea cero para cerrar por debajo de ella. En MQL5 implementamos esto de la siguiente manera:
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > FRM(X()) && Close(X() + 1) < FRM(X() + 1) && 0.0 > FRC(X() + 1) && FRC(X()) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < FRM(X()) && Close(X() + 1) > FRM(X() + 1) && 0.0 < FRC(X() + 1) && FRC(X()) < 0.0) { return(true); } return(false); }
Este patrón se basa en dos cruces. Uno de ellos sirve para señalar cambios de tendencia, concretamente FrAMA, y el otro para medir el impulso respaldado por el volumen, según el Force Index. Esto ayuda a reducir las señales falsas en mercados laterales o erráticos. El cruce de FrAMA también se puede implementar utilizando un FrAMA rápido y uno lento, donde las señales se leen del cruce del FrAMA más rápido en lugar del precio. Se pueden considerar, por ejemplo, períodos de 14 y 50. El Force Index desempeña entonces un papel secundario de validación al confirmar si los cambios de tendencia están respaldados por el volumen.
Este patrón resulta eficaz en mercados con tendencia, ya que la adaptabilidad de FrAMA garantiza que las tendencias se detecten de forma oportuna, mientras que el Force Index filtra las rupturas de bajo volumen. Al implementar esto, es una buena idea establecer períodos de FrAMA en el rango de 12 a 50 para capturar las tendencias a mediano plazo. El requisito de que el Force Index cruce su línea cero también puede sustituirse por hacer que cruce su media móvil si se dispone de ese búfer de datos. Este patrón no debe utilizarse para operar en fases de consolidación del mercado, ya que se sabe que los cruces de FrAMA generan muchas señales falsas. La clave para obtener resultados adecuados podría ser realizar una prueba retrospectiva para determinar períodos adecuados de FrAMA y Force Index, algo que no hemos hecho ya que hemos utilizado el número 14 para ambos. A continuación se presentan nuestras pruebas del probador de estrategias, que abarcan el período de entrenamiento y prueba. Este patrón tampoco supera la prueba forward:

Dirección de la tendencia de FrAMA con Force Index en sobrecompra/sobreventa
Nuestro patrón 2 utiliza la dirección de la tendencia de FrAMA junto con las lecturas del Force Index para detectar sobrecompra o sobreventa. La señal alcista se da cuando el precio está por encima de FrAMA, lo que indica una tendencia alcista, además de que el Force Index alcanza un nivel de sobreventa seguido de un retroceso. Este retroceso del Force Index se considera una oportunidad de compra. Por el contrario, la señal bajista se produce cuando el precio está por debajo de FrAMA y el Force Index alcanza un nivel de sobrecompra y luego comienza a caer, lo que indica un retroceso. Implementamos esto en MQL5 de la siguiente manera:
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_2(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > FRM(X()) && 0.0 >= FRC(X()) && FRC(X()) > FRC(X() + 1)) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < FRM(X()) && 0.0 <= FRC(X()) && FRC(X()) < FRC(X() + 1)) { return(true); } return(false); }
Este patrón de señales combina la confirmación de la tendencia de FrAMA y los niveles extremos del Force Index para detectar retrocesos y reversiones. Es ideal para operar con estrategias de reversión a la media dentro de las tendencias. Los picos de volumen en situaciones de sobrecompra/sobreventa mejoran la fiabilidad de esta señal. Este patrón aprovecha la claridad de la tendencia de FrAMA y los extremos ponderados por volumen del Force Index. Los umbrales del Force Index pueden ajustarse en función de la volatilidad del activo. Para nuestros fines, no hemos utilizado un valor umbral absoluto para la sobrecompra/sobreventa, ya que estos valores tienden a variar según las unidades de precio de los activos. En cambio, estamos utilizando los patrones del Force Index para medir si se alcanzan los umbrales. Por lo tanto, la confirmación mediante retrocesos de precios desde niveles de soporte clave o mediante patrones de velas japonesas puede ser de gran ayuda para precisar esta señal en particular.
Puede utilizarse con marcos temporales más cortos, como el de 1 hora, para operaciones intradía, a la vez que se adapta a marcos temporales más amplios. No debe utilizarse para operar en contra de tendencias fuertes a menos que el Force Index indique una divergencia extrema. Este patrón tampoco supera la prueba forward. A continuación se presenta el informe de las pruebas realizadas:

Pendiente de FrAMA con suavizado del Force Index
El patrón 3 utiliza la pendiente de FrAMA y el suavizado del Force Index, de modo que la señal alcista es FrAMA con una pendiente positiva en un ángulo pronunciado y el Force Index también experimenta un pico pronunciado en territorio positivo. Por otro lado, la señal bajista la presenta FrAMA con una pendiente negativa pronunciada, y el Force Index suavizado es negativo y descendente. Implementamos esto en MQL5 de la siguiente manera:
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && FRM(X()) - FRM(X() + 1) > FRM(X() + 1) - FRM(X() + 2) && FRM(X() + 1) - FRM(X() + 2) > 0.0 && FRC(X()) - FRC(X() + 1) > FRC(X() + 1) - FRC(X() + 2) && FRC(X() + 1) - FRC(X() + 2) > 0.0) { return(true); } else if(T == POSITION_TYPE_BUY && FRM(X()) - FRM(X() + 1) < FRM(X() + 1) - FRM(X() + 2) && FRM(X() + 1) - FRM(X() + 2) < 0.0 && FRC(X()) - FRC(X() + 1) < FRC(X() + 1) - FRC(X() + 2) && FRC(X() + 1) - FRC(X() + 2) < 0.0) { return(true); } return(false); }
No estamos leyendo un búfer suavizado secundario, sino que estamos observando los cambios en el Force Index. Pero al hacer un seguimiento de la magnitud de estos cambios y observar los incrementos en los mismos, estamos simulando un Force Index suavizado. Este patrón está diseñado para medir la pendiente de FrAMA y evaluar la fuerza de la tendencia cuando se combina con el Force Index suavizado, y suele ser eficaz en mercados con tendencia y volumen constante.
En implementaciones alternativas, que analizan el ángulo FrAMA, la pendiente se puede calcular como una tasa de cambio. Una mayor tasa de cambio implicaría un ángulo más pronunciado, mientras que una menor tasa de cambio implicaría un ángulo menos pronunciado. Por lo tanto, estamos utilizando la tasa de cambio de FrAMA, así como un indicador indirecto del aumento en la pendiente del ángulo. El Force Index suavizado utilizado también filtra el ruido a corto plazo y destaca la acción del precio con un impulso sostenido. Así pues, al combinar estos dos elementos, una pendiente pronunciada de FrAMA con un Force Index suavizado y ascendente debería confirmar una fuerte tendencia alcista, mientras que una pendiente descendente con un Force Index descendente debería indicar un impulso bajista significativo. Este par de indicadores en este patrón es robusto para el swing trading, ya que se centra en tendencias sostenidas. Este patrón tampoco supera la prueba forward, y su informe se presenta a continuación:

Al implementarlo, el cálculo de la pendiente de FrAMA puede ajustarse si la tasa de cambio no se considera lo suficientemente sensible. Al utilizar un período de entre 13 y 21 al emplear el enfoque de tasa de cambio, se podría lograr un mayor equilibrio entre la capacidad de respuesta y la reducción del ruido. El momento de entrar en las operaciones debe ser cuando ambos indicadores coincidan, es decir, cuando ambos tengan pendiente positiva o ambos tengan pendiente negativa. Se puede inferir que la salida se produce cuando la pendiente de FrAMA se estabiliza o el Force Index se invierte, lo que indica el agotamiento de la tendencia.
Ruptura de FrAMA con aumento del volumen del Force Index
El patrón 4 utiliza la ruptura de FrAMA y un pico en el Force Index. La señal alcista se produce cuando el precio supera decisivamente FrAMA, normalmente en más del 1 por ciento. Mientras esto se registra, el Force Index también mostraría un fuerte repunte positivo de aproximadamente el doble del valor promedio del Force Index para indicar un fuerte volumen de compras. Por otro lado, la señal bajista se produce cuando el precio cae claramente por debajo de FrAMA en un porcentaje considerable y, además, el Force Index muestra un fuerte repunte negativo de, de nuevo, 2x, lo que indica un fuerte volumen de ventas. En MQL5 implementamos esto de la siguiente manera:
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_4(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > FRM(X()) && Close(X() + 1) < FRM(X() + 1) && Close(X()) - Close(X() + 1) >= High(X() + 1) - Low(X() + 1) && FRC(X()) >= 2.0 * FRC(X() + 1) && FRC(X() + 1) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < FRM(X()) && Close(X() + 1) > FRM(X() + 1) && Close(X()) - Close(X() + 1) <= High(X() + 1) - Low(X() + 1) && FRC(X()) <= 2.0 * FRC(X() + 1) && FRC(X() + 1) < 0.0) { return(true); } return(false); }
Este patrón detecta rupturas cuando el precio se mueve bruscamente por encima o por debajo de FrAMA y el Force Index confirma esta ruptura con un aumento repentino del volumen. Suele ser una configuración de alta probabilidad en mercados volátiles. La ruptura de FrAMA sí señala una nueva tendencia, y el Force Index actúa como filtro para su confirmación. La combinación de indicadores en este patrón es ideal para activos volátiles como las criptomonedas o las acciones de pequeña capitalización, donde los picos de volumen preceden a los movimientos sostenidos. La adaptabilidad de FrAMA garantiza la detección oportuna de rupturas, mientras que el Force Index filtra las falsas rupturas.
Este patrón requiere un pico mínimo del Force Index equivalente al doble del valor promedio o anterior. Se puede complementar la confirmación de las rupturas con patrones gráficos como triángulos o banderas cuando se alcanzan niveles de precios clave. El uso de órdenes de stop loss por debajo o por encima del FrAMA también puede mitigar el riesgo. También conviene monitorizar las tendencias de volumen para evitar rupturas fallidas en mercados de baja liquidez. Este patrón se probó de la siguiente manera y, lamentablemente, como la mayoría de los patrones con este par de indicadores y un período de 14, no superó la prueba forward:

Soporte/resistencia de FrAMA con inversión del Force Index
Nuestro patrón 5 utiliza el FrAMA como soporte/resistencia con inversión del Force Index. La señal alcista se da cuando el precio rebota en FrAMA, que actúa como soporte dinámico. De esta forma, el precio se acercaría o tocaría FrAMA desde arriba y luego rebotaría. Cuando esto sucede, el Force Index cruza por encima de su línea cero o, en una implementación alternativa, de su EMA de período 5/13. Esto indica un aumento en el volumen alcista.
Por otro lado, una señal bajista se produce cuando el precio rechaza FrAMA como resistencia dinámica, o cuando el precio toca o se acerca a FrAMA en una tendencia bajista. El Force Index cruzaría por debajo de su línea cero o de su EMA para indicar un aumento del volumen bajista. Implementamos esto en MQL5 de la siguiente manera:
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_5(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) >= FRM(X()) && Close(X() + 1) <= FRM(X() + 1) && Close(X() + 2) >= FRM(X() + 2) && FRC(X()) > 0.0 && FRC(X() + 1) < 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) <= FRM(X()) && Close(X() + 1) >= FRM(X() + 1) && Close(X() + 2) <= FRM(X() + 2) && FRC(X()) < 0.0 && FRC(X() + 1) > 0.0) { return(true); } return(false); }
Este patrón combina el contexto de la tendencia con los cambios de impulso y funciona bien en mercados con rangos definidos y en mercados con tendencia. FrAMA actúa como un nivel dinámico de soporte y resistencia donde el precio rebota o es rechazado, y el Force Index señala los cambios de tendencia. Esta combinación puede resultar versátil, ya que FrAMA se adapta a las condiciones del mercado y el Force Index proporciona una sincronización precisa.
Es necesario establecer la fiabilidad de FrAMA como soporte/resistencia mediante pruebas con datos históricos. Si se desean confirmaciones más rápidas del Force Index, entonces se puede considerar una implementación que utilice una EMA del Force Index en lugar de nuestro enfoque anterior. Este patrón también se puede combinar con zonas estáticas de soporte/resistencia de mayor escala para lograr una mayor confluencia. Se debe evitar operar durante períodos de bajo volumen, ya que el Force Index puede presentar retrasos. Este patrón tampoco supera la prueba forward cuando se entrena solo con el año 2023 y se prueba con el año 2024. A continuación se presenta el informe de las pruebas realizadas durante ambos períodos:

Continuación de tendencia de FrAMA con retroceso del Force Index
Nuestro séptimo patrón, el patrón 6, se basa en la continuación de la tendencia de FrAMA con retrocesos del Force Index. La señal alcista se produce cuando el precio se mantiene por encima de FrAMA, confirmando la tendencia alcista, y el Force Index desciende hacia el límite cero, pudiendo llegar a ser ligeramente negativo, pero luego se recupera desde ese límite para volverse positivo. La evolución del Force Index está ligada a una renovada presión compradora.
La señal bajista, por otro lado, se produce cuando el precio se mantiene por debajo del FrAMA, confirmando así una configuración bajista. Para confirmar esto, el Force Index aumenta desde valores inferiores a cero hasta acercarse a cero, tal vez lo supere ligeramente, y luego vuelve a valores inferiores a cero. Esto, al igual que ocurre con la tendencia alcista, también indica una renovada presión vendedora. En esencia, el patrón 6 identifica oportunidades de continuación de la tendencia durante los retrocesos. FrAMA define la tendencia y el Force Index comprueba la recuperación del volumen. En teoría, este patrón debería ofrecer una alta relación riesgo-beneficio en tendencias fuertes. Lo implementamos en MQL5 de la siguiente manera:
//+------------------------------------------------------------------+ //| Check for Pattern 6. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_6(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > FRM(X()) && Close(X() + 1) > FRM(X() + 1) && Close(X() + 2) > FRM(X() + 2) && FRC(X()) > 0.0 && FRC(X() + 1) <= 0.0 && FRC(X() + 2) >= 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < FRM(X()) && Close(X() + 1) < FRM(X() + 1) && Close(X() + 2) < FRM(X() + 2) && FRC(X()) < 0.0 && FRC(X() + 1) >= 0.0 && FRC(X() + 2) <= 0.0) { return(true); } return(false); }
Este patrón también es ideal para entrar en tendencias después de una corrección, ya que FrAMA garantiza la persistencia de la tendencia y el Force Index confirma el volumen. Cuando se utiliza, es importante esperar a que el Force Index se recupere hasta cerca del límite cero antes de tomar cualquier decisión, ya que la tendencia tiende a ser persistente. Los niveles de retroceso de Fibonacci pueden utilizarse para complementar este patrón, donde los retrocesos se alinean con las zonas de retroceso. Las órdenes de stop-loss pueden configurarse en función de los extremos recientes de las oscilaciones o utilizando FrAMA como guía.
Este patrón no debería utilizarse en mercados erráticos o laterales, ya que es más probable que los retrocesos sean señales falsas. Este patrón es uno de los dos únicos que han superado la prueba forward durante un año, tras haberse entrenado solo con el año anterior. Su informe se presenta a continuación:

Todas las pruebas o entrenamientos se realizaron durante un solo año, lo cual, estrictamente hablando, no es suficiente para extraer conclusiones a largo plazo. Esto se aplica especialmente a los otros patrones que no superaron la prueba forward.
Contracción de la volatilidad de FrAMA con expansión del Force Index
Nuestro octavo patrón combina la contracción de la volatilidad de FrAMA con la evolución del Force Index. La señal alcista se produce cuando FrAMA se aplana, lo que se manifiesta en una pendiente baja o un rango de precios estrecho, y el Force Index repunta positivamente desde cerca del límite cero hacia sus niveles de sobrecompra. La señal bajista se produce cuando FrAMA se aplana y el Force Index cae significativamente desde cero hacia el nivel de sobreventa.
El oscilador del Force Index no es como el RSI o el oscilador estocástico, ya que los niveles extremos no están definidos por valores absolutos. Los valores extremos varían de un activo a otro. Esto hace que nuestra definición de regiones de sobrecompra y sobreventa sea un tanto problemática desde el punto de vista de la programación. No obstante, implementamos este patrón en MQL5 de la siguiente manera:
//+------------------------------------------------------------------+ //| Check for Pattern 7. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_7(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && fabs(FRM(X()) - FRM(X() + 5)) <= fabs(Close(X()) - Close(X() + 1)) && FRC(X()) > 0.0 && FRC(X() + 1) < 0.0 && FRC(X()) - FRC(X() + 1) >= 2.0 * fabs(FRC(X() + 1))) { return(true); } else if(T == POSITION_TYPE_SELL && fabs(FRM(X()) - FRM(X() + 5)) >= fabs(Close(X()) - Close(X() + 1)) && FRC(X()) < 0.0 && FRC(X() + 1) > 0.0 && FRC(X()) - FRC(X() + 1) <= -2.0 * fabs(FRC(X() + 1))) { return(true); } return(false); }
El patrón 7 aprovecha los períodos previos de baja volatilidad mediante el uso de FrAMA, seguidos de movimientos expansivos del Force Index. Está diseñado para capturar movimientos explosivos tras la consolidación. El respaldo volumétrico del Force Index desempeña un papel clave en el establecimiento de la fiabilidad. Una contracción de FrAMA seguida de un pico de volumen hace que este patrón sea muy adecuado para operar en rupturas de rango, ya que en este caso FrAMA sirve como identificador de baja volatilidad, mientras que el Force Index confirma la fuerza de la señal.
La planitud de FrAMA también puede medirse considerando su pendiente o comparando sus cambios con otro indicador como el ATR. Los umbrales del Force Index son clave aquí y es necesario encontrar una manera de definirlos, que en nuestro caso consiste en dimensionar la magnitud del movimiento desde el límite cero. La combinación de este patrón con las Bandas de Bollinger o el Canal de Keltner puede ayudar a confirmar la contracción de la volatilidad. Se pueden añadir órdenes de stop-loss en el rango de consolidación. Este patrón tampoco supera la prueba forward, y su informe se presenta a continuación:

Filtro de divergencia del Force Index en la tendencia de FrAMA
El penúltimo patrón considera la fuerza del movimiento de FrAMA y la divergencia del Force Index. Una señal alcista se produce cuando FrAMA muestra una fuerte tendencia alcista con una pendiente pronunciada y el Force Index no muestra divergencia bajista, lo que confirma la tendencia alcista. El patrón bajista es el opuesto, con FrAMA indicando una fuerte tendencia bajista y el Force Index sin mostrar divergencia alcista. La implementación en MQL5 es la siguiente:
//+------------------------------------------------------------------+ //| Check for Pattern 8. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_8(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > Close(X() + 1) && FRC(X()) > FRC(X() + 1) && FRM(X()) - FRM(X() + 1) >= 2.0 * FRM(X() + 1)) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < Close(X() + 1) && FRC(X()) < FRC(X() + 1) && FRM(X()) - FRM(X() + 1) <= -2.0 * FRM(X() + 1)) { return(true); } return(false); }
La clave de este patrón es que el precio esté bastante por encima del FrAMA para una tendencia alcista o por debajo para una tendencia bajista. El uso del FrAMA para evaluar la fuerza de la tendencia, filtrada por el Force Index, debería evitar señales falsas, mejorar la precisión de las operaciones en mercados con tendencia y equilibrar el análisis de tendencias y volumen. Este emparejamiento en el patrón 8 permite a los operadores mantenerse en tendencias fuertes al tiempo que evitan las entradas durante el debilitamiento del impulso, ya que el Force Index actúa como un filtro.
Al implementar esto, el uso de un umbral de tendencia puede afinar aún más las entradas si este umbral se basa, por ejemplo, en la pendiente de FrAMA o en los cambios porcentuales de precio. Se debe tener en cuenta la monitorización del Force Index para detectar divergencias ocultas, el cierre de operaciones si las divergencias persisten en múltiples marcos temporales y la realización de pruebas retrospectivas adecuadas de la configuración de entrada de FrAMA para optimizar la detección de la fuerza de la tendencia. El forward testing del patrón 8 tampoco produce una prueba superada, y su informe se presenta a continuación:

Alineación del Force Index con FrAMA en múltiples marcos temporales
Utilizando los fundamentos de nuestros dos indicadores en dos marcos temporales distintos, obtenemos nuestro emparejamiento final de indicadores, el patrón 9. La señal alcista se produce cuando, para el FrAMA, este sube tanto en el marco temporal inferior como en el superior; y el Force Index también se sitúa simplemente por encima del límite cero en ambos marcos temporales. Hemos implementado esto, con fines de prueba, para usar un marco temporal diario más amplio que complemente nuestro período de prueba base de 4 horas. Para que se produzca una señal bajista, también tendríamos una tendencia bajista en FrAMA tanto en el marco temporal principal como en el marco temporal mayor, mientras que el Force Index también es negativo en ambos marcos temporales. Implementamos esto en MQL5 de la siguiente manera:
//+------------------------------------------------------------------+ //| Check for Pattern 9. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_9(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > Close(X() + 1) && FRC(X()) > FRC(X() + 1) && FRM(X()) > FRM(X() + 1) && FRC(X()) > FRC(X() + 1) && FRM(X()) > FRM(X() + 1)) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < Close(X() + 1) && FRC(X()) < FRC(X() + 1) && FRM(X()) < FRM(X() + 1) && FRC(X()) < FRC(X() + 1) && FRM(X()) < FRM(X() + 1)) { return(true); } return(false); }
La combinación de estas señales básicas de los dos indicadores en dos marcos temporales diferentes se alinea para generar operaciones con alta probabilidad de éxito. El patrón 9 mejora la confluencia al alinear la tendencia y el volumen. Puede ser ideal para el trading a corto y largo plazo. La maximización de la confluencia contribuye a reducir las señales falsas. Las pruebas realizadas durante el año 2024, después de la optimización/entrenamiento durante 2023, nos ofrecen el siguiente informe, que es solo el segundo de los 10 vistos en este artículo que supera la prueba forward.

Lo hemos implementado con un marco temporal diario, pero se pueden considerar marcos temporales aún mayores al realizar pruebas durante períodos que superen un año para mantener la solidez. Además, también puede ser necesario que la evolución del Force Index sea alcista para la señal alcista y bajista para la señal bajista, además de su posicionamiento relativo al límite cero. Además, hemos utilizado un período estándar para el FrAMA, 14; sin embargo, esta cifra se puede personalizar para cada período de tiempo para realizar pruebas exhaustivas.
De los 10 patrones que hemos examinado anteriormente, solo 2 lograron superar la prueba forward. En rigor, entrenar u optimizar cualquier Asesor Experto durante un año nunca es suficiente para garantizar que siga mejorando durante el año siguiente. Las tendencias del mercado de activos pueden persistir durante más de un año para muchos valores negociables, por lo que, para contar con un sistema de negociación más sólido, es importante entrenar u optimizar el Asesor Experto a lo largo de muchos años al buscar configuraciones de entrada equilibradas.
Dicho esto, en artículos anteriores hemos obtenido resultados más prometedores incluso con este breve período de entrenamiento de un año, seguido de pruebas durante el año siguiente. Por lo tanto, nuestros resultados para esta combinación de indicadores podrían tener problemas subyacentes que no permiten prever buenos resultados. A continuación se analizan las razones de ello.
¿Por qué la combinación de FrAMA y Force Index podría ser problemática?
FrAMA, un indicador de seguimiento de tendencias, adapta su suavizado en función de la dimensión fractal de los movimientos de precios. Realiza un seguimiento eficaz de los movimientos de precios con una reducción del retardo. El Force Index, que multiplica las variaciones de precio por el volumen, tiende a reflejar la dinámica de las variaciones de precio, ya que su componente principal es la variación de precio. Esta superposición significa que ambos indicadores están fuertemente influenciados por las tendencias de los precios. Esto puede dar lugar a señales redundantes en lugar de información complementaria.
Esto puede resultar problemático para la previsión, ya que en la previsión de series temporales financieras, la ventaja de usar datos de entrada diversos es que capturan diferentes aspectos del comportamiento del mercado. Estas amplias categorías suelen incluir tendencia, impulso, volatilidad, volumen, etc. Las señales redundantes reducen la información disponible para un modelo de pronóstico, ya que limitan la capacidad de generalizar a través de diversas condiciones de mercado. Por ejemplo, si ambos indicadores señalan una tendencia alcista simultáneamente, pueden estar amplificando el ruido en lugar de proporcionar características únicas.
En lugar de combinar FrAMA con el Force Index, quizás sea mejor considerar combinarlo con otro indicador que capture información ortogonal, como soporte/resistencia o impulso. Podrían ser las Bandas de Bollinger y el RSI, respectivamente. Dichas combinaciones podrían garantizar que el modelo reciba datos de entrada diversos, lo que puede mejorar su capacidad para pronosticar los movimientos de precios.
La fuerte dependencia del Force Index respecto al volumen, donde no podemos usar ni acceder al volumen real y por lo tanto tenemos que conformarnos con el volumen de ticks, podría ser otra debilidad. Este compromiso hace que el Force Index sea menos fiable. Además, existe un desajuste entre retardo y sensibilidad debido a FrAMA. El suavizado adaptativo de FrAMA puede entrar en conflicto con la rápida respuesta del Force Index a los cambios de precio y volumen, lo que puede generar señales contradictorias en períodos de volatilidad.
También se puede argumentar que su capacidad predictiva es limitada, ya que ninguno de los dos indicadores está diseñado intrínsecamente para pronosticar los niveles de precios futuros. Se puede argumentar que son útiles para identificar las tendencias actuales y los niveles de volumen, pero no necesariamente para realizar pronósticos.
Conclusión
En este artículo, hemos analizado otro par de indicadores: FrAMA y el oscilador Force Index. Si bien no son tan "rentables" como algunas de las combinaciones que hemos analizado en artículos anteriores, existen muchos aspectos de nuestro proceso que deben tenerse en cuenta, como siempre, antes de poder extraer conclusiones a largo plazo. Entre ellos, destaca siempre la realización de pruebas con los datos reales del broker previsto, durante varios años, antes de la implementación. En el próximo artículo analizaremos cómo el aprendizaje automático podría mejorar esta combinación de indicadores, si es que lo hace.
| Nombre | Descripción |
|---|---|
| wz-65.mq5 | Archivo ensamblado por el Asistente MQL5 (Wizard MQL5) cuyo encabezado muestra los archivos utilizados. |
| SignalWZ-65.mqh | Archivo de clase de señal. |
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/18144
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.
Estrategia de Evolución de Adaptación de la Matriz de Covarianza — Covariance Matrix Adaptation Evolution Strategy (CMA-ES)
Redes neuronales en el trading: Pipeline inteligente de previsiones (Mezcla dispersa de expertos)
Particularidades del trabajo con números del tipo double en MQL4
Operando con el Calendario Económico MQL5 (Parte 9): Mejorando la interacción con noticias mediante una barra dinámica y un diseño pulido
- 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