В прилагаемом файле с расширением *.mqh — функции для создания объектов и/или изменения значений свойств объектов. Мне он особенно удобен в применении, когда нужно быстро создать какой-либо тестовый код, где требуется прописать попутно создание каких-либо объектов на графике и/или изменение каких-либо свойств объектов из уже имеющихся на графике.
Другой файл — это скрипт с тестовым примером применения функций из прилагаемого файла (создает текстовую метку, постепенно поворачивает ее текст на 90 градусов, попутно меняя текст и его цвет).
I. Функции для создания объектов:
Cформированы на основе находящихся в Справочнике по MQL5. Основные отличия от одноименных функций в справочнике:
- добавлены строки для установки всплывающих подсказок и строки для выбора установки видимости объектов на различных таймфреймах;
- убраны строки с функциями формирования объектов при не заданных координатах, ценах, точках привязок (за исключением в VLineCreate(...) и EventCreate(...));
- за счет имеющихся в прилагаемом файле функций по установке (изменению) свойств объектов, при создании объектов добавлены дополнительные условия проверки успешности установки значений свойств.
Список находящихся в файле функций для создания объектов:
Имя
| Краткое описание
| Тип объекта
|
VLineCreate | Создает вертикальную линию | OBJ_VLINE |
HLineCreate | Создает горизонтальную линию | OBJ_HLINE |
TrendCreate | Создает линию тренда по заданным координатам | OBJ_TREND |
ArrowedLineCreate | Создает линию со стрелкой по заданным координатам | OBJ_ARROWED_LINE |
ChannelCreate | Создает равноудаленный канал по заданным координатам | OBJ_CHANNEL |
RectangleCreate | Создает прямоугольник по заданным координатам | OBJ_RECTANGLE |
TriangleCreate | Создает треугольник по заданным координатам | OBJ_TRIANGLE |
EllipseCreate | Создает эллипс по заданным координатам | OBJ_ELLIPSE |
ArrowCreate
| Создает OBJ_ARROW
| OBJ_ARROW |
| TextCreate | Создает объект "Текст"
| OBJ_TEXT
|
LabelCreate | Создает текстовую метку | OBJ_LABEL |
ButtonCreate | Создает кнопку | OBJ_BUTTON |
BitmapCreate | Создает рисунок в окне графика | OBJ_BITMAP |
BitmapLabelCreate | Создает объект "Графическая метка" | OBJ_BITMAP_LABEL |
EditCreate | Создает объект "Поле ввода" | OBJ_EDIT |
EventCreate | Создает объект "Событие" на графике | OBJ_EVENT |
RectLabelCreate | Создает прямоугольную метку | OBJ_RECTANGLE_LABEL |
II. Функции установки значений свойств:
Через ObjectSetDouble(...), ObjectSetInteger(...) и ObjectSetString(...) без указания модификатора:
| Имя функции
| Перечисление
| Свойство
| Краткое описание
| Тип свойства
|
| 1. | ObSetDouble | ENUM_OBJECT_PROPERTY_DOUBLE | OBJPROP_SCALE | Масштаб (свойство объектов Ганна и объекта "Дуги Фибоначчи") | double
|
OBJPROP_ANGLE
| Угол. Для объектов с еще не заданным углом, созданных из программы, значение равно EMPTY_VALUE
| double
|
| OBJPROP_DEVIATION | Отклонение для канала стандартного отклонения
| double |
| 2. | ObSetIntegerAlign | ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_ALIGN | Горизонтальное выравнивание текста в объекте "Поле ввода" (OBJ_EDIT)
| ENUM_ALIGN_MODE
|
| 3. | ObSetIntegerAncorPoint | ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_ANCHOR
| Положение точки привязки графических объектов OBJ_LABEL, OBJ_BITMAP_LABEL и OBJ_TEXT
| ENUM_ANCHOR_POINT
|
4.
| ObSetIntegerArrowAncor
| ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_ANCHOR | Положение точки привязки графического объекта OBJ_ARROW
| ENUM_ARROW_ANCHOR
|
| 5. | ObSetIntegerArrowCode
| ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_ARROWCODE | Код OBJ_ARROW
| char
|
| 6. | ObSetIntegerBool | ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_BACK
| Объект на заднем плане
| bool
|
| 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_SELECTABLE
| Доступность объекта | bool |
OBJPROP_RAY_LEFT
| Луч продолжается влево | bool |
| OBJPROP_RAY_RIGHT | Луч продолжается вправо | bool
|
| OBJPROP_RAY | Вертикальная линия продолжается на все окна графика | bool |
| OBJPROP_ELLIPSE | Отображение полного эллипса для объекта "Дуги Фибоначчи" (OBJ_FIBOARC) | bool |
| OBJPROP_DRAWLINES | Отображение линий для волновой разметки Эллиота | bool
|
| OBJPROP_STATE | Состояние кнопки (Нажата/Отжата) | bool |
| OBJPROP_DATE_SCALE | Признак отображения шкалы времени для объекта "График" | bool |
| OBJPROP_PRICE_SCALE | Признак отображения ценовой шкалы для объекта "График" | bool |
| 7. | ObSetIntegerBorderType | ENUM_OBJECT_PROPERTY_INTEGER
| OBJPROP_BORDER_TYPE
| Тип рамки для объекта "Прямоугольная рамка"
| ENUM_BORDER_TYPE
|
| 8. | ObSetIntegerColor | ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_COLOR | Цвет (в зависимости от типа объекта это цвет линии, текста; и т.д.) | color |
| OBJPROP_BGCOLOR | Цвет фона для OBJ_EDIT, OBJ_BUTTON, OBJ_RECTANGLE_LABEL | color |
| OBJPROP_BORDER_COLOR | Цвет рамки для объекта OBJ_EDIT и OBJ_BUTTON | color |
| 9. | ObSetIntegerCorner
| ENUM_OBJECT_PROPERTY_INTEGER
| OBJPROP_CORNER | Угол графика для привязки графического объекта
| ENUM_BASE_CORNER |
| 10. | ObSetIntegerInt | ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_WIDTH | Толщина линии | int |
| OBJPROP_LEVELS | Количество уровней | int
|
| OBJPROP_FONTSIZE | Размер шрифта | int |
| OBJPROP_TIMEFRAMES | Видимость объекта на таймфреймах (набор флагов flags) | int |
| OBJPROP_XDISTANCE | Дистанция в пикселях по оси X от угла привязки (см. примечание в Справочнике по MQL5) | int |
| OBJPROP_YDISTANCE | Дистанция в пикселях по оси Y от угла привязки (см. примечание в Справочнике по MQL5)
| int |
| 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_CHART_SCALE | Масштаб для объекта "График" (значение в диапазоне 0–5) | int |
| 11. | ObSetIntegerLineStyle | ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_STYLE
| Стиль
| ENUM_LINE_STYLE
|
| 12. | ObSetIntegerLong | ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_ZORDER | Приоритет графического объекта на получение события нажатия мыши на графике (CHARTEVENT_CLICK). По умолчанию при создании значение выставляется равным нулю, но при необходимости можно повысить приоритет. При наложении объектов друг на друга событие CHARTEVENT_CLICK получит только один объект, чей приоритет выше остальных.
| long |
| ObSetString | ENUM_OBJECT_PROPERTY_STRING | OBJPROP_NAME | Имя объекта
| string |
| OBJPROP_TEXT | Описание объекта (текст, содержащийся в объекте) | string |
| OBJPROP_TOOLTIP | Текст всплывающей подсказки. Если свойство не задано, то показывается подсказка, автоматически сформированная терминалом. Можно отключить показ подсказки, установив для нее значение "\n" (перевод строки) | string |
| OBJPROP_FONT | Шрифт | string |
| OBJPROP_SYMBOL | Символ для объекта "График" | string |
Через ObjectSetDouble(...), ObjectSetInteger(...) и ObjectSetString(...) с указанием модификатора:
| Имя
| Перечисление | Свойство | Краткое описание | Тип свойства |
| 1. | ObSetDoubleMod | ENUM_OBJECT_PROPERTY_DOUBLE | OBJPROP_PRICE | Координата цены - double, модификатор=номер точки привязки | double |
| OBJPROP_LEVELVALUE | Значение уровня - double, модификатор=номер уровня
| double |
2.
| ObSetIntegerLevelColorMod | ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_LEVELCOLOR | Цвет линии-уровня - color, модификатор=номер уровня
| color |
3.
| ObSetIntegerLevelStyleMod
| ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_LEVELSTYLE
| Стиль линии-уровня ENUM_LINE_STYLE, модификатор=номер уровня
| ENUM_LINE_STYLE
|
4.
| ObSetIntegerLevelWidthMod
| ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_LEVELWIDTH
| Толщина линии-уровня - int, модификатор=номер уровня
| int
|
| 5. | ObSetIntegerTimeMod | ENUM_OBJECT_PROPERTY_INTEGER | OBJPROP_TIME
| Координата времени - datetime, модификатор=номер точки привязки
| datetime
|
| 6. | ObSetStringMod | ENUM_OBJECT_PROPERTY_STRING | OBJPROP_LEVELTEXT | Описание уровня - string, модификатор=номер уровня | string |
OBJPROP_BMPFILE
| Имя BMP-файла для объекта "Графическая метка" - string. Смотрите также в Справочнике: Ресурсы. Модификатор: 0-состояние ON, 1-состояние OFF | string |
Дополнительные функции в файле:
|
|
bool ObDelete (long chart_ID,string name)
| Удаление одиночного объекта с известным именем
|
III. Cпособы применения файла:
Его можно применять как включаемый файл или просто копировать функции из него в создаваемый вами код.
При втором варианте удобно, с моей точки зрения, применить его при создании какого-либо кода сначала как включаемый файл. И лишь после того, как в коде будут прописаны все обращения к функциям из него, затем удалить из создаваемого кода строку ссылки на файл(#include...).
Компилятор после этого быстро и конкретно подскажет, какие функции нужно скопировать в создаваемый вами код из прилагаемого файла.
Применение в виде включаемого файла:
- Сохраните прилагаемый выше файл ObjectCreateAndSet.mqh в папке "Include". Для вставки файла в эту папку, ее можно открыть через Навигатор в MetaEditor, кликнув в Навигаторе на папке с названием "Include" правой кнопкой мыши и затем нажав в открывшемся меню на строку "Открыть папку".
- При создании кода, где будут применяться функции из этого файла, скопируйте в самом верху файла строку с #include... и поставьте ее затем в верху создаваемого вами кода:
#include <ObjectCreateAndSet.mqh>
При необходимости, в прилагаемом выше файле тестового кода можно посмотреть, куда можно примерно поставить эту строку.
- После этого скомпилируйте создаваемый вами код. Это сделает доступным видеть подсказку имен имеющихся в подключаемом файле функций при наборе первых букв из их имен:

Рис.1. Всплывающая подсказка после набора первых букв имени функции

Рис.2. Всплывающая подсказка с параметрами для выбранной функции
На всякий случай упомяну, что содержащиеся в каком-либо конкретном файле функции удобно смотреть и через Список функций на панели инструментов MetaEditor:

Рис.3. Кнопка для вызова списка функций, содержащихся в файле
Соответственно, при нажатии кнопки вызова списка функций прилагаемого файла появляется окно со списком имеющихся в этом файле функций. Для быстрого перехода к коду какой-либо функции просто щелкните на ее названии в появившемся списке.

Рис.4. После нажатия кнопки вызова списка функций открывается список функций в файле (удобно для быстрого перехода к коду какой-либо функции и/или просто для просмотра имеющихся)
Обновления:
- 2015.09.14: В функции ObDelete() добавлен вывод имени объекта в журнал вкладки терминала "Эксперты", если при удалении объекта возникла ошибка. Это облегчает поиск в коде причины ошибки в случае ее возникновения.