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

 
serg7771959:

Николай!

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


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

Николай, спасибо. Это отличный учебник!
Но я думаю, что переменная

const int begin

в коде всегда будет иметь нулевое значение. Это важно для расчета?

 
igorsds:

Николай, спасибо. Это отличный учебник!
Но я думаю, что переменная

в коде всегда будет иметь нулевое значение. Это важно для расчета?

Значение "begin" будет разным в зависимости от того, к какому индикатору применяется. Если вы применяете RSI, то"begin" будет 14, например.

 

При первой попытке компиляции может возникнуть ошибка буфера. Поэтому, пожалуйста, измените количество буферов:

#property indicator_buffers 2

В дальнейшем вы можете вернуться к 1 (одному) буферу:

#property indicator_buffers 1

 
Как совместить с fibo zigzag
 

Я не понимаю. Предположим,

rates_total == MA_Period - 1

и это первый вызов функции, поэтому

prev_calculated == 0

а также begin == 0

тогда условие в первом if(rates_total < MA_Period - 1 + begin) оценивается как false

тогда

first = MA_Period - 1 будет выполнено

но тогда НЕТ РАСЧЕТОВ, потому что условие в первом цикле for оценивается как ложное.

Я думаю, что первое условие if должно быть следующим

if( rates_total < MA_Period + begin )

Я что-то упустил?

 

И еще одно. Почему я должен начинать расчеты с бара с номером (prev_calculated - 1), если я уже рассчитал индикатор prev_calculated раз?

Например, я рассчитал индикатор 5 раз для баров 0, 1, 2, 3 и 4. Мне не нужно снова рассчитывать его на баре 4. Я должен продолжить с бара 5.

 
LRDPRDX #:

И еще одно. Почему я должен начинать расчеты с бара с номером (prev_calculated - 1), если я уже рассчитывал индикатор prev_calculated раз?

Например, я рассчитал индикатор 5 раз для баров 0, 1, 2, 3 и 4. Мне не нужно снова рассчитывать его на баре 4. Я должен продолжить с бара 5.

Хорошо. Я думаю, что я не прав, потому что 4-й бар мог измениться с момента моего последнего расчета. Так что (prev_calculated - 1) выглядит правильно.
 
Мошенничество в порядке вещей. Bravi