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í:
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:
| Campo | Defecto | Rango | Qué hace |
|---|---|---|---|
| Length | 10 | 2-100 | Cuántas velas atrás se hace la comparación |
| Source | Close | Close / Open / High / Low | Qué precio usa el cálculo |
| Smoothing | None | None / SMA / EMA / WMA / SMMA / VWMA | Media opcional aplicada a la línea de ROC |
| Smoothing Length | 10 | 1-100 | Periodo de esa media |
| Offset | 0 | -50 a 50 | Desplaza 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
>, Value0 - Condición de venta: tipo compare, Operator
<, Value0
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:
- Exige distancia respecto a cero, no solo signo. Cambia a la condición breakout con Threshold
0.5y Confirmation2. Entras más tarde y menos veces, y evitas el racimo de señales que vive sobre la línea cero. - 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".
- 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:
- Guía del indicador Momentum — el hermano no normalizado de ROC
- EA de confluencia MACD + RSI — cómo combinar dos osciladores bien
- ADX como filtro de tendencia — el arreglo más limpio para el whipsaw de osciladores
- Crea tu primer EA — si algún paso anterior te resultó nuevo
¿Quieres la misma idea para TradingView? Los mismos seis pasos producen Pine Script v6 desde Code Generator.

