- Типы объектов и особенности указания их координат
- Объекты с привязкой ко времени и цене
- Объекты с привязкой к экранным координатам
- Создание объектов
- Удаление объектов
- Поиск объектов
- Обзор функций доступа к свойствам объектов
- Основные свойства объектов
- Координаты времени и цены
- Угол окна привязки и экранные координаты
- Определение точки привязки на объекте
- Управление состоянием объекта
- Приоритет объектов (Z-порядок)
- Настройка отображения объекта: цвет, стиль и рамка
- Настройки шрифта
- Поворот текста на произвольный угол
- Определение ширины и высоты объектов
- Видимость объектов в разрезе таймфреймов
- Назначение кода символа для метки
- Свойства лучей для объектов c прямыми линиями
- Управление нажатым состоянием объекта
- Настройка изображений в объектах-картинках
- Кадрирование (вывод части) изображения
- Свойства поля ввода: выравнивание и "только чтение"
- Ширина канала стандартного отклонения
- Настройка уровней в объектах с их поддержкой
- Дополнительные свойства Ганна, Фибоначчи и Эллиота
- Объект-график
- Перемещение объектов
- Получение времени или цены в заданных точках линий
Координаты времени и цены
Для объектов тех типов, которые существуют в системе координат котировок, MQL5 API поддерживает пару свойств для указания привязки ко времени и ценам. В том случае, если у объекта несколько точек привязки, свойства требуют при вызове ObjectSet- и ObjectGet-функций указания параметра-модификатора, содержащего номер точки привязки.
Идентификатор |
Описание |
Тип значений |
---|---|---|
OBJPROP_TIME |
Координата времени |
datetime |
OBJPROP_PRICE |
Координата цены |
double |
Эти свойства доступны у абсолютно всех объектов, но их не имеет смысла устанавливать или читать у объектов с экранными координатами.
Для демонстрации работы с координатами разберем безбуферный индикатор ObjectHighLowChannel.mq5. Для заданного отрезка баров он проводит две трендовые линии. Их начальные и конечные точки на оси времени совпадают с первым и последним баром отрезка, а по оси цен значения считаются по разному для каждой из линий: для верхней берутся максимальная и минимальная цены High, а для нижней — максимальная и минимальная цены Low. По мере обновления графика, наш импровизированный канал должен двигаться вслед за ценами.
Диапазон баров задается с помощью двух входных переменных: номер начального бара BarOffset и количество баров BarCount. По умолчанию линии строятся на самых последних ценах, поскольку BarOffset = 0.
input int BarOffset = 0;
|
Для объектов определен общий префикс имен "HighLowChannel-".
В обработчике OnCalculate мы отслеживаем появление новых баров по времени iTime 0-го бара. Как только бар формируется, производится анализ цен на заданном отрезке, берутся максимальные и минимальные значения цен каждого из двух типов (MODE_HIGH, MODE_LOW) и для них вызывается вспомогательная функция DrawFigure, где и происходит работа с объектами: создание и модификация координат.
int OnCalculate(const int rates_total,
|
А вот и сама функция DrawFigure.
bool DrawFigure(const string name, const datetime &t[], const double &p[],
|
После вызова ObjectCreate, который гарантирует наличие объекта, вызываются соответствующие ObjectSet-функции для OBJPROP_TIME и OBJPROP_PRICE во всех точках привязки (в данном случае, в двух).
На изображении ниже приведен результат работы индикатора.
Канал на двух трендовых линиях по ценам High и Low
Вы можете запустить индикатор в визуальном тестере, чтобы убедиться, как координаты линий меняются на лету.