Propiedades principales de los objetos

Todos los objetos tienen algunos atributos universales. Los principales se enumeran en el cuadro siguiente. Más adelante veremos otras propiedades generales de uso especial (véanse las secciones Gestión del estado de los objetos, Orden Z y Visibilidad de los objetos en el contexto de marcos temporales).

Identificador

Descripción

Tipo

OBJPROP_NAME

Nombre del objeto

string

OBJPROP_TYPE

Tipo de objeto (r/o)

ENUM_OBJECT

OBJPROP_CREATETIME

Hora de creación del objeto (r/o)

datetime

OBJPROP_TEXT

Descripción del objeto (texto contenido en el objeto)

string

OBJPROP_TOOLTIP

Texto de información sobre herramientas al pasar el ratón

string

La propiedad OBJPROP_NAME es un identificador de objeto. Editarla equivale a borrar el objeto antiguo y crear uno nuevo.

Para algunos tipos de objetos capaces de mostrar texto (como etiquetas o botones), la propiedad OBJPROP_TEXT siempre se muestra directamente en el gráfico, dentro del objeto. Para otros objetos (por ejemplo, líneas), esta propiedad contiene una descripción que se muestra en el gráfico junto al objeto y sólo si la opción «Mostrar descripciones de objetos» está activada en la configuración del gráfico. En cualquier caso, OBJPROP_TEXT se muestra en la información sobre herramientas.

La propiedad OBJPROP_CREATETIME sólo existe hasta el final de la sesión actual y no se escribe en los archivos chr.

Puede cambiar el nombre de un objeto mediante programación o manualmente (en el cuadro de diálogo de propiedades del objeto), mientras que su hora de creación seguirá siendo la misma. De cara al futuro, observamos que el cambio de nombre mediante programación no provoca ningún evento sobre los objetos del gráfico. Como vamos a descubrir en el capítulo siguiente, el cambio de nombre manual desencadena tres eventos:

  • borrado de un objeto con el nombre antiguo (CHARTEVENT_OBJECT_DELETE),
  • creación de un objeto con un nuevo nombre (CHARTEVENT_OBJECT_CREATE) y
  • modificación de un nuevo objeto (CHARTEVENT_OBJECT_CHANGE).

Si la propiedad OBJPROP_TOOLTIP no está definida, se muestra información sobre herramientas para el objeto, generado automáticamente por el terminal. Para desactivar dicha información sobre herramientas, establezca su valor en «\n» (salto de línea).

Adaptemos el script ObjectFinder.mq5 de la sección Encontrar objetos para registrar todas las propiedades anteriores de los objetos del gráfico actual. Vamos a ponerle al nuevo script el nombre ObjectListing.mq5.

Al principio de OnStart, crearemos o modificaremos una línea recta vertical situada en la última barra (en el momento en que se lanza el script). Si existe la opción de mostrar descripciones de objetos en la configuración del gráfico, entonces veremos el texto «Última barra en este momento» a lo largo de la línea vertical derecha.

void OnStart()
{
   const string vline = ObjNamePrefix + "current";
   ObjectCreate(0vlineOBJ_VLINE0iTime(NULL00), 0);
   ObjectSetString(0vlineOBJPROP_TEXT"Latest Bar At The Moment");
   ...

A continuación, en un bucle a través de las subventanas, consultaremos todos los objetos hasta ObjectsTotal y sus principales propiedades.

   int count = 0;
   const long id = ChartID();
   const int win = (int)ChartGetInteger(idCHART_WINDOWS_TOTAL);
   // loop through subwindows
   for(int k = 0k < win; ++k)
   {
      PrintFormat("  Window %d"k);
      const int n = ObjectsTotal(idk);
      //loop through objects
      for(int i = 0i < n; ++i)
      {
         const string name = ObjectName(idik);
         const ENUM_OBJECT type =
            (ENUM_OBJECT)ObjectGetInteger(idnameOBJPROP_TYPE);
         const datetime created =
            (datetime)ObjectGetInteger(idnameOBJPROP_CREATETIME);
         const string description = ObjectGetString(idnameOBJPROP_TEXT);
         const string hint = ObjectGetString(idnameOBJPROP_TOOLTIP);
         PrintFormat("    %s %s %s %s %s"EnumToString(type), name,
            TimeToString(created), descriptionhint);
         ++count;
      }
   }
   
   PrintFormat("%d objects found"count);
}

Obtenemos las siguientes entradas en el registro.

  Window 0
    OBJ_VLINE ObjShow-current 2021.12.21 20:20 Latest Bar At The Moment 
    OBJ_VLINE abc 2021.12.21 19:25  
    OBJ_VLINE xyz 1970.01.01 00:00  
3 objects found

Un valor cero de OBJPROP_CREATETIME (1970.01.01 00:00) significa que el objeto no se creó durante la sesión actual, sino antes.