Función de gestión de eventos OnChartEvent

Un indicador o Asesor Experto puede recibir eventos interactivos desde el terminal si el código contiene la función OnChartEvent con el siguiente prototipo.

void OnChartEvent(const int event, const long &lparam, const double &dparam, const string &sparam)

Esta función será llamada por el terminal en respuesta a las acciones del usuario o en caso de generar un «evento de usuario» utilizando EventChartCustom.

En el parámetro event, el identificador del evento (su tipo) se pasa como uno de los valores de la enumeración ENUM_CHART_EVENT (véase la tabla).

Identificador

Descripción

CHARTEVENT_KEYDOWN

Acción del teclado

CHARTEVENT_MOUSE_MOVE

Mover el ratón y hacer clic en los botones del ratón (si la propiedad CHART_EVENT_MOUSE_MOVE está establecida para el gráfico)

CHARTEVENT_MOUSE_WHEEL

Hacer clic o desplazar la rueda del ratón (si la propiedad CHART_EVENT_MOUSE_WHEEL está establecida para el gráfico)

CHARTEVENT_CLICK

Clic con el ratón en el gráfico

CHARTEVENT_OBJECT_CREATE

Crear un objeto gráfico (si la propiedad CHART_EVENT_OBJECT_CREATE está establecida para el gráfico)

CHARTEVENT_OBJECT_CHANGE

Modificar un objeto gráfico a través del cuadro de diálogo de propiedades

CHARTEVENT_OBJECT_DELETE

Eliminar un objeto gráfico (si la propiedad CHART_EVENT_OBJECT_DELETE está establecida para el gráfico)

CHARTEVENT_OBJECT_CLICK

Clic con el ratón sobre un objeto gráfico

CHARTEVENT_OBJECT_DRAG

Arrastrar un objeto gráfico

CHARTEVENT_OBJECT_ENDEDIT

Finalizar la edición de texto en el objeto gráfico «campo de entrada»

CHARTEVENT_CHART_CHANGE

Modificar las dimensiones o propiedades del gráfico (mediante el cuadro de diálogo de propiedades, la barra de herramientas o el menú contextual)

CHARTEVENT_CUSTOM

El número inicial del evento del rango de eventos personalizados

CHARTEVENT_CUSTOM_LAST

El número final del evento del rango de eventos personalizados

Los parámetros lparam, dparam y sparam se utilizan de forma diferente en función del tipo de evento. En general, podemos decir que contienen datos adicionales necesarios para procesar un evento concreto. En las secciones siguientes se ofrece información detallada sobre cada tipo.

¡Atención! La función OnChartEvent sólo se utiliza para los indicadores y Asesores Expertos que se representan directamente en el gráfico. Si cualquier indicador se crea mediante programación utilizando iCustom o IndicatorCreate, los eventos de OnChartEvent no se trasladarán a él.
 
Además, el manejador OnChartEvent no se llama en el probador, ni siquiera en modo visual.

Para la primera demostración del manejador OnChartEvent, consideremos un indicador sin búfer EventAll.mq5 que intercepta y registra todos los eventos.

void OnChartEvent(const int id,
   const long &lparamconst double &dparamconst string &sparam)
{
   ENUM_CHART_EVENT evt = (ENUM_CHART_EVENT)id;
   PrintFormat("%s %lld %f '%s'"EnumToString(evt), lparamdparamsparam);
}

De manera predeterminada, se pueden generar todo tipo de eventos en el gráfico, excepto cuatro eventos masivos que, como se indica en la tabla anterior, están habilitados por las propiedades especiales del gráfico. En la próxima sección complementaremos el indicador con ajustes para incluir determinados tipos según las preferencias.

Ejecute el indicador en un gráfico con objetos existentes o cree objetos mientras se ejecuta el indicador.

Cambie el tamaño o la configuración del gráfico, haga clic con el ratón y edite las propiedades de los objetos. En el registro aparecerán las siguientes entradas:

CHARTEVENT_CHART_CHANGE 0 0.000000 ''
CHARTEVENT_CLICK 149 144.000000 ''
CHARTEVENT_OBJECT_CLICK 112 105.000000 'Daily Rectangle 53404'
CHARTEVENT_CLICK 112 105.000000 ''
CHARTEVENT_KEYDOWN 46 1.000000 '339'
CHARTEVENT_CLICK 13 252.000000 ''
CHARTEVENT_OBJECT_DRAG 0 0.000000 'Daily Button 61349'
CHARTEVENT_OBJECT_CLICK 145 104.000000 'Daily Button 61349'
CHARTEVENT_CLICK 145 104.000000 ''
CHARTEVENT_CHART_CHANGE 0 0.000000 ''
CHARTEVENT_OBJECT_DRAG 0 0.000000 'Daily Vertical Line 22641'
CHARTEVENT_OBJECT_DRAG 0 0.000000 'Daily Vertical Line 22641'
CHARTEVENT_OBJECT_CLICK 177 206.000000 'Daily Vertical Line 22641'
CHARTEVENT_CLICK 177 206.000000 ''
CHARTEVENT_OBJECT_CHANGE 0 0.000000 'Daily Rectangle 37930'
CHARTEVENT_CHART_CHANGE 0 0.000000 ''
CHARTEVENT_CLICK 152 118.000000 ''

Aquí vemos eventos de varios tipos, el significado de sus parámetros quedará claro después de leer las siguientes secciones.