В свойствах индикатора теперь не нужно объявлять буферы данных и цвета индикатора и графические серии для них.
Оставим только буферы индикатора для промежуточных расчетов и хэндлы используемых индикаторов.
В функции OnInit () соответственно оставим только привязку массивов к буферам промежуточных расчетов и получение хэндлов используемых индикаторов.
В функции OnCalculate определим создание объектов на графике символа.
Здесь функцией ObjectCreate создаются объекты стрелки, привязанные ко времени и максимальной или минимальной цене.
И создаются два разных объекта стрелки в зависимости от того, соответствуют ли условия покупке или продаже финансового инструмента.
После создания графического объекта стрелки, функцией ObjectSetInteger со свойством OBJPROP_COLOR определяется цвет стрелки.
Функцией ObjectSetInteger со свойством OBJPROP_ARROWCODE определяется направление стрелки вверх или вниз.
Функцией ObjectSetInteger со свойством OBJPROP_WIDTH определяется размер объекта.
Функцией ObjectSetInteger со свойством OBJPROP_ANCHOR определяется привязка к цене сверху или снизу по центру.
Функцией ObjectSetInteger со свойством OBJPROP_HIDDEN — true определяется отсутствие созданных объектов в списке объектов графика символа.
Функцией ObjectSetString со свойством OBJPROP_TOOLTIP определяется содержание всплывающей подсказки при наведении указателя на объект.
Теперь, в функции OnDeinit уберем все добавленные графические объекты, используя функцию ObjectsDeleteAll.
И более подробно о создании объектов на графике символа мы еще поговорим позже.
Кстати, мы использовали функцию ObjectSetInteger со свойством OBJPROP_HIDDEN — true, чтобы не засорять список объектов графика символа нашими созданными объектами стрелки.
Графические объекты
Как уже было показано ранее, мы можем рисовать на графике символа не только диаграммы индикатора, но и добавлять различные графические объекты с помощью функции ObjectCreate.
Здесь параметр sub_window это индекс главного окна графика символа со значением 0 или индекс подокна другого индикатора, присоединенного к графику символа.
Например, если в предыдущем примере с пользовательским индикатором Impulse Keeper, мы изменим код, добавив объекты стрелки в подокно с индексом 1,
И присоединим к графику символа, скажем, индикатор ADX, мы увидим следующее:
Нумерация подокон идет сверху вниз в порядке отображения.
Третий параметр функции ObjectCreate — тип отображаемого объекта задается перечислением ENUM_OBJECT, которое можно посмотреть в справочнике.
После добавления графических объектов, не забываем их удалять в функции обратного вызова OnDeinit, используя функцию ObjectDelete:
Или используя функцию ObjectsDeleteAll.
Где sub_window=-1 означает все подокна графика, включая главное окно.
Помимо вышеупомянутых функций ObjectCreate, ObjectDelete и ObjectsDeleteAll, MQL5 предлагает целый набор функций для работы с графическими объектами: ObjectName, ObjectFind, и другие.
Функции ObjectName, ObjectFind, ObjectGetTimeByValue, ObjectGetValueByTime, ObjectsTotal, ObjectGetDouble, ObjectGetInteger, ObjectGetString, TextGetSize — это функции, возвращающие информацию.
Функции ObjectSetDouble, ObjectSetInteger, ObjectSetString, TextSetFont — это функции устанавливающие свойства объекта.
Функция ObjectMove перемещает объект в окне.
Функция TextOut выводит текст в пиксельный массив для отображения объектом OBJ_BITMAP_LABEL или OBJ_BITMAP.
После добавления графических объектов рекомендуется принудительно перерисовать график символа с помощью функции ChartRedraw.
Надо отметить, что функция ObjectCreate позволяет создавать программным способом те графические объекты, которые вы можете вручную нарисовать на графике символа, пользуясь панелью инструментов клиентского терминала.
С помощью функции ObjectSetDouble устанавливаются такие свойства графического объекта, как OBJPROP_PRICE — изменение параметра price функции ObjectCreate,
OBJPROP_LEVELVALUE — определение уровней для таких объектов, как инструменты Фиббоначи и Вилы Эндрюса,
OBJPROP_SCALE — определение масштаба для таких объектов, как инструменты Ганна и Дуги Фибоначчи,
OBJPROP_ANGLE — определение угла объекта, т. е. возможность повернуть объект, который изначально не имеет жесткой привязки, например, повернуть текст,
OBJPROP_DEVIATION — определение отклонения для объекта Канал стандартного отклонения.
Как пример использования OBJPROP_PRICE:
В этом коде создается горизонтальный уровень, показывающий минимальную или максимальную цену предыдущего бара, в зависимости от того, является ли этот бар бычьим или медвежьим.
Пример использования OBJPROP_ANGLE:
Этот код создает вертикальную линию с подписью цены закрытия предыдущего бара.
С помощью функции ObjectSetInteger устанавливаются такие свойства графического объекта, как цвет, стиль, размер и др.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии