Input змінні - Змінні - Основи мови - Довідник MQL4
Клас пам'яті input визначає зовнішню змінну. Модифікатор input вказується перед типом даних. Змінювати значення змінної з модифікатором input всередині mql4-програми не можна, такі змінні доступні лише читання. Змінювати значення input-змінних може лише користувач із вікна властивостей програми. Зовнішні змінні завжди переініціалізуються безпосередньо перед викликом OnInit().
//--- input parameters input int MA_Period= 13 ; input int MA_Shift = 0; input ENUM_MA_METHOD MA_Method=MODE_SMMA ;
Input змінні визначають вхідні параметри програми, вони доступні з вікна властивостей програми.

//--- input parameters input int InpMAPeriod=13; // Smoothing period input int InpMAShift=0; // Line horizontal shift input ENUM_MA_METHOD InpMAMethod=MODE_SMMA; // Smoothing method

Примітка: Масиви та змінні складних типів не можуть виступати як input- змінні.
Передача параметрів при виклику індикаторів користувача з mql4-програм
Якщо в індикаторі користувача використовується функція OnCalculate першого виду (тобто, індикатор вважається на одному масиві даних), то в якості останнього параметра при виклику такого індикатора користувача має виступати одне зі значень ENUM_APPLIED_PRICE або хендл іншого індикатора. При цьому всі параметри, що відповідають input-змінним, мають бути явно вказані.
Перерахування як input-параметр
Як input-змінні (вхідні параметри для mql4-програм) можна використовувати не тільки передбачені мовою MQL4 вбудовані перерахування, але й перерахування, задані користувачем. Наприклад, ми можемо створити перелік dayOfWeek, що описує дні тижня,та використовувати input-змінну для вказівки конкретного дня тижня не у вигляді цифри, а у більш звичному для користувача вигляді.
#property script_show_inputs //--- day of week enum dayOfWeek < S=0, // Sunday M=1, // Monday T=2, // Tuesday W=3, // Wednesday Th=4, // Thursday Fr=5, // Friday, St=6, // Saturday >; //--- input parameters input dayOfWeek swapday=W;
Для того, щоб при запуску скрипта користувач міг вибрати потрібне значення з вікна властивостей, ми використовуємо команду препроцесора #property script_show_inputs. Запускаємо скрипт на виконання та можемо вибрати зі списку одне із значень перерахувань dayOfWeek. Запускаємо скрипт EnumInInput та переходимо на закладку "Параметри". За замовчуванням значення swapday (день нарахування потрійного свопу) є середовище (W=3), але ми можемо задати будь-яке інше значення і використовувати це значення для зміни роботи програми.

Змінні з модифікатором sinput
Змінні з модифікатором input дозволяють як задавати значення зовнішніх параметрів під час запуску програм, але й відіграють значної ролі при оптимізації торгових стратегій у тестері. Кожна оголошена в експерті input-змінна, крім типу string, може брати участь у оптимізації.
sinput int layers=6; // Кількість шарів
static input int layers=6; // Кількість шарів
Змінна, оголошена модифікатором sinput, є вхідним параметром MQL4-программы, значення цього параметра можна змінювати під час її запуску. Але при цьому ця змінна не бере участі в процесі оптимізації вхідних параметрів, тобто не проводиться перебір її значень при пошуку найкращого набору параметрів за заданим критерієм.

На малюнку показано,що експерт має 5 зовнішніх параметрів, їх параметр "Кількість шарів" оголошено як sinput і дорівнює 6. Цей параметр неспроможна змінюватися у процедурі оптимізації торгової стратегії, йому можливо встановити потрібне значення, що й використовуватиметься. Поля Старт, Крок та Стоп для такої змінної недоступні для встановлення значень.
Таким чином, задавши для змінної модифікатор sinput, ми забороняємо користувачеві оптимізувати цей параметр. Це означає, що в тестері стратегій користувачеві терміналу стає недоступним задавати для неї початкове та кінцеве значення для автоматичного перебору у вказаному діапазоні у процесі оптимізації.
Але при цьому є один виняток із даного правила - sinput-змінні можна варіювати в задачах оптимізації за допомогою функції ParameterSetRange(). Ця функція створена спеціально для програмного управління простором доступних значень для будь-яких input-змінних, у тому числі й оголошених як static input (sinput). Інша функція ParameterGetInput() дозволяє при запуску оптимізації (в обробнику OnTesterInit()) отримати значення input-змінних і в разі потреби перевизначити крок зміни та діапазон, в межах якого буде перебиратися значення параметра, що оптимізується.
Таким чином, поєднання модифікатора sinput та двох функцій по роботі з input-параметрами дозволяє створювати гнучкі правила для завдання інтервалів оптимізації одних input-змінних залежно від значення інших input-змінних.