EventChartCustom

Genera un evento personalizado para el gráfico especificado.

bool  EventChartCustom(
   long    chart_id,            // identificador del gráfico que recibe el evento
   ushort  custom_event_id,     // identificador del evento
   long    lparam,              // parámetro del tipo long
   double  dparam,              // parámetro del tipo double
   string  sparam               // parámetro literal del evento
   );

Parámetros

chart_id

[in]  identificador del gráfico. 0 significa el gráfico actual.

custom_event_id

[in]  Identificador del evento personalizado. Este identificador se añade automáticamente al valor CHARTEVENT_CUSTOM y se convierte al tipo entero.

lparam

[in]  Parámetro del evento del tipo long que se pasa a la función OnChartEvent.

dparam

[in]  Parámetro del evento del tipo double que se pasa a la función OnChartEvent.

sparam

[in]  Parámetro del evento del tipo string que se pasa a la función OnChartEvent. Si la cadena tiene más de 63 caracteres, esta cadena se recorta.

Valor devuelto

Devuelve true si un evento personalizado ha sido colocado con éxito a la cola de los eventos del gráfico-receptor del evento. En caso del error, devuelve false. Para obtener el código del error, utilice la función GetLastError().

Nota

El Asesor Experto o indicador que está adjuntado al gráfico procesa este evento utilizando la función OnChartEvent(int event_id, long& lparam, double& dparam, string& sparam).

Para cada tipo del evento, los parámetros de entrada de la función OnChartEvent() tienen determinados valores que son necesarios para procesar este evento. En la tabla de abajo están especificados los eventos y valores que se pasan a través de los parámetros.

Evento

Valor del parámetro id

Valor del parámetro lparam

Valor del parámetro dparam

Valor del parámetro sparam

Evento de un teclazo

CHARTEVENT_KEYDOWN

código de la tecla pulsada

Número de pulsaciones de la tecla generadas mientras ésta se mantenía en estado pulsado

Valor literal de la máscara de bits que describe el estatus de las teclas del teclado

Eventos del ratón (si para el gráfico está establecida la propiedad CHART_EVENT_MOUSE_MOVE=true)

CHARTEVENT_MOUSE_MOVE

coordinada X

coordinada Y

Valor literal de la máscara de bits que describe el estatus de los botones del ratón

Evento de creación de un objeto gráfico (si para el gráfico está establecida la propiedad CHART_EVENT_OBJECT_CREATE=true)

CHARTEVENT_OBJECT_CREATE

Nombre del objeto gráfico creado

Evento del cambio de propiedades de un objeto a través del diálogo de propiedades

CHARTEVENT_OBJECT_CHANGE

Nombre del objeto gráfico modificado

Evento de eliminación de un objeto gráfico (si para el gráfico está establecida la propiedad CHART_EVENT_OBJECT_DELETE=true)

CHARTEVENT_OBJECT_DELETE

Nombre del objeto gráfico eliminado

Evento de cliquear sobre un gráfico

CHARTEVENT_CLICK

coordinada X

coordinada Y

Evento de cliquear sobre un objeto gráfico

CHARTEVENT_OBJECT_CLICK

coordinada X

coordinada Y

Nombre del objeto gráfico en el que ha ocurrido el evento

Evento de mover un objeto gráfico con el ratón

CHARTEVENT_OBJECT_DRAG

Nombre del objeto gráfico desplazado

Evento del fin de edición del texto en el campo de introducción del objeto gráfico "Campo de texto"

CHARTEVENT_OBJECT_ENDEDIT

Nombre del objeto gráfico "Campo de texto" donde ha finalizado la introducción del texto

Evento de modificación del gráfico

CHARTEVENT_CHART_CHANGE

Identificador del evento de usuario

CHARTEVENT_CUSTOM+N

Valor determinado por la función EventChartCustom()

Valor determinado por la función EventChartCustom()

Valor determinado por la función EventChartCustom()

Ejemplo:

//+------------------------------------------------------------------+
//|                                            ButtonClickExpert.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
string buttonID="Button";
string labelID="Info";
int broadcastEventID=5000;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- creamos un botón para pasar los eventos de usuario
   ObjectCreate(0,buttonID,OBJ_BUTTON,0,100,100);
   ObjectSetInteger(0,buttonID,OBJPROP_COLOR,clrWhite);
   ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,clrGray);
   ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,100);
   ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,200);
   ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,50);
   ObjectSetString(0,buttonID,OBJPROP_FONT,"Arial");
   ObjectSetString(0,buttonID,OBJPROP_TEXT,"Botón");
   ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,10);
   ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
 
//--- creamos una etiqueta para visualizar la información
   ObjectCreate(0,labelID,OBJ_LABEL,0,100,100);
   ObjectSetInteger(0,labelID,OBJPROP_COLOR,clrRed);
   ObjectSetInteger(0,labelID,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,labelID,OBJPROP_YDISTANCE,50);
   ObjectSetString(0,labelID,OBJPROP_FONT,"Trebuchet MS");
   ObjectSetString(0,labelID,OBJPROP_TEXT,"No hay información");
   ObjectSetInteger(0,labelID,OBJPROP_FONTSIZE,20);
   ObjectSetInteger(0,labelID,OBJPROP_SELECTABLE,0);
 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(0,buttonID);
   ObjectDelete(0,labelID);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- comprobamos el evento de apretar el botón del ratón
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      string clickedChartObject=sparam;
      //--- si hacemos clic en el objeto con el nombre buttonID
      if(clickedChartObject==buttonID)
        {
         //--- estado del botón - está apretado o no
         bool selected=ObjectGetInteger(0,buttonID,OBJPROP_STATE);
         //--- registramos el mensaje de la depuración
         Print("Botón apretado = ",selected);
         int customEventID; // número del evento de usuario a enviar
         string message;    // mensaje a enviar en el evento
         //--- si el botón está apretado
         if(selected)
           {
            message="Botón apretado";
            customEventID=CHARTEVENT_CUSTOM+1;
           }
         else // botón no está apretado
           {
            message="Botón suelto";
            customEventID=CHARTEVENT_CUSTOM+999;
           }
         //--- enviamos un evento de usuario a "nuestro" gráfico
         EventChartCustom(0,customEventID-CHARTEVENT_CUSTOM,0,0,message);
         //--- enviamos el mensaje a todos los gráficos abiertos
         BroadcastEvent(ChartID(),0,"Broadcast Message");
         //--- mensaje de reparación de errores
         Print("Evento enviado con ID = ",customEventID);
        }
      ChartRedraw();// volvemos a dibujar por vía forzada todos los objetos del gráfico
     }
 
//--- comprobamos un evento a su pertenencia a eventos de usuario
   if(id>CHARTEVENT_CUSTOM)
     {
      if(id==broadcastEventID)
        {
         Print("Recibido el mensaje de difusión del gráfico con id = "+lparam);
        }
      else
        {
         //--- vamos a leer un mensaje de texto en el evento
         string info=sparam;
         Print("Se procesa el evento de USUARIO con ID = ",id);
         //--- mostramos el mensaje en una etiqueta
         ObjectSetString(0,labelID,OBJPROP_TEXT,sparam);
         ChartRedraw();// volvemos a dibujar por vía forzada todos los objetos del gráfico
        }
     }
  }
//+------------------------------------------------------------------+
//| enviar un mensaje de difusión a todos los gráficos abiertos      |
//+------------------------------------------------------------------+
void BroadcastEvent(long lparam,double dparam,string sparam)
  {
   int eventID=broadcastEventID-CHARTEVENT_CUSTOM;
   long currChart=ChartFirst();
   int i=0;
   while(i<CHARTS_MAX)          // seguramente tenemos no más de CHARTS_MAX de gráficos abiertos
     {
      EventChartCustom(currChart,eventID,lparam,dparam,sparam);
      currChart=ChartNext(currChart); // a base del anterior obtenemos un gráfico nuevo
      if(currChart==-1) break;        // llegamos al final de la lista de gráficos
      i++;                            // No olvidemos a aumentar el contador 
     }
  }
//+------------------------------------------------------------------+

Véase también

Eventos de terminal de cliente, Funciones de procesamiento de eventos