Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5. Издание 2-е, исправленное и дополненное - Тимур Машнин
Функции 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 устанавливаются такие свойства графического объекта, как цвет, стиль, размер и др.
С помощью функции ObjectSetString можно изменить имя объекта, при этом объект со старым именем будет удален и будет создан объект с новым именем, установить текст для таких объектов, как текст, кнопка, метка, поле ввода, событие, установить текст всплывающей подсказки для объекта, описание уровня для объектов, имеющих уровни, шрифт, имя BMP-файла для объекта «Графическая метка» и «Рисунок», символ для объекта «График».
Функция TextSetFont позволяет установить тип шрифта текста, его размер, стиль и угол наклона для объектов, содержащих текст.
Как уже было сказано, функция TextOut позволяет скомбинировать текст и изображение.
Например, показанный на слайде код выводит текст в изображение, залитое одним цветом.
Здесь ExtImg это пиксельный массив, представляющий изображение 100х100 пикселей.
Функция ObjectCreate создает объект «Графическая метка» OBJ_BITMAP_LABEL, а функция ObjectSetString устанавливает для этого объекта файл изображения с именем::IMG. По поводу знака «::» справочник говорит следующее:
Для использования своего ресурса в коде нужно перед именем ресурса добавлять специальный признак"::».
Функция ArrayFill заполняет пиксельный массив пикселями белого цвета.
Функция TextOut выводит в пиксельный массив слово «Text».
Функция ResourceCreate создает из пиксельного массива ресурс с именем::IMG.
В итоге на белом фоне отображается надпись «Text».
Также можно вывести текст на готовое изображение.
Здесь функция ResourceReadImage считывает существующее изображение из папки Images окна Navigator редактора MQL5 в пиксельный массив::IMG, связанный с объектом «Графическая метка», а функция TextOut выводит в пиксельный массив слово «Text».
То же самое можно проделать и с объектом «Рисунок» OBJ_BITMAP.
Здесь мы в функции OnCalculate создаем объект «Рисунок» с помощью функции ObjectCreate, которая прикрепляет рисунок к цене закрытия последнего бара.
И далее мы заполняем связанный с этим объектом файл, текстом и изображением.
В качестве примера использования графических объектов, рассмотрим создание индикатора, который выводит в небольшое окно на графике символа тот же график, но с другим временным периодом.
Для этого используем графический объект OBJ_CHART.
В качестве входных параметров индикатора используем символ графика и его период.
В функции OnInit создадим графический объект График OBJ_CHART.
По умолчанию точка привязки этого объекта — левый верхний угол графика.
Определим отступ точки привязки объекта, его размеры, символ и период графика, отображение шкалы времени, размер точки привязки, с помощью которой можно перемещать объект, отображение ценовой шкалы, режим перемещения мышкой, цвет рамки графика.
С помощью свойства объектов OBJPROP_CHART_ID функции ObjectGetInteger получим идентификатор графика, используя который мы теперь можем применять функции работы с графиками и свойства графиков.
Откроем наш график символа, к которому мы хотим присоединить индикатор, и нажав правой кнопкой мышки, выберем пункт в контекстном меню Шаблоны и Сохранить шаблон.
Теперь мы можем перенести на наш графический объект все настройки и индикаторы графика символа.
Присоединив индикатор к графику символа, мы можем нажать на нем правой кнопкой мышки и изменить его свойства, включая его период, размеры и др.
Функция PlaySound
Функция PlaySound воспроизводит звуковой файл.
Например, это можно делать при появлении сигнала индикатора для напоминания.
В качестве примера добавим звуковой сигнал в наш индикатор Impulse keeper при появлении первого сигнала на покупку или продажу.
Скачаем какой-нибудь WAV-сигнал из Интернета и поместим его файл в папку Sounds терминала.
Добавим код в индикатор Impulse keeper.
Здесь добавлены счетчики сигналов на продажу и покупку countBuy, countSell, для того, чтобы сигнал звучал только при появлении первого сигнала.
И если появляется сигнал на покупку или продажу, соответствующий счетчик увеличивается и звучит оповещение.
При дублирующем сигнале оповещение не звучит.
При окончании серии сигналов, счетчик обнуляется.
Функция OnChartEvent
Функция OnChartEvent является функцией обратного вызова, которая вызывается при взаимодействии пользователя с графиком символа и событиях, связанных с графическими объектами графика символа.
В качестве примера использования функции OnChartEvent рассмотрим наш индикатор Impulse keeper и добавим в него функциональность, позволяющую посмотреть значения используемых индикаторов при клике на сигнале покупки или продажи индикатора.
Для этого добавим в код индикатора функцию OnChartEvent, обрабатывающую событие щелчка мыши на графическом объекте индикатора.
Но сначала, здесь мы в функции OnCalculate с помощью