Два типа индикаторов: для главного и отдельного окна

Как известно, индикаторы в MetaTrader 5 способны отображать свои линии в двух местах: в главном окне поверх котировок или в отдельном окне, создаваемой под графиком котировок. Эти два режима являются взаимоисключающими: каждый индикатор проектируется либо для главного окна, либо для отдельного, но не может совместить оба способа.

Для тех случаев, когда от программы требуется визуализация данных и там, и там, существует несколько альтернативных решений. Например, проект можно реализовать в виде двух взаимодействующих индикаторов (техническая сторона взаимодействия остается открытой: это могут быть ресурсы, файлы, СУБД, или разделяемая память, доступная через DLL). Другой подход предполагает использовать индикаторные буфера в одном из окон, например, в нижней панели, а визуализацию на главном графике выполнять с помощью графических объектов.

Напомним, что как в основном окне, так и в нижней панели пользователи могут наносить несколько индикаторов. Если индикатор предназначен для работы в отдельной панели, то его перетаскивание мышью из Навигатора в основное окно приведет к автоматическому созданию новой панели под этот индикатор. Однако если в окне уже существует нижняя панель с другим индикатором, то новый можно перетащить туда же, совместив тем самым два или более индикатора. При этом возможны различные режимы масштабирования индикаторов в одном окне. По умолчанию, построения каждого индикатора масштабируются автоматически и независимо друг от друга на всю высоту панели, но это можно изменить (см. пример SubScaler.mq5 в разделе про события клавиатуры на графиках).

Выбор окна отображения индикатора производится с помощью одной из двух директив компиляции.

#property indicator_chart_window     // выводим индикатор в окно графика
#property indicator_separate_window  // выводим индикатор в отдельное окно

Разработчик индикатора должен вставить одну из них в начало исходного кода. Если ни одной из директив нет, по умолчанию предполагается вывод в основное окно, но компилятор выдает предупреждение. Мы видели это в предыдущем разделе. Далее в примерах мы будем обязательно указывать #property indicator_chart_window или #property indicator_separate_window.

Второе предупреждение при компиляции IndStub.mq5 касалось отсутствующей настройки буферов и диаграмм. Займемся им в следующем разделе.

Действие выпадающего списка Применить к в настройках индикатора зависит от того, для какого окна он разработан.
 
Индикатор для отдельного окна можно Применить к индикатору в подокне, но не к индикатору в главном окне.
 
Однако индикатор для главного окна можно Применить к любому индикатору, как к тому, что в главном окне, так и в подокне.