- Основные характеристики индикаторов
- Главное событие индикаторов: OnCalculate
- Два типа индикаторов: для главного и отдельного окна
- Настройка количества буферов и графических построений
- Назначение массива в качестве буфера: SetIndexBuffer
- Настройка графических построений: PlotIndexSetInteger
- Правила сопоставления буферов и диаграмм
- Применение директив для настройки графических построений
- Установка названий для графических построений
- Визуализация пропусков данных (пустых элементов)
- Индикаторы с собственным подокном: размер и уровни
- Общие свойства индикаторов: заголовок и точность значений
- Поэлементное раскрашивание диаграмм
- Пропуск отрисовки на начальных барах
- Ожидание данных и управление видимостью (DRAW_NONE)
- Мультивалютные и мультитаймфреймовые индикаторы
- Отслеживание формирования баров
- Тестирование индикаторов
- Ограничения и преимущества индикаторов
- Создание заготовки индикатора в Мастере MQL
Применение директив для настройки графических построений
До сих пор мы настраивали графические построения с помощью вызовов функции PlotIndexSetInteger. MQL5 позволяет сделать то же самое с помощью директив препроцессора #property. Основная разница между этими двумя способами заключается в том, что директивы обрабатываются на стадии компиляции и описанные с помощью них свойства считываются из исполняемого файла в процессе загрузки, еще до того как выполнится обработчик OnInit (если он есть). То есть, директивы предоставляют некоторые значения по умолчанию, которые, в принципе, можно и не менять, если в этом нет необходимости.
С другой стороны, вызов функции PlotIndexSetInteger позволяет менять свойства на лету, в процессе выполнения программы. Динамическое изменение свойств с помощью функций позволяет создавать более гибкие сценарии использования индикатора. Соответствие директив вызовам функции PlotIndexSetInteger приведено в следующей таблице.
Директивы |
Функция |
Описание |
---|---|---|
indicator_colorN |
PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, сolor) |
Цвет линии для графического построения |
indicator_styleN |
PlotIndexSetInteger(N-1, PLOT_LINE_STYLE, type) |
Стиль отрисовки из перечисления ENUM_LINE_STYLE |
indicator_typeN |
PlotIndexSetInteger(N-1, PLOT_DRAW_TYPE, type) |
Тип отрисовки из перечисления ENUM_DRAW_TYPE |
indicator_widthN |
PlotIndexSetInteger(N-1, PLOT_LINE_WIDTH, width) |
Толщина линии в пикселях (1 - 5) |
Обратите внимание, что нумерация графических построений в директивах ведется с 1, в то время как в функциях — с 0. Например, директива #property indicator_type1 DRAW_ZIGZAG эквивалентна вызову PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_ZIGZAG).
Также стоит отметить, что с помощью функции можно задать гораздо больше свойств, чем через директивы: в перечислении ENUM_PLOT_PROPERTY_INTEGER — 10 элементов.
Свойства, описанные директивами, доступны (видимы и могут редактироваться пользователем) в диалоге настройки параметров индикатора даже при первом его размещении на графике. В частности, сюда относятся толщина, цвет и стиль линий (закладка Цвета), количество и размещение уровней (закладка Уровни). Те же свойства, заданные функциями (и если они не имеют значений по умолчанию в директивах), появляются в диалоге только во второй и последующие разы.
Адаптируем индикатор IndHighLowClose.mq5 под использование директив. Новая версия находится в файле IndPropHighLowClose.mq5. За счет директив обработчик OnInit упрощается, OnCalculate не меняется.
#property indicator_chart_window
|
Внешне новый индикатор неотличим от старого.