Для объектов тех типов, которые существуют в системе координат котировок, 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
Вы можете запустить индикатор в визуальном тестере, чтобы убедиться, как координаты линий меняются на лету.