Входные переменные
Все программы на MQL5 имеют возможность запросить у пользователя параметры при своем запуске. Исключение составляют лишь библиотеки, которые выполняются не самостоятельно, а в составе какой-либо другой программы (подробнее про Библиотеки — в посвященном им разделе).
Входные параметры MQL-программы — это глобальные переменные, описанные в коде со специальным модификатором input или sinput. Они становятся доступными в диалоге свойств программы, для ввода значений пользователем. Мы встречали описание входной переменной GreetingHour в скриптах первой части.
Особенностью входной переменной является то, что её значение не может быть изменено в коде программы, то есть она ведет себя аналогично константам.
Входные переменные могут быть только простых встроенных типов или перечислениями. При использовании перечисления ввод осуществляется через выпадающий список, а во всех остальных случаях через поле ввода. Недопустимо описывать как input: массивы, структуры или объединения, а также классы.
Разработчик может задать для входного параметра имя, отличное от идентификатора переменной, которое будет использоваться для показа пользователю в диалоге свойств программы. Подробное описание следует добавить в виде однострочного комментария после определения входного параметра.
input int HourStart = 0; // Начало торговли (час, включая):
|
Это позволяет сделать интерфейс более понятным, подробным и не подверженным синтаксическим ограничениям, которые MQL5 накладывает на идентификаторы. Кроме того, названия (как и комментарии) могут быть на национальном языке.
Например, вместе с MetaTrader 5 поставляется исходный код индикатора MQL5/Indicators/Examples/Custom Moving Average.mq5 со входными переменными:
input int InpMAPeriod = 13; // Period
|
Такое описание генерирует приведенный ниже диалог свойств.
Пример диалога свойств MQL-программы
Максимальная длина текстового представления входной переменной как пары "идентификатор=значение", включая символ "=", не должна превышать 255 символов (это ограничение накладывается внутренними протоколами обмена данными терминала и агентов тестирования). Данный лимит особенно важен для строковых переменных, поскольку значения остальных типов в него укладываются. Как мы знаем, длина идентификатора ограничена 63 символами, и потому на значение строковой входной переменной остается от 191 до 253 символов, в зависимости от длины идентификатора. Весь текст, превышающий объединенный порог 255 символов, может быть обрезан при передаче в тестер. Если в MQL-программу требуется ввести строку большего размера, используйте несколько полей ввода (с продолжением) или предоставьте пользователю возможность указать имя файла, из которого следует прочитать текст.
Для удобства работы с MQL-программами входные параметры можно объединять в именованные блоки с помощью ключевого слова group (точка с запятой в конце строки группы не обязательна).
input group "название_группы"
|
Все переменные с модификатором input, идущие следом за описанием группы (вплоть до описания другой группы или конца файла), визуально отображаются вложенным списком под заголовком группы в диалоге свойста MQL-программы. Более того, в тестере стратегий (применимом к индикаторам и экспертам) группы параметров можно раскрывать и сворачивать щелчком мыши.
Ключевое слово sinput является сокращением от "static input" — обе формы эквивалентны.
Переменные, описанные с модификаторами sinput или static input не могут участвовать в оптимизации. Их имеет смысл применять только в экспертах — это единственный тип MQL-программ, которые поддерживают оптимизацию. Подробнее об этом — в разделе о Тестировании и оптимизации экспертов.