Читати Мова програмування MQL5 Просунуте використання торгової платформи MetaTrader 5 -

  • ЖАНРИ 358
  • АВТОРИ 249 770
  • КНИГИ 567 106
  • СЕРІЇ 20 859
  • КОРИСТУВАЧІ 514 788

Також користувач може змінити параметри індикатора після приєднання індикатора до графіка, клацнувши правою кнопкою мишки на індикаторі та вибравши властивості індикатора.

У коді індикатора такі параметри задаються Input змінними модифікатором input, який вказується перед типом даних. Як правило, Input змінні оголошуються відразу після властивостей індикатора.

Наприклад, для індикатора MACD:

input int InpFastEMA=12; // Fast EMA period

input int InpSlowEMA=26; // Slow EMA period

input int InpSignalSMA=9; // Signal SMA period

input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Applied price

mql5

Тут уже відображаються імена змінних.

Тут також видно, що вхідними параметрами можуть бути не лише окремі змінні, але й перерахування, які відображаються у вигляді списків, що випадають.

Для індикатора MACD використовується вбудований перелік ENUM_APPLIED_PRICE, але можна також визначити свій перелік.

У довіднику наводиться відповідний приклад:

input dayOfWeek swapday=W;

У цьому прикладі команда #property script_show_inputs використовується для скриптів, її можна опустити для індикаторів.

Основна відмінність Input змінних від інших типів змінних полягає в тому, що змінити їх значення може лише користувач у діалоговому вікні індикатора.

Якщо спробувати змінити значення вхідного параметра в коді індикатора, при компіляції виникне помилка:

Читати

Тому, якщо ви хочете при розрахунках використовувати змінене значення вхідного параметра, потрібно використовувати проміжну змінну:

mql5

Крім Input змінних MQL5-код ​​використовує локальні змінні, статичні змінні, глобальні змінні та Extern змінні.

З локальними змінними в принципі все зрозуміло, вони оголошуються в блоці коду, наприклад, в циклі або функції, там ініціалізуються, і, після виконання блоку коду, пам'ять, виділена під локальні змінні в програмному стеку, звільняється.

Тут особливо слід зазначити, що для локальних об'єктів, створених за допомогою оператора new, наприкінці блоку коду потрібно застосувати оператор delete для звільнення пам'яті.

Глобальні змінні, як правило, оголошуються після властивостей індикатора, вхідних параметрів та масивів буферів індикатора перед функціями.

Глобальні змінні видно в межах усієї програми, їх значення може бути змінено в будь-якому місці програми і пам'ять, що виділяється під глобальні змінні поза програмним стеком, звільняється при розвантаженні програми.

Тут видно, що Input змінні це самі глобальні змінні, крім опції – їх значення може бути змінено будь-де програми.

Якщо глобальну або локальну змінну оголосити зі специфікатором const – це не дозволить змінювати значення цієї змінної у процесі виконання програми.

Статичні змінні визначаються модифікатором static, що вказується перед типом даних.

Зі статичними змінними все трохи складніше, але найлегше їх зрозуміти, порівнюючи статичні змінні з локальними та глобальними змінними.

У принципі, статична змінна, оголошена там, де й глобальна змінна, нічим не відрізняється від глобальної змінної.

Хитрість починається, якщо локальну змінну оголосити з модифікатором static.

У цьому випадку, після виконанняблоку коду пам'ять, виділена під статичну змінну, не звільняється. І при наступному виконанні того ж блоку коду попереднє значення статичної змінної можна використовувати.

Хоча область видимості такої статичної змінної обмежується тим самим блоком коду, в якому вона була оголошена.

Extern змінні це аналог статичних глобальних змінних. Не можна оголосити локальну змінну із модифікатором extern.

Відмінність Extern змінних від статичних глобальних змінних найпростіше продемонструвати на індикаторі MACD.

Індикатор MACD має файл MovingAverages:

розташований у папці Include.

Якщо у файлі MovingAverages та файлі MACD одночасно оголосити Extern-змінну:

то при компіляції обох файлів все пройде успішно, і змінну можна буде використовувати.

Якщо ж у файлі MovingAverages та файлі MACD одночасно оголосити статичну глобальну змінну:

то при компіляції обох файлів виникне помилка:

програмування

Крім команди #include корисною є також директива #define, яка дозволяє робити підстановку виразу замість ідентифікатора, наприклад:

Почнемо з цитати:

HANDLE ідентифікує об'єкт, яким Ви можете маніпулювати. Джеффрі РІХТЕР "Windows для професіоналів".

Таким чином, отримавши хендл деякого індикатора, ми можемо використовувати дані для побудови свого індикатора.

Тут хендли індикаторів – це покажчики на індикатор ковзного середнього з різними періодами 12 та 26.

Оголосивши ці змінні, ми звичайно нічого не отримуємо, оскільки об'єкта індикатора, дані якого ми хочемо використовувати, ще не існує.

Створити у глобальному кеші клієнтського терміналу копіювідповідного технічного індикатора та отримати посилання на неї можна декількома способами.

Якщо це стандартний індикатор, найпростіше отримати його хендл можна за допомогою стандартної функції для роботи з технічними індикаторами.

Стандартна функція для індикатора ковзного середнього це:

string symbol // ім'я символу

ENUM_TIMEFRAMES period, // період

int ma_period, // період усереднення

int ma_shift // Зміщення індикатора по горизонталі

ENUM_MA_METHOD ma_method // тип згладжування

ENUM_APPLIED_PRICE applied_price // Тип ціни або handle

І в індикаторі MACD хендли індикатора ковзного середнього виходять за допомогою виклику функції iMA функції OnInit ():