- Локальные переменные
- Формальные параметры
- Статические переменные
- Глобальные переменные
- Input переменные
- Extern переменные
- Инициализация переменных
- Область видимости и время жизни переменных
- Создание и уничтожение объектов
Input переменные
Класс памяти input определяет внешнюю переменную. Модификатор input указывается перед типом данных. Изменять значение переменной с модификатором input внутри mql5-программы нельзя, такие переменные доступны только для чтения. Изменять значения input-переменных может только пользователь из окна свойств программы. Внешние переменные всегда переинициализируются непосредственно перед вызовом OnInit().
Максимальная длина имени input-переменных составляет 63 символа. При этом для входного параметра типа string максимальная длина значения (длина строки) может иметь размер от 191 до 253 символов (смотри Примечание). Минимальная длина – 0 символов (значение не задано).
Пример:
//--- input parameters
|
Input переменные определяют входные параметры программы, они доступны из окна свойств программы.
Существует возможность задать иной способ отображения имен входных параметров на закладке "Inputs". Для этого используется строчный комментарий, который должен располагаться после описания входного параметра в той же строке. Таким образом, входным параметрам можно сопоставить более понятные для пользователя имена.
Пример:
//--- input parameters
|
Примечание: Массивы и переменные сложных типов не могут выступать в качестве input-переменных.
Примечание: Длина строчного комментария для Input переменных не может превышать 63 символа.
Примечание: Для input-переменных типа string ограничение на длину значения (длину строки) задается следующими условиями:
- значение параметра представлется строкой "имя_параметра=значение_параметра"(символ '=' учитывается),
- максимальная длина представления 255 символов (total_length_max=255 или 254 символа без учета '='),
- максимальная длина имени строкового параметра parameter_name_length = 63 символа.
Таким образом, максимальный размер строки для string-параметра можно вычислить по формуле:
parameter_value_length=total_length_max-parameter_name_length=254-parameter_name_length |
Это дает максимальный размер строки от 191 (parameter_name_length=63) до 253 символов (parameter_name_length=1).
Передача параметров при вызове пользовательских индикаторов из mql5-программ #
Пользовательские индикаторы вызываются при помощи функции iCustom(). При этом после имени пользовательского индикатора должны идти параметры в точном соответствии с объявлением input-переменных данного пользовательского индикатора. Если параметров указывается меньше, чем объявлено input-переменных в вызываемом пользовательском индикаторе, то недостающие параметры заполняются значениями, указанными при объявлении переменных.
Если в пользовательском индикаторе используется функция OnCalculate первого вида (то есть, индикатор считается на одном массиве данных), то в качестве последнего параметра при вызове такого пользовательского индикатора должно выступать одно из значений ENUM_APPLIED_PRICE либо хэндл другого индикатора. При этом все параметры, соответствующие input-переменным, должны быть явно указаны.
Перечисления в качестве input-параметра
В качестве input-переменных (входных параметров для mql5-программ) можно использовать не только предусмотренные языком MQL5 встроенные перечисления, но и перечисления, заданные пользователем. Например, мы можем создать перечисление dayOfWeek, описывающее дни недели, и использовать input-переменную для указания конкретного дня недели не в виде цифры, а в более привычном для пользователя виде.
Пример:
#property script_show_inputs
|
Для того чтобы при запуске скрипта пользователь мог выбрать нужное значение из окна свойств, мы используем команду препроцессора #property script_show_inputs. Запускаем скрипт на исполнение и можем выбрать из списка одно из значений перечислений dayOfWeek. Запускаем скрипт EnumInInput и переходим на закладку "Параметры". По умолчанию, значение параметра swapday (день начисления тройного свопа) является среда (W=3), но мы можем задать любое другое значение и использовать это значение для изменения работы программы.
Количество возможных значений перечисления ограничено. Поэтому для выбора входного значения используется выпадающий список. В качестве значений, показываемых в списке, используются мнемонические имена членов перечисления. Если же мнемоническому имени сопоставлен комментарий, как это показано в нашем примере, то вместо мнемонического имени используется содержимое комментария.
Каждое значение из перечисления dayOfWeek имеет свое значение от 0 до 6, но в списке параметров будут показаны комментарии, указанные для каждого значения. Это дает дополнительную гибкость для написания программ с понятными описаниями входных параметров.
Переменные с модификатором sinput #
Переменные с модификатором input позволяют не только задавать значения внешних параметров при запуске программ, но также играют большую роль при оптимизации торговых стратегий в тестере. Каждая объявленная в эксперте input-переменная, за исключением типа string, может участвовать в оптимизации.
В некоторых случаях бывает необходимо исключить некоторые внешние параметры программы из формирования области всех возможных проходов в тестере. Специально для таких случаев существует модификатор памяти sinput. sinput - это сокращенное написание объявления статической внешней переменной: sinput = static input. То есть такое объявление в коде советника
sinput int layers=6; // Количество слоев |
будет эквивалентно полному объявлению
static input int layers=6; // Количество слоев |
Переменная, объявленная с модификатором sinput, является входным параметром MQL5-программы, значение этого параметра можно изменять при её запуске. Но при этом данная переменная не участвует в процессе оптимизации входных параметров, то есть не производится перебор её значений при поиске наилучшего набора параметров по заданному критерию.
На рисунке показано, что эксперт имеет 5 внешних параметров, из них параметр "Количество слоев" объявлен как sinput и равен 6. Этот параметр не может изменяться в процедуре оптимизации торговой стратегии, для него возможно установить нужное значение, которое и будет использоваться. Поля Старт, Шаг и Стоп для такой переменной не доступны для установки значений.
Таким образом, задав для переменной модификатор sinput, мы запрещаем пользователю оптимизировать данный параметр. Это значит, что в тестере стратегий пользователю терминала становится недоступным задавать для неё начальное и конечное значения для автоматического перебора в указанном диапазоне в процессе оптимизации.
Но при этом есть одно исключение из данного правила – sinput-переменные можно варьировать в задачах оптимизации с помощью функции ParameterSetRange(). Данная функция создана специально для программного управления пространством доступных значений для любых input-переменных, в том числе и объявленных как static input (sinput). Другая функция ParameterGetRange() позволяет при запуске оптимизации (в обработчике OnTesterInit()) получить значения input-переменных и в случае необходимости переопределить шаг изменения и диапазон, в пределах которого будет перебираться значение оптимизируемого параметра.
Таким образом, сочетание модификатора sinput и двух функций по работе с input-параметрами позволяет создавать гибкие правила для задания интервалов оптимизации одних input-переменных в зависимости от значения других input-переменных.
Группировка входных параметров #
Для удобства работы с MQL5-программами входные параметры можно разбивать на именованные блоки с помощью ключевого слова group. Это позволяет визуально отделить одни параметры от других на основе заложенной в них логики.
input group "Имя группы"
|
Все входные параметры после такого объявления визуально объединяются в указанную группу, что позволяет упростить для пользователя MQL5-программы настройку параметров при запуске на графике или в тестере стратегий. Указание каждой группы действует до появления нового объявления группы:
input group "Имя группы #1"
|
Пример советника, у которого блок входных параметров разбит по их назначению:
input group "Signal"
|
При запуске такого советника в тестере стратегий появляется возможность двойным кликом по имени группы сворачивать и разворачить блок входных параметров, а также одним кликом по чекбоксу группы выделять все её параметры для оптимизации.
Смотри также