Свойства объектов

Графические объекты могут иметь множество свойств в зависимости от типа объекта. Установка и получение значений свойств объектов производится соответствующими функциями по работе с графическими объектами.

Все объекты, используемые в техническом анализе, имеют привязку на графиках по координатам цены и времени – трендовая линия, каналы, инструменты Фибоначчи и т.д.  Но есть ряд вспомогательных объектов, предназначенных для улучшения интерфейса, которые имеют привязку к видимой всегда части графика (основное окно графика или подокна индикаторов):

Объект

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

X/Y

Width/Height

Date/Price

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

Text

OBJ_TEXT

Да

Да

Да

Label

OBJ_LABEL

Да

Да (только для чтения)

Да

Да

Да

Button

OBJ_BUTTON

Да

Да

Да

Bitmap

OBJ_BITMAP

Да (только для чтения)

Да

Да

Bitmap Label

OBJ_BITMAP_LABEL

Да

Да (только для чтения)

Да

Да

Edit

OBJ_EDIT

Да

Да

Да

Rectangle Label

OBJ_RECTANGLE_LABEL

Да

Да

Да

В таблице использованы следующие обозначения:

  • X/Y – координаты точки привязки задаются в пикселях относительно одного из углов графика;
  • Width/Height – объекты имеет ширину и высоту. Если указано "только для чтения", то это означает, что значения ширины и высоты вычисляются только после отрисовки объекта на графике;
  • Date/Price – координаты точки привязки задаются парой дата/цена;
  • OBJPROP_CORNER – задаёт угол графика, относительно которого указываются координаты точки привязки. Может быть одним из 4-х значений перечисления ENUM_BASE_CORNER;
  • OBJPROP_ANCHOR – задаёт положение точки привязки в самом объекте, и может быть одним из 9-ти значений перечисления ENUM_ANCHOR_POINT. Именно от этой точки до выбранного угла графика указываются координаты в пикселях;
  • OBJPROP_ANGLE – задаёт угол поворота объекта против часовой стрелки.

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

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

Для функций ObjectSetInteger() и ObjectGetInteger()

ENUM_OBJECT_PROPERTY_INTEGER

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

Описание

Тип свойства

OBJPROP_COLOR

Цвет

color

OBJPROP_STYLE

Стиль

ENUM_LINE_STYLE

OBJPROP_WIDTH

Толщина линии

int

OBJPROP_BACK

Объект на заднем плане

bool

OBJPROP_ZORDER

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

long

OBJPROP_FILL

Заливка объекта цветом (для OBJ_RECTANGLE, OBJ_TRIANGLE, OBJ_ELLIPSE, OBJ_CHANNEL, OBJ_STDDEVCHANNEL, OBJ_REGRESSION)

bool

OBJPROP_HIDDEN

Запрет на показ имени графического объекта в списке объектов из меню терминала "Графики" - "Объекты" - "Список объектов". Значение true позволяет скрыть ненужный для пользователя объект из списка. По умолчанию true устанавливается для объектов, которые отображают события календаря, историю торговли, а также для созданных из MQL5-программы. Для того чтобы увидеть такие графические объекты и получить доступ к их свойствам, нужно нажать кнопку "Все" в окне "Список объектов".

bool

OBJPROP_SELECTED

Выделенность объекта

bool

OBJPROP_READONLY

Возможность редактирования текста в объекте Edit

bool

OBJPROP_TYPE

Тип объекта

ENUM_OBJECT   r/o

OBJPROP_TIME

Координата времени

datetime   модификатор=номер точки привязки

OBJPROP_SELECTABLE

Доступность объекта

bool

OBJPROP_CREATETIME

Время создания объекта

datetime    r/o

OBJPROP_LEVELS

Количество уровней

int

OBJPROP_LEVELCOLOR

Цвет линии-уровня

color   модификатор=номер уровня

OBJPROP_LEVELSTYLE

Стиль линии-уровня

ENUM_LINE_STYLE модификатор=номер уровня

OBJPROP_LEVELWIDTH

Толщина линии-уровня

int      модификатор=номер уровня

OBJPROP_ALIGN

Горизонтальное выравнивание текста в объекте "Поле ввода" (OBJ_EDIT)

ENUM_ALIGN_MODE

OBJPROP_FONTSIZE

Размер шрифта

int

OBJPROP_RAY_LEFT

Луч продолжается влево

bool

OBJPROP_RAY_RIGHT

Луч продолжается вправо

bool

OBJPROP_RAY

Вертикальная линия продолжается на все окна графика

bool

OBJPROP_ELLIPSE

Отображение полного эллипса для объекта "Дуги Фибоначчи" (OBJ_FIBOARC)

bool

OBJPROP_ARROWCODE

Код стрелки для объекта "Стрелка"

uchar

OBJPROP_TIMEFRAMES

Видимость объекта на таймфреймах

набор флагов flags

OBJPROP_ANCHOR

Положение точки привязки графического объекта

ENUM_ARROW_ANCHOR (для OBJ_ARROW),

ENUM_ANCHOR_POINT (для OBJ_LABEL, OBJ_BITMAP_LABEL и OBJ_TEXT)

OBJPROP_XDISTANCE

Дистанция в пикселях по оси X от угла привязки (см. примечание)

int

OBJPROP_YDISTANCE

Дистанция в пикселях по оси Y от угла привязки (см. примечание)

int

OBJPROP_DIRECTION

Тренд объекта Ганна

ENUM_GANN_DIRECTION

OBJPROP_DEGREE

Уровень волновой разметки Эллиота

ENUM_ELLIOT_WAVE_DEGREE

OBJPROP_DRAWLINES

Отображение линий для волновой разметки Эллиота

bool

OBJPROP_STATE

Состояние кнопки (Нажата/Отжата)

bool

OBJPROP_CHART_ID

Идентификатор объекта "График" (OBJ_CHART). Позволяет работать со свойствами этого объекта как с обычным графиком с помощью функций из раздела Операции с графиками, но есть некоторые исключения.

long  r/o

OBJPROP_XSIZE

Ширина объекта по оси X в пикселях. Задается для объектов OBJ_LABEL (read only), OBJ_BUTTON, OBJ_CHART, OBJ_BITMAP, OBJ_BITMAP_LABEL, OBJ_EDIT, OBJ_RECTANGLE_LABEL.

int

OBJPROP_YSIZE

Высота объекта по оси Y в пикселях. Задается для объектов OBJ_LABEL (read only), OBJ_BUTTON, OBJ_CHART, OBJ_BITMAP, OBJ_BITMAP_LABEL, OBJ_EDIT, OBJ_RECTANGLE_LABEL.

int

OBJPROP_XOFFSET

X-координата левого верхнего угла прямоугольной области видимости  в графических объектах "Графическая метка" и "Рисунок" (OBJ_BITMAP_LABEL и OBJ_BITMAP). Значение задается в пикселях относительного верхнего левого угла исходного изображения.

int

OBJPROP_YOFFSET

Y-координата левого верхнего угла прямоугольной области видимости  в графических объектах "Графическая метка" и "Рисунок" (OBJ_BITMAP_LABEL и OBJ_BITMAP). Значение задается в пикселях относительного верхнего левого угла исходного изображения.

int

OBJPROP_PERIOD

Период для объекта "График"

ENUM_TIMEFRAMES

OBJPROP_DATE_SCALE

Признак отображения шкалы времени для объекта "График"

bool

OBJPROP_PRICE_SCALE

Признак отображения ценовой шкалы для объекта "График"

bool

OBJPROP_CHART_SCALE

Масштаб для объекта "График"

int   значение в диапазоне 0–5

OBJPROP_BGCOLOR

Цвет фона для OBJ_EDIT, OBJ_BUTTON, OBJ_RECTANGLE_LABEL

color

OBJPROP_CORNER

Угол графика для привязки графического объекта

ENUM_BASE_CORNER

OBJPROP_BORDER_TYPE

Тип рамки для объекта "Прямоугольная рамка"

ENUM_BORDER_TYPE

OBJPROP_BORDER_COLOR

Цвет рамки для объекта OBJ_EDIT и OBJ_BUTTON

color

При применении операций с графиками для объекта "График"  (OBJ_CHART) действуют следующие ограничения:

  • нельзя закрыть с помощью ChartClose();
  • нельзя поменять символ/период с помощью функции ChartSetSymbolPeriod();
  • не работают свойства CHART_SCALE, CHART_BRING_TO_TOP, CHART_SHOW_DATE_SCALE и CHART_SHOW_PRICE_SCALE (ENUM_CHART_PROPERTY_INTEGER).

 

Для объектов OBJ_BITMAP_LABEL и OBJ_BITMAP программным путем можно установить специальный режим показа изображения. В этом режиме показывается только та часть исходного изображения, на которую накладывается прямоугольная область видимости, остальная часть картинки становится невидимой. Размеры области видимости необходимо установить с помощью свойств OBJPROP_XSIZE и OBJPROP_YSIZE. Область видимости можно "перемещать" только в пределах исходного изображения с помощью  свойств OBJPROP_XOFFSET и OBJPROP_YOFFSET.

 

Для объектов с фиксированными размерами: OBJ_BUTTON, OBJ_RECTANGLE_LABEL, OBJ_EDIT и OBJ_CHART свойства OBJPROP_XDISTANCE и OBJPROP_YDISTANCE задают положение левой верхней точки объекта относительно угла графика (OBJPROP_CORNER), от которого будут отсчитываться координаты X и Y в пикселях.

 

Для функций ObjectSetDouble() и ObjectGetDouble()

ENUM_OBJECT_PROPERTY_DOUBLE

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

Описание

Тип свойства

OBJPROP_PRICE

Координата цены

double    модификатор=номер точки привязки

OBJPROP_LEVELVALUE

Значение уровня

double    модификатор=номер уровня

OBJPROP_SCALE

Масштаб (свойство объектов Ганна и объекта "Дуги Фибоначчи")

double

OBJPROP_ANGLE

Угол. Для объектов с еще не заданным углом, созданных из программы, значение равно EMPTY_VALUE

double

OBJPROP_DEVIATION

Отклонение для канала стандартного отклонения

double

 

Для функций ObjectSetString() и ObjectGetString()

ENUM_OBJECT_PROPERTY_STRING

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

Описание

Тип свойства

OBJPROP_NAME

Имя объекта

string

OBJPROP_TEXT

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

string

OBJPROP_TOOLTIP

Текст всплывающей подсказки. Если свойство не задано, то показывается подсказка, автоматически сформированная терминалом. Можно  отключить показ подсказки, установив для нее значение "\n" (перевод строки)

string

OBJPROP_LEVELTEXT

Описание уровня

string    модификатор=номер уровня

OBJPROP_FONT

Шрифт

string

OBJPROP_BMPFILE

Имя BMP-файла для объекта "Графическая метка". Смотри также Ресурсы

string   модификатор: 0-состояние ON, 1-состояние OFF

OBJPROP_SYMBOL

Символ для объекта "График"

string

 

Для объекта OBJ_RECTANGLE_LABEL ("Прямоугольная метка") можно задать один из трех видов отображения, которым соответствуют значения из перечисления ENUM_BORDER_TYPE.

ENUM_BORDER_TYPE

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

Описание

BORDER_FLAT

Плоский вид

BORDER_RAISED

Выпуклый вид

BORDER_SUNKEN

Вогнутый вид

 

Для объекта OBJ_EDIT ("Поле ввода") и для функции ChartScreenShot() можно указать тип выравнивания по горизонтали с помощью значений перечисления ENUM_ALIGN_MODE.

ENUM_ALIGN_MODE

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

Описание

ALIGN_LEFT

Выравнивание по левой границе

ALIGN_CENTER

Выравнивание по центру (только для объекта "Поле ввода")

ALIGN_RIGHT

Выравнивание по правой границе

Пример:

#define  UP          "\x0431"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string label_name="my_OBJ_LABEL_object";
   if(ObjectFind(0,label_name)<0)
     {
      Print("Object ",label_name," not found. Error code = ",GetLastError());
      //--- создадим объект Label
      ObjectCreate(0,label_name,OBJ_LABEL,0,0,0);           
      //--- установим координату X
      ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,200);
      //--- установим координату Y
      ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,300);
      //--- зададим цвет текста
      ObjectSetInteger(0,label_name,OBJPROP_COLOR,clrWhite);
      //--- установим текст для объекта Label
      ObjectSetString(0,label_name,OBJPROP_TEXT,UP);
      //--- установим шрифт надписи
      ObjectSetString(0,label_name,OBJPROP_FONT,"Wingdings");
      //--- установим размер шрифта
      ObjectSetInteger(0,label_name,OBJPROP_FONTSIZE,10);
      //--- повернем на 45 градусов по часовой стрелке
      ObjectSetDouble(0,label_name,OBJPROP_ANGLE,-45);
      //--- запретим выделение объекта мышкой
      ObjectSetInteger(0,label_name,OBJPROP_SELECTABLE,false);
      //--- отрисуем на графике
      ChartRedraw(0);                                      
     }
  }