- Дескрипторы и счетчики владельцев индикаторов
- Простой способ создания экземпляров индикаторов: iCustom
- Проверка количества просчитанных баров: BarsCalculated
- Получение данных таймсерии из индикатора: CopyBuffer
- Поддержка множества символов и таймфреймов
- Обзор встроенных индикаторов
- Использование встроенных индикаторов
- Расширенный способ создания индикаторов: IndicatorCreate
- Гибкое создание индикаторов с помощью IndicatorCreate
- Обзор функций управления индикаторами на графике
- Комбинирование вывода в главное окно и вспомогательное
- Чтение данных из диаграмм, имеющих сдвиг
- Удаление экземпляров индикаторов: IndicatorRelease
- Получение настроек индикатора по его дескриптору
- Определение источника данных для индикатора
Получение настроек индикатора по его дескриптору
Иногда MQL-программе необходимо узнать параметры запущенного экземпляра индикатора. Это могут быть сторонние индикаторы на графике или дескриптор, переданный из основной программы в библиотеку или заголовочный файл. Для этой цели в MQL5 предусмотрена функция IndicatorParameters.
int IndicatorParameters(int handle, ENUM_INDICATOR &type, MqlParam ¶ms[])
Функция возвращает по указанному дескриптору количество входных параметров индикатора, а также их типы и сами значения.
При успешном выполнении функция заполняет переданный ей массив params, а тип индикатора сохраняется в параметре type.
В случае ошибки функция возвращает -1.
В качестве примера работы с данной функцией усовершенствуем индикатор UseDemoAllLoop.mq5, представленный в разделе про Удаление экземпляров индикаторов. Новую версию назовем UseDemoAllParams.mq5.
Как вы помните, мы там последовательно создавали в цикле некоторые встроенные индикаторы по списку и при этом оставляли список параметров пустым, что приводит к тому, что индикаторы используют некие, неизвестные нам значения по умолчанию. В связи с этим мы выводили в комментарий на графике обобщенный прототип: с названием, но без конкретных значений.
// UseDemoAllLoop.mq5
|
Сейчас у нас появилась возможность по дескриптору индикатора узнать его параметры и отобразить их пользователю.
// UseDemoAllParams.mq5
|
Преобразование массива MqlParam в строку поручено выделенному классу MqlParamStringer (см. файл MqlParamStringer.mqh).
class MqlParamStringer
|
Откомпилировав и запустив новый индикатор, вы можете убедиться, что в левом верхнем углу графика теперь отображается конкретный список параметров визуализируемого индикатора.
Для единственного пользовательского индикатора из списка (LifeCycle) первый параметр будет содержать путь и имя файла индикатора. Второй параметр описан в исходном коде как целое число. А вот третий параметр интересен тем, что он неявно описывает свойство Применить к, присущее всем индикаторам с краткой формой обработчика OnCalculate. В данном случае, по умолчанию, индикатор применяется к PRICE_CLOSE (значение 1).
Initializing LifeCycle() EURUSD, PERIOD_H1 Handle=10 [type] [integer_value] [double_value] [string_value] [0] 14 0 0.00000 "Indicators\MQL5Book\p5\LifeCycle.ex5" [1] 7 0 0.00000 null [2] 7 1 0.00000 null Initializing iAlligator_jawP_jawS_teethP_teethS_lipsP_lipsS_method_price() EURUSD, PERIOD_H1 iAlligator_jawP_jawS_teethP_teethS_lipsP_lipsS_method_price requires 8 parameters, 0 given Handle=10 [type] [integer_value] [double_value] [string_value] [0] 7 13 0.00000 null [1] 7 8 0.00000 null [2] 7 8 0.00000 null [3] 7 5 0.00000 null [4] 7 5 0.00000 null [5] 7 3 0.00000 null [6] 7 2 0.00000 null [7] 7 5 0.00000 null Initializing iAMA_period_fast_slow_shift_price() EURUSD, PERIOD_H1 iAMA_period_fast_slow_shift_price requires 5 parameters, 0 given Handle=10 [type] [integer_value] [double_value] [string_value] [0] 7 9 0.00000 null [1] 7 2 0.00000 null [2] 7 30 0.00000 null [3] 7 0 0.00000 null [4] 7 1 0.00000 null
|
Согласно журналу, настройки встроенных индикаторов также соответствуют умолчаниям.