- Типы объектов и особенности указания их координат
- Объекты с привязкой ко времени и цене
- Объекты с привязкой к экранным координатам
- Создание объектов
- Удаление объектов
- Поиск объектов
- Обзор функций доступа к свойствам объектов
- Основные свойства объектов
- Координаты времени и цены
- Угол окна привязки и экранные координаты
- Определение точки привязки на объекте
- Управление состоянием объекта
- Приоритет объектов (Z-порядок)
- Настройка отображения объекта: цвет, стиль и рамка
- Настройки шрифта
- Поворот текста на произвольный угол
- Определение ширины и высоты объектов
- Видимость объектов в разрезе таймфреймов
- Назначение кода символа для метки
- Свойства лучей для объектов c прямыми линиями
- Управление нажатым состоянием объекта
- Настройка изображений в объектах-картинках
- Кадрирование (вывод части) изображения
- Свойства поля ввода: выравнивание и "только чтение"
- Ширина канала стандартного отклонения
- Настройка уровней в объектах с их поддержкой
- Дополнительные свойства Ганна, Фибоначчи и Эллиота
- Объект-график
- Перемещение объектов
- Получение времени или цены в заданных точках линий
Объект-график
Объект-график OBJ_CHART позволяет создать внутри графика миниатюры других графиков — для других инструментов и таймфреймов. Объекты-графики включаются в общий список графиков, который мы получали программно с помощью функций ChartFirst и ChartNext. Как было сказано в разделе Проверка состояния основного окна, специальное свойство графика CHART_IS_OBJECT позволяет узнать по идентификатору, является ли он полноценным окном или объектом-графиком. В последнем случае вызов ChartGetInteger(id, CHART_IS_OBJECT) вернет true.
У объекта-графика имеется набор характерных только для него свойств.
Идентификатор |
Описание |
Тип |
---|---|---|
OBJPROP_CHART_ID |
Идентификатор графика (r/o) |
long |
OBJPROP_PERIOD |
Период графика |
ENUM_TIMEFRAMES |
OBJPROP_DATE_SCALE |
Признак отображения шкалы времени |
bool |
OBJPROP_PRICE_SCALE |
Признак отображения ценовой шкалы |
bool |
OBJPROP_CHART_SCALE |
Масштаб (значение в диапазоне 0 – 5) |
int |
OBJPROP_SYMBOL |
Символ |
string |
Идентификатор, получаемый через свойство OBJPROP_CHART_ID, позволяет управлять объектом, как обычным графиком с помощью функций из главы Работа с графиками. Вместе с тем, существуют и некоторые ограничения:
- Объект нельзя закрыть с помощью ChartClose;
- В объекте нельзя поменять символ/период с помощью функции ChartSetSymbolPeriod;
- В объекте не модифицируются свойства CHART_SCALE, CHART_BRING_TO_TOP, CHART_SHOW_DATE_SCALE и CHART_SHOW_PRICE_SCALE.
По умолчанию все свойства (за исключением OBJPROP_CHART_ID) равны соответствующим свойствам текущего окна.
Демонстрация объектов-графиков реализована в виде безбуферного индикатора ObjectChart.mq5. Он создает подокно с двумя объектами-графиками для того же символа, что и текущий график, но со смежными таймфреймами — выше и ниже текущего.
Объекты привязываются к правому верхнему углу подокна и имеют одинаковые предопределенные размеры:
#define SUBCHART_HEIGHT 150
|
Разумеется, высота подокна должна совпадать с высотой объектов, пока мы не умеем адаптивно реагировать на события изменения размера.
#property indicator_separate_window
|
Настройка одного мини-графика производится в функции SetupSubChart, которая принимает номер объекта, его размеры и требуемый таймфрейм. Результатом SetupSubChart является идентификатор объекта-графика, который мы просто для справки выводим в журнал.
void OnInit()
|
Макросы PeriodUp и PeriodDown используют вспомогательную функцию PeriodRelative.
#define PeriodUp(P) PeriodRelative(P, +1)
|
А вот и основная рабочая функция SetupSubChart.
long SetupSubChart(const int n, const int dx, const int dy,
|
Напомним, что у объекта-графика точка привязки всегда зафиксирована в левом верхнем углу объекта, поэтому при привязке к правому углу окна требуется добавлять ширину объекта (это делается за счет +1 в выражении (n + 1) * dx для OBJPROP_XDISTANCE).
На следующем скриншоте показан результат работы индикатора на графике XAUUSD,H1.
Два объекта-графика в подокне индикатора
Как мы видим, в мини-графиках отображаются таймфреймы M30 и H2.
Важно отметить, что вы можете добавлять в объекты-графики индикаторы и применять к ним tpl-шаблоны, в том числе и с экспертом. Однако создавать объекты внутри объектов-графиков нельзя.
Когда объект-график скрыт из-за отключенной визуализации на текущем или на всех таймфреймах, свойство CHART_WINDOW_IS_VISIBLE для внутреннего чарта продолжает возвращать true.