- Типы объектов и особенности указания их координат
- Объекты с привязкой ко времени и цене
- Объекты с привязкой к экранным координатам
- Создание объектов
- Удаление объектов
- Поиск объектов
- Обзор функций доступа к свойствам объектов
- Основные свойства объектов
- Координаты времени и цены
- Угол окна привязки и экранные координаты
- Определение точки привязки на объекте
- Управление состоянием объекта
- Приоритет объектов (Z-порядок)
- Настройка отображения объекта: цвет, стиль и рамка
- Настройки шрифта
- Поворот текста на произвольный угол
- Определение ширины и высоты объектов
- Видимость объектов в разрезе таймфреймов
- Назначение кода символа для метки
- Свойства лучей для объектов c прямыми линиями
- Управление нажатым состоянием объекта
- Настройка изображений в объектах-картинках
- Кадрирование (вывод части) изображения
- Свойства поля ввода: выравнивание и "только чтение"
- Ширина канала стандартного отклонения
- Настройка уровней в объектах с их поддержкой
- Дополнительные свойства Ганна, Фибоначчи и Эллиота
- Объект-график
- Перемещение объектов
- Получение времени или цены в заданных точках линий
Поиск объектов
Для поиска объектов на графике существует 3 функции. Первые две — ObjectsTotal и ObjectName — позволяют организовать перебор объектов по имени, и далее, если требуется, использовать имя каждого объекта для анализа его прочих свойств (о том, как это делается, мы расскажем в следующем разделе). Третья функция ObjectFind позволяет по известному имени проверить существование объекта. В принципе, то же самое можно сделать, просто запросив какое-либо свойство через ObjectGet-функцию: если объекта с переданным именем нет, мы получим ошибку в _LastError, но это менее удобно, чем вызов ObjectFind. Кроме того она дополнительно сразу возвращает номер окна, в котором находится объект.
int ObjectsTotal(long chartId, int window = -1, int type = -1)
Функция возвращает количество объектов на графике с идентификатором chartId (0 — текущий график). В расчет принимаются только объекты в подокне с номером window (0 — основное окно, -1 — основное окно и все подокна), а также объекты конкретного типа, указанного в параметре type (-1 означает по умолчанию все типы). Значением type может быть элемент перечисления ENUM_OBJECT.
Функция выполняется синхронно, то есть блокирует выполнение вызывающей MQL-программы вплоть до получения результата.
string ObjectName(long chartId, int index, int window = -1, int type = -1)
Функция возвращает имя объекта под номером index на графике с идентификатором chartId. При составлении внутреннего списка, внутри которого и ищется объект, в расчет принимаются указанные номер подокна (window) и тип объектов (type). Список отсортирован по названиям объектов в лексикографическом порядке, то есть, в частности, по алфавиту с учетом регистра.
Как и ObjectsTotal, ObjectName в процессе своего выполнения дожидается выборки всей очереди команд графика и затем возвращает имя объекта из актуализированного списка объектов.
В случае ошибки будет получена пустая строка, в _LastError занесен код OBJECT_NOT_FOUND (4202).
Для проверки работы этих двух функций создадим скрипт ObjectFinder.mq5, который выводит в журнал все объекты на всех графиках. В нем применены уже известные нам функции перебора графиков (ChartFirst и ChartNext), а также функции получения свойств графиков (ChartSymbol, ChartPeriod, ChartGetInteger).
#include <MQL5Book/Periods.mqh>
|
Для каждого графика определяем количество подокон (ChartGetInteger(id, CHART_WINDOWS_TOTAL)) и вызываем для каждого подокна ObjectsTotal и, во внутреннем цикле, — ObjectName. Далее по имени находим тип объекта и выводим их вместе в журнал.
Ниже приведен вариант возможного результата работы скрипта (с сокращениями).
EURUSD H1 (132358585987782873)
|
Здесь, в частности, видно, что на графике XAUUSD D1 находятся объекты, сгенерированные скриптом ObjectSimpleShowcase.mq5. На некоторых графиках и в некоторых подокнах объектов нет.
int ObjectFind(long chartId, const string name)
Функция ищет объект по имени на указанном с помощью идентификатора графике и возвращает в случае успеха номер окна, где он найден.
Если объект не найден, функция возвращает отрицательное число. Как и предыдущие функции данного раздела, ObjectFind использует синхронный вызов.
Пример использования данной функции мы увидим в скрипте ObjectCopy.mq5 в следующем разделе.