Основные свойства объектов

Все объекты обладают некоторыми универсальными атрибутами. Основные из них перечислены в следующей таблице. Позднее мы познакомимся с другими общими свойствами специального назначения (см. разделы Управление состоянием объекта, Z-порядок, Видимость объектов в разрезе таймфреймов).

Идентификатор

Описание

Тип

OBJPROP_NAME

Имя объекта

string

OBJPROP_TYPE

Тип объекта (r/o)

ENUM_OBJECT

OBJPROP_CREATETIME

Время создания объекта (r/o)

datetime

OBJPROP_TEXT

Описание объекта (текст, содержащийся в объекте)

string

OBJPROP_TOOLTIP

Текст всплывающей подсказки по наведению мыши

string

Свойство OBJPROP_NAME является идентификатором объекта. Его редактирование эквивалентно удалению старого объекта и созданию нового.

Для некоторых типов объектов, способных отображать текст (таких как надписи или кнопки), свойство OBJPROP_TEXT всегда выводится непосредственно на график, внутри объекта. Для остальных объектов (например, линий) это свойство содержит описание, которое выводится на график рядом с объектом и только в том случае, если в настройках графика включена опция Показывать описания объектов. В любом случае OBJPROP_TEXT выводится во всплывающей подсказке.

Свойство OBJPROP_CREATETIME сохраняется только до конца текущего сеанса и не записывается в chr-файлы.

Вы можете изменить название объекта программно или вручную (в диалоге свойств объекта) — при этом его время создания останется прежним. Забегая вперед, отметим, что программное переименование не вызывает на графике каких-либо событий об объектах. Как мы узнаем в следующей главе, ручное переименование вызывает три события:

  • удаление объекта под старым именем (CHARTEVENT_OBJECT_DELETE),
  • создание объекта под новым именем (CHARTEVENT_OBJECT_CREATE) и
  • модификацию нового объекта (CHARTEVENT_OBJECT_CHANGE).

Если свойство OBJPROP_TOOLTIP не задано, для объекта показывается подсказка, автоматически формируемая терминалом. Чтобы отключить показ подсказки, следует установить для нее значение "\n" (перевод строки).

Адаптируем скрипт ObjectFinder.mq5 из раздела Поиск объектов для вывода в журнал всех вышеуказанных свойств объектов на текущем графике. Назовем новый скрипт ObjectListing.mq5.

В самом начале OnStart создадим или модифицируем вертикальную прямую линию, расположенную на последнем баре (на момент запуска скрипта). Если в настройках графика стоит опция показывать описания объектов, то вдоль правой вертикальной линии увидим текст "Latest Bar At The Moment".

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

Далее в цикле по подокнам запросим все объекты вплоть до ObjectsTotal и их основные свойства.

   int count = 0;
   const long id = ChartID();
   const int win = (int)ChartGetInteger(idCHART_WINDOWS_TOTAL);
   // проходим по подокнам
   for(int k = 0k < win; ++k)
   {
      PrintFormat("  Window %d"k);
      const int n = ObjectsTotal(idk);
      // перебираем объекты
      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);
}

Получим в журнале примерно следующие записи.

  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

Нулевое значение OBJPROP_CREATETIME (1970.01.01 00:00) означает, что объект был создан не во время текущего сеанса, а раньше.