Ошибки, баги, вопросы - страница 1088

 
MoneyJinn:

После перекомпиляции индикатора при работе с динамическими массивами стала возникать ошибка "array out of range".

Раньше не было. Что делать? 

Если у вас в начале файла прописаны похожие строки

#include <File.mqh> , то скорее всего эти включаемые файлы были изменены с момента вашей предыдущей компиляции, вами или кем то другим

 
Olegts:

Если у вас в начале файла прописаны похожие строки

#include <File.mqh> , то скорее всего эти включаемые файлы были изменены с момента вашей предыдущей компиляции, вами или кем то другим

Включаемых файлов нет.

 
MoneyJinn:

Включаемых файлов нет.

тогда надо выкладывать индикатор, может кто взглянет на досуге)
 

Почему вообще при попытке внести что-либо в динамический массив может возникать ошибка "array out of range"? Он же динамический.

 

Массив B1[] Задан как соответствующий индикаторному буферу  

SetIndexBuffer(0,B1,INDICATOR_DATA); ArraySetAsSeries(B1,true);

Размером массива тут явно управляет не пользователь. 

 
MoneyJinn:
Почему вообще при попытке внести что-либо в динамический массив может возникать ошибка "array out of range"? Он же динамический.
это не значит, что он сам увеличивает свой размер, это делает функция ArrayResize, а дальше уже можно вносить данные, но не больше чем новый размер массива
 
MoneyJinn:
Почему вообще при попытке внести что-либо в динамический массив может возникать ошибка "array out of range"? Он же динамический.
(fcplm)
 
TheXpert:
(fcplm)

 

Кто ж его посадит?! Он же памятник! 

 

Ошибка платформы.

Если при заполнении массива B1 индикаторного буфера происходит повторный вызов процедуры SetIndexBuffer(0,B1,INDICATOR_DATA),

например, при инициализации индикатора, то последующая попытка что-либо записать в массив B1 вызывает ошибку "array out of range".

При однократном, единственном вызове процедуры SetIndexBuffer(0,B1,INDICATOR_DATA) все работает нормально.

Раньше такого не было. 

 

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
MoneyJinn:

Ошибка платформы.

Если при заполнении массива B1 индикаторного буфера происходит повторный вызов процедуры SetIndexBuffer(0,B1,INDICATOR_DATA),

например, при инициализации индикатора, то последующая попытка что-либо записать в массив B1 вызывает ошибку "array out of range".

При однократном, единственном вызове процедуры SetIndexBuffer(0,B1,INDICATOR_DATA) все работает нормально.

Раньше такого не было. 

А зачем вы многократно это делаете?

Привязка буфера означает его зачистку и подготовку к динамической привязке к последующим расчетам. Если второй раз вызвать, то предыдущий буфер будет очищен и заполнится только на очередном вызове перерасчета индикатора.

 
Renat:

А зачем вы многократно это делаете?

Привязка буфера означает его зачистку и подготовку к динамической привязке к последующим расчетам. Если второй раз вызвать, то предыдущий буфер будет очищен и заполнится только на очередном вызове перерасчета индикатора.

Это была стандартная полная инициализация индикатора, которая происходит при его первом запуске и осуществляется через Oninit().

Иногда при обновлении истории и т.д. ее также необходимо проводить.

Никто и не думал, что от повторной инициализации индикатора через Oninit() часть массивов просто перестанет отзываться.

Причина обращения: