OnTick vs OnTimer en MQL5: cuándo usar cada uno en un EA
Contenido
Conclusión: decidir con la vela nueva y dejar lo horario para OnTimer
Primero la conclusión. Si el EA decide sus operaciones en temporalidades largas como H1 o H4, basta con tomar la decisión solo en el primer tick de la vela nueva. Repetir el mismo cálculo en cada tick solo gasta CPU y no cambia la decisión. En cambio, para lo que debe ejecutarse aunque no lleguen ticks, se usa OnTimer: por ejemplo, volcar el estado el fin de semana u ordenar las órdenes a una hora determinada.
Eso sí, cuál es la opción correcta depende de la estrategia. En este artículo repasamos las diferencias entre ambos mecanismos y los puntos que puede verificar quien elige un EA.
Comparación de brókers recomendados →
🎁 Descargar EA gratis📧 Curso gratuito por email (8 correos) + paquete de 13 indicadores MT5 solo para suscriptores
Nada más suscribirte recibirás un enlace de descarga a un paquete exclusivo con nuestros 13 indicadores MT5: archivos compilados (.ex5), código fuente y una guía de instalación. Después, 8 correos sobre los fundamentos del trading algorítmico, cómo leer correctamente un backtest y cómo elegir bróker (uno al día durante los primeros 5 días y luego a los 7, 14 y 30 días de la suscripción). También te avisaremos antes de cada subida de precio de las versiones vendidas en MQL5 Market (precio de lanzamiento que sube por tramos según las ventas). En este sitio nuestros EA son gratuitos con una cuenta real en un bróker asociado.
* Privacidad estrictamente protegida. Puedes darte de baja en cualquier momento.
Cómo funcionan: por ticks y por tiempo
OnTick (por ticks)
OnTick se llama cada vez que llega un precio nuevo (un tick) al símbolo donde corre el EA. En las horas de mucho movimiento puede ejecutarse varias veces por segundo, y durante el fin de semana, con el mercado parado, no se llama ni una vez.
Hay una particularidad que conviene conocer: los ticks que llegan mientras el OnTick anterior aún no ha terminado no se ponen en cola, sino que se descartan. Es decir, un EA con un procesamiento pesado pierde ticks justo durante los movimientos bruscos.
OnTimer (por tiempo)
OnTimer se llama en el intervalo fijado con EventSetTimer(). Como no depende del movimiento del precio, también se ejecuta con el mercado cerrado. Solo hay un temporizador por EA y, si el procesamiento se atasca, los eventos se descartan igual que en OnTick. Además, no hay garantía de que se llame exactamente en el intervalo indicado.
| Aspecto | OnTick | OnTimer |
|---|---|---|
| Qué lo dispara | Actualización del precio | Paso de un intervalo de tiempo |
| Con el mercado cerrado | No se llama | Se llama |
| Número de llamadas | Más cuanto más agitado el mercado | Prácticamente constante |
| Para qué sirve | Decisiones de entrada y salida | Cálculos periódicos y tareas ligadas a una hora |
| Precaución principal | Un procesamiento pesado pierde ticks | Se ejecuta aunque no haya precios nuevos |
Cómo escribir estrategias de baja frecuencia sin malgastar CPU
En una estrategia que decide en H4, aunque OnTick se llame miles de veces durante las 4 horas que dura una vela, el valor de la vela cerrada que se usa para decidir no cambia. Por eso nuestra forma habitual de trabajar es dejar pasar el procesamiento pesado solo cuando cambia la vela:
datetime g_lastBar = 0;
void OnTick()
{
datetime cur = iTime(_Symbol, PERIOD_H4, 0);
if(cur == g_lastBar) return; // no hacer nada mientras sea la misma vela
g_lastBar = cur;
// aquí se decide usando la vela cerrada (shift 1)
}
También es importante crear los handles de los indicadores una sola vez en OnInit y no recrearlos en cada llamada a OnTick. Si usas OnTimer, detén el temporizador llamando a EventKillTimer() en OnDeinit.
Cuando se instalan EAs en varios gráficos de un VPS, estas diferencias se notan en la carga de CPU. Nuestro enfoque para elegir un VPS está en Información sobre VPS.
Qué puede comprobar quien elige un EA
Aunque no puedas ver el código, sí puedes verificar hasta cierto punto lo siguiente:
- Descripción y parámetros: si hay opciones del tipo "decidir solo en vela nueva".
- Uso de CPU del VPS: si al quitar un EA la carga baja claramente, es posible que esté haciendo un procesamiento pesado en cada tick.
- Registro de expertos: que no aparezcan mensajes idénticos repetidos en cada tick.
- Resultados del probador: si el EA decide con la apertura de la vela, los resultados con "solo precios de apertura" y con "todos los ticks" no deberían diferir mucho. Si se separan bastante, el EA también reacciona al movimiento dentro de la vela.
Para lo básico sobre cómo instalar y configurar un EA, consulta Cómo configurar un EA.
Límites y advertencias
También conviene mencionar lo que no juega a favor.
- No se vigila el riesgo dentro de la vela: si limitas las decisiones a la vela nueva, el EA no reacciona a cambios bruscos a mitad de vela. Si el stop loss no se protege con una orden stop adjunta a la posición, se pueden aceptar pérdidas inesperadas.
- Desfase de la vela nueva: aunque se haya formado una vela nueva, el procesamiento no arranca hasta que llega el primer tick de esa vela. En símbolos u horarios con poco movimiento, la decisión puede retrasarse respecto al inicio de la vela.
- OnTimer tiende a diferir entre el probador y la operativa real: en el probador el temporizador se llama con una hora virtual, por lo que el intervalo no tiene por qué coincidir con el de una cuenta real.
- Un procesamiento ligero no mejora los resultados: bajar la carga de CPU no hace que el EA gane más. La calidad de la estrategia es otra cuestión.
En EAs de H4 con pocas operaciones, como ETHEREUM EA, estas diferencias de diseño son aún más difíciles de apreciar. Aun así, lo que se puede comprobar desde fuera tiene un límite. Lo único que podemos afirmar con seguridad es lo que se refiere al código que hemos escrito nosotros.
Resumen
- OnTick se llama cuando llega un precio; OnTimer, cada cierto intervalo.
- Los eventos que llegan durante un procesamiento no se encolan, se descartan. Un procesamiento pesado provoca pérdida de eventos.
- En estrategias de baja frecuencia, decidir solo con la vela nueva evita malgastar CPU.
- Para lo que debe ejecutarse en horas sin ticks, usa OnTimer.
- El riesgo dentro de la vela se cubre con órdenes stop. Un procesamiento ligero no mejora los resultados.
- Más trucos en Conocimientos sobre EA y MT5.
Relacionado
2026-07-07
«Invalid Stops» en MT5 (10016 / error 130): 6 causas y su solución
2026-07-07
AutoTrading desactivado en MT5 (10027 / 10026): 4 interruptores a revisar
2026-07-07
Error 10030 de MT5 «Unsupported Filling Mode»: ajusta el FOK/IOC del símbolo
2026-07-07
«Market Closed» en MT5 (10018 / 132) entre semana: causas y solución
📧 Curso gratuito por email (8 correos) + paquete de 13 indicadores MT5 solo para suscriptores
Nada más suscribirte recibirás un enlace de descarga a un paquete exclusivo con nuestros 13 indicadores MT5: archivos compilados (.ex5), código fuente y una guía de instalación. Después, 8 correos sobre los fundamentos del trading algorítmico, cómo leer correctamente un backtest y cómo elegir bróker (uno al día durante los primeros 5 días y luego a los 7, 14 y 30 días de la suscripción). También te avisaremos antes de cada subida de precio de las versiones vendidas en MQL5 Market (precio de lanzamiento que sube por tramos según las ventas). En este sitio nuestros EA son gratuitos con una cuenta real en un bróker asociado.
* Privacidad estrictamente protegida. Puedes darte de baja en cualquier momento.
¿Tienes alguna pregunta sobre EAs o Forex?
Puedes publicarla en el foro de trading de Nattzy (registro gratuito). También son bienvenidas preguntas que vayan más allá de este artículo: configuración de EAs, elección de bróker y más.
Preguntar en Nattzy ↗