EA de momentum ROC en MT5 sin código

Crea un EA de momentum con Rate of Change: Length 10, Source Close, suavizado EMA, comparación contra cero, los cinco tipos de condición, exporta MQL5 y haz backtest.

📖 9 min read

📝 1,630 words

🏷️ MQL5 and Expert Advisors

Compartir este artículo:

EA de momentum con ROC para MT5 sin código

El indicador Rate of Change responde a una sola pregunta: ¿el precio está por encima o por debajo de donde estaba hace N velas, y en qué porcentaje? Eso lo convierte en una de las reglas de momentum más simples que puedes transformar en un Expert Advisor, y también en una de las más fáciles de hacer mal, porque la versión obvia de la regla opera demasiado.

Esta guía construye un EA de ROC en Strategy Builder con el formulario real de ROC, exporta MQL5 y después explica por qué la versión ingenua genera whipsaw y qué añadir para evitarlo.

Si necesitas la teoría primero: guía del indicador ROC.

¿Puedo crear un EA de ROC para MT5 sin programar?

Sí. ROC es un indicador registrado en Strategy Builder con sus propios formularios de parámetros y condiciones. Lo añades en el Paso 3, eliges un tipo de condición, revisas el JSON de la estrategia en el Paso 6 y exportas MQL5 desde Code Generator. No abres MetaEditor para escribir lógica.


Tactix AI en este flujo

AlfaTactix incluye Tactix AI: usa Tactix Studio para describir tu idea en lenguaje natural y rellenar timeframes, señales, filtros y riesgo en el mismo formulario de seis pasos — o abre Tactix Guide en cualquier paso si solo necesitas explicar un campo. Revisa cada valor y luego exporta MQL5 o Pine Script desde Code Generator (form-first — no prompt-to-code sin probar).

Qué dice realmente la línea cero del ROC

ROC se calcula así:

text
ROC = ((Close[0] - Close[N]) / Close[N]) * 100

Con Length 10 en H1, un ROC de +0.8 significa que el precio está 0.8% por encima de donde estaba hace diez horas. Tres consecuencias importan para un EA:

  • Cero es el único nivel fijo con significado. Por encima de cero el precio es mayor que hace N velas; por debajo, menor. A diferencia del RSI no hay un 70/30 natural: ROC no tiene rango acotado, así que "sobrecompra" depende del símbolo.
  • Está normalizado, así que se traslada. Como la salida es un porcentaje, un umbral de ROC significa aproximadamente lo mismo en EURUSD a 1.08 que en XAUUSD a 2400. Momentum, que devuelve diferencia de precio en bruto, no tiene esa propiedad.
  • No dice nada sobre la dirección de la tendencia, solo sobre el cambio. ROC puede ser positivo mientras el precio está en una tendencia bajista amplia, si las últimas N velas fueron alcistas.

Ese último punto es la razón de que un EA de cruce de cero puro decepcione, y volvemos a él más abajo.

Parámetros de ROC en Strategy Builder

El formulario de ROC expone exactamente estos campos:

CampoDefectoRangoQué hace
Length102-100Cuántas velas atrás se hace la comparación
SourceCloseClose / Open / High / LowQué precio usa el cálculo
SmoothingNoneNone / SMA / EMA / WMA / SMMA / VWMAMedia opcional aplicada a la línea de ROC
Smoothing Length101-100Periodo de esa media
Offset0-50 a 50Desplaza la línea; déjalo en 0 para señales

Dos notas que ahorran reconstruir después:

Deja Source en Close. Usar High o Low hace que la lectura dependa de los extremos de las mechas, lo que añade ruido y dificulta reproducir el backtest.

Smoothing es el arreglo discreto contra el exceso de operaciones. Poner Smoothing en EMA con Smoothing Length 5 elimina buena parte de los parpadeos alrededor de cero sin retrasar las entradas tanto como un Length mayor. En la exportación no cuesta nada.

Deja Offset en 0. Un offset distinto de cero desplaza la línea para comparación visual y desalineará tu señal respecto a la vela que la generó.

Tipos de condición de ROC

ROC admite cinco tipos de condición. No son intercambiables, y elegir bien es la decisión principal de esta construcción:

compare — Operator (>, <, >=, <=, ==, !=) y un Value. Es la regla del cruce de cero: ROC > 0 para compra, ROC < 0 para venta. La más simple, y la que más señales da.

breakout — Direction (Up / Down), Threshold, Period, Confirmation. Se activa cuando ROC atraviesa un umbral, no cuando simplemente está del lado correcto. Confirmation es el campo útil: con valor 2 exige que la condición se mantenga dos velas antes de contar como señal.

slope — Direction, Period, Min Slope, más su propio Smoothing y Source. Pregunta si ROC está subiendo, no si es positivo. Un momentum que acelera de -1.5 a -0.5 sigue siendo negativo, y slope lo detecta cuando compare no.

divergence — Divergence Type (Bullish / Bearish), Period, Lookback Period, Strength, Timeframe. El precio marca un nuevo mínimo y ROC no. Potente y más difícil de probar con honestidad; trátalo como una segunda iteración, no como tu primer EA.

pattern — detección de patrones chartistas (doble techo/suelo, hombro-cabeza-hombro, triángulo, cuña). Está disponible, pero una condición de patrón sobre un oscilador de momentum es una combinación inusual; sáltala mientras aprendes la herramienta.

Para una primera construcción usa compare. Es la regla que la mayoría entiende por "EA de ROC", y sus debilidades enseñan.

Construir el EA de ROC paso a paso

Paso 1 — Información de la estrategia. Nombre: ROC Momentum H1 EURUSD. Ponle un nombre que reconozcas después de diez variantes; el informe del Strategy Tester solo muestra el nombre.

Paso 2 — Temporalidades. H1 para una primera construcción. ROC en M1 o M5 produce un número de señales dominado por el spread más que por el momentum.

Paso 3 — Señales de entrada. Añade ROC. Parámetros: Length 10, Source Close, Smoothing EMA, Smoothing Length 5, Offset 0.

  • Condición de compra: tipo compare, Operator >, Value 0
  • Condición de venta: tipo compare, Operator <, Value 0

Paso 4 — Filtros de mercado. Añade un filtro de spread. Las entradas de momentum se agrupan justo en los momentos en que el spread se amplía, y un EA que lo ignore mostrará un backtest que el mercado real no reproduce. Un filtro de sesión también ayuda: ver filtros de mercado.

Paso 5 — Gestión de riesgo. Tamaño por fracción fija, un stop y un objetivo. Un stop basado en ATR encaja mejor con ROC que un stop de pips fijo, porque las señales de ROC llegan tanto en calma como en volatilidad; ver ATR y gestión de riesgo del EA.

Paso 6 — Resumen. Lee el JSON. Confirma que la condición de compra dice operator > contra value 0 y la de venta <. Aquí una condición mal puesta es barata de corregir; después de exportar, no.

Exportar, compilar y hacer backtest

Abre Code Generator, elige MQL5, exporta y coloca el archivo .mq5 en MQL5/Experts. Compila en MetaEditor (F7) — el código generado es MQL5 estándar y debería compilar sin ediciones. Si no, revisa errores comunes de EA en MQL5.

En el Strategy Tester usa modelado Every tick en la primera pasada. "Open prices only" hará que casi cualquier EA de momentum parezca mejor de lo que es, porque oculta el recorrido intravela. Guía completa: backtest de un EA en el Strategy Tester de MT5.

Espera muchas operaciones y una curva de capital poco impresionante. Ese es el resultado correcto para esta configuración, y la siguiente sección explica por qué.

Por qué un cruce de cero simple genera whipsaw

ROC oscila alrededor de cero, y en un mercado lateral cruza cero repetidamente sin que el precio vaya a ninguna parte. Cada cruce es una señal, cada señal paga spread, y la estrategia paga el spread mucho más a menudo de lo que captura un movimiento.

El fallo concreto es que la frecuencia de cruces de cero es máxima justo cuando el tamaño del movimiento es mínimo. En una tendencia fuerte ROC permanece en un lado mucho tiempo y da pocas señales; en un rango cruza constantemente. Así que la regla opera más intensamente en las condiciones que menos pueden pagarlo.

Tres formas de corregirlo, en orden de cuánto suelen ayudar:

  1. Exige distancia respecto a cero, no solo signo. Cambia a la condición breakout con Threshold 0.5 y Confirmation 2. Entras más tarde y menos veces, y evitas el racimo de señales que vive sobre la línea cero.
  2. Añade un filtro de tendencia para que ROC solo opere con el movimiento mayor. Añade una EMA en el Paso 3 y acepta compras solo mientras el precio esté por encima. Esto corrige directamente el problema de "ROC positivo dentro de una tendencia bajista".
  3. Usa slope en lugar de nivel. La condición slope con Direction Up pregunta si el momentum está creciendo, lo que se activa antes en un giro y depende menos de la línea cero.

Prueba estas opciones una a una. Cambiar tres cosas a la vez y ver una curva mejor no te dice cuál de ellas lo consiguió.

Filtros y controles de riesgo

Las reglas de momentum son especialmente sensibles al coste de ejecución, así que aquí los filtros pesan más que en una estrategia lenta:

  • Spread — imprescindible en esta estrategia, como se ha dicho.
  • Sesión — ROC en FX se comporta distinto en la sesión de Londres y en la asiática; restringir a una hace los resultados mucho más interpretables. Ver filtros de tiempo y sesión.
  • Régimen de volatilidad — una condición de ATR mantiene al EA fuera de mercados muertos donde la línea cero se cruza solo por ruido.
  • Noticias — las entradas de momentum y los datos programados se solapan mal; ver filtro de noticias.

Sobre el riesgo: dimensiona por porcentaje de cuenta en lugar de lotes fijos, y deja que el stop venga del ATR y no de un número redondo de pips. Una estrategia con muchas operaciones pequeñas está dominada por el coste y el tamaño, no por la calidad de la señal.

Próximos pasos

Ejecuta primero la versión compare simple para tener una referencia, y añade después un filtro cada vez comparando en el Strategy Tester. Construcciones relacionadas que conviene leer:

¿Quieres la misma idea para TradingView? Los mismos seis pasos producen Pine Script v6 desde Code Generator.

Preguntas Frecuentes

Sí. Añade ROC en el Paso 3 de Strategy Builder, usa la condición compare con Operator > y Value 0 para compra y Operator < con Value 0 para venta, define Length 10 y Source Close, y exporta MQL5 desde Code Generator para probarlo en el Strategy Tester de MT5 con Every tick.

Length 10 es el valor por defecto del builder y el más habitual. Longitudes cortas (5-9) reaccionan antes y generan más señales, también más falsas; longitudes largas (14-21) llegan tarde pero aguantan mejor el ruido. Elige el valor en el Strategy Tester con tu símbolo y temporalidad, no copiando un número.

Miden lo mismo de forma distinta. Momentum es la diferencia de precio en N velas; ROC expresa esa diferencia como porcentaje del precio anterior. Al estar normalizado, ROC es comparable entre símbolos y entre niveles de precio, por lo que se traslada mejor entre instrumentos.

Cero es la línea neutra: por encima, el precio es mayor que hace N velas. Exigir un umbral alejado de cero (por ejemplo la condición breakout con Threshold 0.5) filtra las pequeñas oscilaciones alrededor de cero que causan la mayoría de las entradas falsas, a cambio de entrar más tarde.

Code Generator emite MQL5 estándar, así que el buffer de ROC se obtiene con iCustom o con un cálculo en línea según la configuración, y se lee con CopyBuffer en la vela cerrada anterior. No escribes ni editas ese código: revisas el JSON en el Paso 6 y exportas.

Sí, y normalmente es la diferencia entre un EA solo para demo y uno que merece pruebas. Añade una media móvil en el Paso 3 y acepta compras de ROC solo mientras el precio esté por encima, o usa los filtros de mercado del Paso 4 para sesión y spread. Mira la sección de filtros.

Continúa aprendiendo

EA tendencia ADX MT5 sin codigo