Обсуждение статьи "Пользовательские индикаторы в MQL5 для начинающих"

 

Опубликована статья Пользовательские индикаторы в MQL5 для начинающих:

Любой новый предмет для новичка с первого взгляда кажется сложным для понимания. Нам кажется простым и ясным то, что мы уже знаем. Но мы просто не помним, что всем нам когда-то приходилось изучать с нуля, даже родной язык, на котором мы разговариваем. Так и язык MQL5, таящий в себе огромные возможности для написания торговых стратегий, можно начать изучать с базовых понятий и примеров. Мало-помалу, и настанет тот день, когда владение им будет таким же естественным и простым, как умение ходить. В этой статье на примере пользовательского индикатора SMA рассматривается взаимодействие технического индикатора с клиентским терминалом MetaTrader 5.

Автор: Nikolay Kositsin

 
Написано и рассказано на пятёрку. Прочитав очень хочется сваять что-то своё. Переписывать код каждый раз мало интересное занятие и авторы MQL5, понимая это, создали большую библиотеку встроенных функций. Вот одна из них: 

int  iMA(
   string symbol,                                     // имя символа
   ENUM_TIMEFRAMES period,                 // период
   int ma_period,                                    // период усреднения
   int ma_shift,                                       // смещение индикатора по горизонтали
   ENUM_MA_METHOD ma_method,         // тип сглаживания
   ENUM_APPLIED_PRICE applied_price     // тип цены или handle
   );
используя которую, можно получить тот же результат. Но. Как получить applied_price при использовании короткой формы int OnCalculate(). Иными словами, как добраться до значений во вкладке "Параметры" при инициализации индикатора?

Спасибо. 

 

Спасибо за статью! Очень полезно материал для новичка и
для того кто переходит с другого языка. 

 

 

Николай!

Не подскажешь мне почем у при попытке заполнить в цикле индикаторный массив по формуле  Mass[ i ]= Mass[ i+1]+А; где А переменная, компиляция проходит без ошибок а при присоединению к окну  выходит сообщение  array out of range (выход из размера массива)?


 
serg7771959:

Николай!

Не подскажешь мне почем у при попытке заполнить в цикле индикаторный массив по формуле  Mass[ i ]= Mass[ i+1]+А; где А переменная, компиляция проходит без ошибок а при присоединению к окну  выходит сообщение  array out of range (выход из размера массива)?


Потому что цикл нужно делать с учётом того, в какую ячейку последнюю запись будет делаться. Если размер массива Mass[], допустим, равен 10, цикл от нуля до 9 (это индекс последней ячейки массива), то при i==9, вы пытаетесь писать в ячейку с индексом 9+1. А ячейки 10 у массива нет. Соответственно и получаете выход за пределы массива.
Причина обращения: