Cuando trabajas con un Asesor Experto (EA) en MetaTrader 5, cada vez que recibes una nueva cotización (o "tick"), se activa la función estándar OnTick() por parte del terminal. Sin embargo, no existe una función de manejo de eventos estándar para detectar el inicio de una nueva barra.
Para poder identificar cuándo se inicia una nueva barra, es necesario monitorear el tiempo de apertura de la barra más reciente. Cuando este tiempo cambia, esto indica el inicio de una nueva barra, lo que te permite reaccionar y manejar la situación. A continuación, te muestro un ejemplo de código, compatible tanto con MQL4 como con MQL5, que ilustra cómo lograr esto:
// Manejador de eventos de ticks estándar void OnTick() { // Verifica si hay una nueva barra (compatible con MQL4 y MQL5). static datetime dtBarraCorrente = WRONG_VALUE; datetime dtBarraPrecedente = dtBarraCorrente; dtBarraCorrente = iTime( _Symbol, _Period, 0 ); bool bEventoBarraNova = ( dtBarraCorrente != dtBarraPrecedente ); // Reacciona al evento de una nueva barra y maneja la situación. if( bEventoBarraNova ) { // Detecta si este es el primer tick recibido y maneja la situación. /* Por ejemplo, cuando se aplica por primera vez al gráfico y la barra está en medio de su progreso y no es realmente el inicio de una nueva barra. */ if( dtBarraPrecedente == WRONG_VALUE ) { // Realiza alguna acción en el primer tick o en medio de una barra ... } else { // Realiza alguna acción cuando aparece una barra normal ... }; // Realiza algo independiente de la condición anterior ... } else { // Realiza algo diferente ... }; // Realiza otras acciones ... };
En el código anterior, la variable estática mantiene un registro del tiempo de apertura de la barra, incluso cuando se retorna de la función OnTick(). A diferencia de una variable local normal, memoriza su contenido y no lo libera al salir de la función. Este es el secreto para detectar un cambio en el tiempo de apertura de la barra actual.
También es importante señalar que cuando el EA se coloca en un gráfico por primera vez, el código reacciona como si la barra acabara de abrirse. Esta condición requiere un tratamiento especial si es necesario manejar la situación de manera diferente.
Por último, recuerda que el código fuente de todas mis publicaciones en CodeBase también está disponible a través de MetaEditor en "Proyectos Públicos" bajo el nombre "FMIC".
Publicaciones relacionadas
- Señales de Trading con MQL5: Patrones de Estrellas y MFI
- Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Dark Cloud Cover y Piercing Line
- MQL5 Wizard: Crea un Asesor Experto con Señales de Bullish Harami y Bearish Harami + CCI
- MQL5 Wizard: Crea EAs con Señales de Trading basadas en Dark Cloud Cover y Piercing Line
- Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Estrellas de la Mañana/Atardecer y CCI