Здравствуйте, помогите пожалуйста решить данную проблему
В терминале, на таймфрейме Неделя (да и на других таймфремах), после прохождения всех баров , появляется ошибка – array out of range in ‘indic.mq5’ (59,27)
Похоже что-то с размерностью массива, подскажите как исправить, заранее спасибо
//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2021, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property copyright "1" #property link "1" #property version "1.00" #property indicator_chart_window int OnInit() { return(INIT_SUCCEEDED); } int OnCalculate( const int bars, const int counted, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tickVolume[], const long &volume[], const int &spread[]) { int start = MathMax(counted - 1, 1); datetime time1; long volume1; double high1; double low1; double open1; double close1; CalculateVolume1(start, bars, time1, volume1, high1,low1, open1, close1); return(bars); } int CalculateVolume1(int start, int bars,datetime time1, long volume1, double high1, double low1, double open1, double close1) { MqlRates rates_week2[]; int _ratesCopied3=CopyRates(_Symbol,PERIOD_W1,start,bars,rates_week2); for(int i = start; i < bars ; i++) { time1 = rates_week2[i].time; - указывает что ошибка здесь Print(time1); } return(0); }
I am trying to loop through an array of close prices to get the rate of return of each asset. The code that I wrote is:
´´´
void Returns(MqlRates &rt[], int a_size)
{
double rtacao[];
ArraySetAsSeries(rtacao, true);
ArrayResize(rtacao,(a_size-1));
for(int i=1;i<=a_size;i++)
{
rtacao[i]=MathLog(rt[i].close/rt[i-1].close);
}
return;
}
void OnStart()
{
int nacoes=144;
string acao[];
count_instr("ativos.txt",nacoes);
ArrayResize(acao,nacoes);
load_instr("ativos.txt",nacoes,acao,100);
MqlRates rates[];
ArraySetAsSeries(rates,true);
ArrayResize (rates,100);
for (int i=0;i<nacoes;i++)
{
SymbolSelect(acao[i],true);
if(CopyRates(acao[i],APeriod,0,100,rates)!=100)
{
Print("CopyRates of ",acao[i]," failed, no history");
//Erase(acao, i);
//nacoes=nacoes-1;
} else
{
Returns(rates, 100);
}
}
}
´´´
I am getting the following error message:
2019.12.30 08:11:57.983 OnStart (IBOV,D1) array out of range in ‘OnStart.mq5’ (39,15)
That refers to the array – rtacao[] – in the calculation of the return. I couldn’t see what I am doing wrong in the loop. Can someone help me?
input ulong Slippage = 3;
Above code is what am having on line 57. The code is from an EA and i experienced this problem on Volatility 50 Index.
asked Feb 23, 2020 at 3:15
2
Load 5 more related questions
Show fewer related questions
Страница 4 из 5
-
Евгений, эту ошибку исправили еще в январе. И нашел ее AlexStal.
-
nen
Профи форумаРашид, это хорошо. А как переустановить индикаторы. Необходимо полностью сносить их и очередной апгрэйд установит новые? Или терминал надо переустанавливать?
И еще. Надеюсь, критика, пойдет на пользу общему делу. У меня нет задачи сделать компании метаквотес плохо. Есть задача, чтобы все работало хорошо.
Действительно, в МТ5 заложен очень мощный потенциал. Можно делать чудеса. -
Все поставляемые с терминалом примеры на MQL5(эксперты, индикаторы, скрипты и классы Стандартной библиотеки) обновляются автоматически через систему LiveUpdate.
-
Может Вы это и называете критикой, но для меня это выглядит как необоснованный слив негатива без знания материала.
Хороших слов от Вас я не жду, но для объективности картины сообщил о том, что ошибку с ZigZag’ом (только в одном из двух была) исправили уже как месяц назад. -
nen
Профи форумаЧерез систему LiveUpdate не обновляется. У меня последний билд выдал такие ошибки.
-
nen
Профи форумаИногда необходимо буквально сплясать на голове, чтобы Ваша компания услышала. Как говорится, что посеешь, то и пожнешь.
Почему в конце 2005 года многие ушли с форума Альпари? Где Вы, Рашид, были одним из модераторов…
Примерно такая же причина. Глухота модераторов. И сейчас на Вашем форуме – мкл4 – некоторые модераторы, когда стали модераторами, проблемы из пальца высасывают. Модераторы общественные, я имею в виду, а не от компании.
Ну да ладно. У Вас нельзя высказаться. Здесь и на Пауке можно. Только лучше для Вас, если все-таки высказывания будут на Вашем форуме. Цунами меньшего размера будут. Я там не хочу появляться. И создавать еще ник там не буду.Чтобы не было такого негатива, Вашей компании необходимо более ответственно относиться к внешним контактам, более ответственно выпускать новшества, более понятно делать описания Ваших программ. Можете воспринимать все здесь сказанное как угодно. Но это правила ведения бизнеса. К сожалению, многие правила грамотного ведения бизнеса для Вашей компании не известны. Поэтому у Вашей компании часто выходят напряженные отношения почему-то с теми, кто что-то делает, а не поддакивает Вам. Среди забаненных на Вашем форуме есть достаточное количество людей, кто действительно что-то делает.
-
nen
Профи форумаИ правильно делаете, что хороших слов не ждете.
Я не поленился, скачал на чистый компьютер текущую версию – 420 билд – метатрейдера.
Поставил для начала ZigZag на график с параметрами
Не поленюсь четко расписать параметрыExtDepth=12;
ExtDeviation=5;
ExtBackstep=13;Зигзаг на график не выводится. Во вкладке эксперты видим%
2011.03.18 22:54:39 ZigZag (EURUSD,H1) Array out of range in ‘ZigZag.mq5’ (209,20)
Тоже самое и с индикатором ZigzagColor
2011.03.18 23:01:01 ZigzagColor (EURUSD,H1) Array out of range in ‘ZigzagColor.mq5’ (189,20)
Рашид, какую Вы говорите исправили ошибку в январе по подсказке AlexStal ????
=================
И это характерная ситуация для сотрудников компании метаквотес. Необходимо за них проделать всю работу по поиску ошибок, разжевать так, чтобы уже не отвертеться им.
То есть буквально прижать к стенке. И только в этом случае они скрепя зубами признают ошибку и, может быть, исправят ее.Несколько дней назад я здесь разместил сообщение об ошибке. ВМЕСТО ТОГО ЧТОБЫ ПРОВЕРИТЬ, Рашид… все видят, что он ответил.
И так всегда. Примерно такое же было и у них на форуме. Напсал им про ошибки с картинками. На это Рашид сказал, что я не удосужился привести аргументы…
Что тут скажешь. Плохо, когда в компании ленивые люди трудятся. Приходится за них делать работу сторонним наблюдателям, вроде меня и других – бесполезных людей с точки зрения компании метаквотес.Надеюсь, что это сообщение Рашид проигнорирует. Все таки неприятно на такие сообщения отвечать…
-
nen
Профи форумаСтало понятно, почему в МТ5 зигзаг часто на новых тиках пропадает. Похоже, в МТ5 также происходит переинициализация индикаторных буферов.
Мдя.
Придется индикаторные буферы не использовать, а рисовть зигзаги с помощью отрезков трендовых линий, чтобы не было мелькания индикатора. От этого мелькания через некоторое время становится дурно. -
nen
Профи форумаДаже не только зигзаг пропадает на новых тиках, но и уровни фибо. То есть любые графические построения. Это уже перебор.
-
Да, я невнимательно посмотрел Ваш пост, я думал речь шла об ошибке в одном из зигзагов, в котором при малом количестве баров в истории (например, на месяцовках) вылетала ошибка
Вы же привели типичную историю с японской бензопилой и сибирскими мужиками. Зачем в параметры зигзага засовывать ExtDepth<ExtBackstep? Если человек не понимает как устроен зигзаг, то не стоит и жаловаться, что он пропадает, и тем более фибы на его основе. Вы как разработчик ZUP’а должны знать эти тонкости и при необходимости защищаться от таких ситуаций.
Я не думаю, что мы должны ставить такую защиту в наш пользовательский зигзаг, это бессмысленно.Для тех кто не знает назначение параметров ExtDepth и ExtBackstep, отсылаю к первому своему описанию – http://forum.viac.ru/viewtopic.php?t=2141&highlight=zigzag
-
nen
Профи форумаНасчет смысла ExtDepth<ExtBackstep надо проверить, как будет прорисовываться при таких параметрах зигзаг.
С таким соотношением параметров много людей работает. Я не проверял, насколько это оправдано. По правде сказать, у меня вызывало вопрос такое применение параметров. Но руки не доходили до проверки оправданности… Попробую на днях сделать проверку. Результаты, если будут, выложу здесь.
Это важно.В ZUP и мультизигзагах с таким соотношением параметров все работает.
А вот это совсем другое. Я здесь говорю про МТ5. Зигзаг поставил с нормальными параметрами. То есть он прорисовывается. Но по мере поступления котировок происходит мерцание зигзага. То есть он периодически пропадает. Появляется или сам через некоторое время, или после сдвигания графика.
Фибы я просто накинул на график параллельно с зигзагом. ТО есть фибы от зигзага в данном случае нисколько не зависели. И фибы также мерцали. То есть и зигзаг, и фибы синхронно пропадали. И про это мерцание зигзага еще примерно год назад на Вашем форуме кто-то говорил.
Я тогда в сервисдеске (или как там тогда это называлось), кажется, тоже говорил, когда зигзаг обсуждали. Но эта тема зависла… Как-то неактуально тогда было.Далее также при повторном обнаружении этого мерцания подробно здесь опишу. В рабочем порядке.
-
nen
Профи форумаДальнейшее развитие ZUP возможно в бОльшей степени только под МТ5. В МТ4 или очень сложно, или невозможно некоторые задачи реализовать. К тому же, ZUP необходимо кардинально почистить.
Есть следующие темы для реализации.
1) Супермультизигзаг – на его основе ZUP
2) Паттерны Песавенто
3) Бабочки Гартли.
…
4) Полный комплект вил Эндрюса, который в ZUP под МТ4 реализован, с добавлением того, что нельзя реализовать в МТ4.Семинар, проведенный в минувшие выходные (19-20 марта) Putnik-ом, позволил лучше увидеть возможности применения вил Эндрюса.
Получалось ранее сапожник без сапог. Создал комплект вил Эндрюса в ZUP, а сам его не применяю. А возможности заложены в этот инструмент, как оказывается, просто фантастические…5) Некоторые другие инструменты для графического анализа.
Это пока все больше пожелания самому себе. Сделать было бы интересно… Но не будем загадывать.
-
nen
Профи форумаЭто не бессмыслено.
Возьму кусок кода из мультизигзага, использующего алгоритм стандартного зигзага. Я имею в виду под стандартным зигзаг, включенный поставку метатрейдера.// Начало первого большого цикла for(bar=limit1; bar>=0; bar--) { //--- low if (bar<bar_l) { j=iLowest(NULL,GrossPeriod_[x],MODE_LOW,ExtDepth_[x],bar); val=iLow(NULL,GrossPeriod_[x],j); if(val==lastlow) val=0.0; else { lastlow=val; if((iLow(NULL,GrossPeriod_[x],bar)-val)>deviation) val=0.0; else { for(back=1; back<=ExtBackstep_[x]; back++) { if(val<LB[j+back])LB[j+back]=0.0; } } } if (j==bar) LB[j]=val; } //--- high if (bar<bar_h) { j=iHighest(NULL,GrossPeriod_[x],MODE_HIGH,ExtDepth_[x],bar); val=iHigh(NULL,GrossPeriod_[x],j); if(val==lasthigh) val=0.0; else { lasthigh=val; if((val-iHigh(NULL,GrossPeriod_[x],bar))>deviation) val=0.0; else { for(back=1; back<=ExtBackstep_[x]; back++) { if(val>HB[j+back])HB[j+back]=0.0; } } } if (j==bar) HB[j]=val; } } // Конец первого большого цикла
Берем участок для поиска минимумов:
-
nen
Профи форумаif (bar<bar_l) { j=iLowest(NULL,GrossPeriod_[x],MODE_LOW,ExtDepth_[x],bar); val=iLow(NULL,GrossPeriod_[x],j); if(val==lastlow) val=0.0; else { lastlow=val; if((iLow(NULL,GrossPeriod_[x],bar)-val)>deviation) val=0.0; else { for(back=1; back<=ExtBackstep_[x]; back++) { if(val<LB[j+back])LB[j+back]=0.0; } } } if (j==bar) LB[j]=val; }
Минимум может быть найден и на самом последнем баре – Bars-1
функцией j=iLowest(NULL,GrossPeriod_[x],MODE_LOW,ExtDepth_[x],bar); -
nen
Профи форумаДалее следует цикл:
for(back=1; back<=ExtBackstep_[x]; back++) { if(val<LB[j+back])LB[j+back]=0.0; }
И если нет в коде ограничения на выход за пределы массива, то получаем вышеприведенную ошибку.
Вывод: смысл в защите есть!!!
У меня это делается с помощью задания ограничения :
limit=iBars(NULL,GrossPeriod_[i])- (ExtBackstep_[i]+ExtDepth_[i]);
-
nen
Профи форумаЕще раз проанализировал логику зигзага и вынужден не согласиться с выделенным красным цветом.
Берем участок для поиска минимумов:
if (bar<bar_l) { j=iLowest(NULL,GrossPeriod_[x],MODE_LOW,ExtDepth_[x],bar); val=iLow(NULL,GrossPeriod_[x],j); if(val==lastlow) val=0.0; else { lastlow=val; if((iLow(NULL,GrossPeriod_[x],bar)-val)>deviation) val=0.0; else { for(back=1; back<=ExtBackstep_[x]; back++) { if(val<LB[j+back])LB[j+back]=0.0; } } } if (j==bar) LB[j]=val; }
Первоначальный поиск экстремумов на истории проводим в окне ExtDepth_[x].
Фильтрация экстремумов производится фактически в окне ExtBackstep_[x]+ExtDepth_[x]. Это следует из предыдущих постов.
Увеличение значения ExtBackstep_[x] просто увеличает окно, в котором применяется фильтр, заданный параметром deviation.Первоначальный отбор экстремумов производится по одному алгоритму:
грубо говоря функцией j=iLowest(NULL,GrossPeriod_[x],MODE_LOW,ExtDepth_[x],bar);
Фильтрация уже найденных на первом отборе эксремумов производится по другому алгоритму:
for(back=1; back<=ExtBackstep_[x]; back++) { if(val<LB[j+back])LB[j+back]=0.0; }
ВременнЫе окна для первого и второго алгоритмов могут быть разными.
Получается, что соотношение ExtBackstep>ExtDepth имеет право на существование.
-
nen
Профи форумаИз всего вышесказанного следует:
1) защиту в пользовательский зигзаг ставить надо;
2) значение параметра ExtBackstep может быть каким угодно, в том числе и больше значения параметра ExtDepth.Просто Рашид не разобрался с логикой зигзага до конца.
Ну и подтверждаю, что зигзаги, включенные в поставку МТ5, можно использовать только в учебных целях. То есть только для того, чтобы изучать язык программирования MQL5, но ни в коем случае нельзя их использовать для работы на рынке. Они сработаны с грубыми ошибками.
-
nen
Профи форума===========================
===========================
===========================
=========================== -
nen
Профи форумаВывод следующий. В МТ5 заложены просто фантастические возможности. И идет развитие. Альтернативы не просматриваются.
Но всегда необходимо помнить, что все созданное на основе продуктов компании метаквотес с любым очередным билдом может прекратить нормально работать.
Постоянно не только ошибки исправляются, но и меняются свойства программ. Изменение свойств ЧАСТО влечет прекращение или изменение работы некоторых функций. К тому же есть ошибки в реализации программ (языка, терминала… неоднозначное описание языка в справочнике), которые могут быть замечены через какое-то время. При этом разработчики вольны исправлять или не исправлять замеченные ошибки. Что они ярко продемонстрировали на примере 387 билда МТ4. Сделали то, что можно было и не делать. По крайней мере, можно было сделать не так грубо и необдуманно. Функция IndicatorCounted() по большому счету вообще не нужна…. Но сейчас сделано так, что ее не объедешь. И бог с ней.Это все необходимо помнить. Родовые пятна остаются надолго, если не на всю жизнь.
———————————————————————————
Ближе к теме.
Первый серьезный вопрос. В какой оболочке делать ZUP5? В виде эксперта или в виде индикатора?
Читаем Справочник.
Организация доступа к данным
Доступность данных
Наличие данных в формате HCC или даже в готовом для использования формате HC не всегда означает безусловную доступность этих данных для отображения на графике или для использования в mql5-программах.
При доступе к ценовым данным или к значениям индикаторов из mql5-программ следует помнить, что не гарантируется их доступность в определенный момент времени, либо с определенного момента времени. Это связано с тем, что в целях экономии ресурсов в MetaTrader 5 не хранится полная копия требуемых данных для mql5-программы, а дается прямой доступ к базе данных терминала.
Ценовая история по всем таймфреймам строится из общих данных формата HCC и любое обновление данных с сервера приводит к обновлению данных по всем таймфреймам и пересчету индикаторов. Вследствие этого, в доступе к данным может быть отказано даже в том случае, если эти данные были доступны мгновение назад.
Синхронизация данных терминала и данных сервера
Поскольку mql5-программа может обратиться к данным по любому символу и таймфрейму, то есть вероятность, что данные требуемой таймсерии еще не сформированы в терминале или требуемые ценовые данные не синхронизированы с торговым сервером. В этом случае время ожидания готовности данных сложно прогнозировать.
…Доступ к таймсериям и данным индикаторов
…
Доступ к данным индикаторов и таймсерий (странная формулировка, nen) осуществляется независимо от факта готовности запрашиваемых данных (так называемый асинхронный доступ). Это критически важно для расчета пользовательских индикаторов, поэтому при отсутствии запрашиваемых данных функции типа Copy…() сразу же возвращают ошибку. Однако при доступе из экспертов и скриптов производится несколько попыток получения данных с небольшой паузой, призванной обеспечить время, необходимое для загрузки недостающих таймсерий либо для расчета значений индикаторов.
—–
Отказ в доступе при работе индикатора неприятная особенность. К тому же есть особенности подкачки истории по периоду, на котором работает индикатор. В Справочнике все сильно разбросано в разных местах. У экспертов же отказа в доступе не не получаем, но если за время расчета пришел новый тик, то он будет проигнорирован и расчет на нем произведен не будет. Для зигзагов не страшен пропуск тиков. Графические построения на основе зигзагов привязываются к точкам (экстремумам), находящимся далеко в прошлом. И сиюминутные дергания рынка для графических построений не имеют, можно сказать, никакого значения.Для экспертов есть ограничения – на график можно прикрепить только один эксперт. А количество индикаторов на графике не ограничено.
ZUP5 планируется на основе мультизигзага. То есть нет необходимости вывода множества индикаторов на график, чтобы сделать графические построения по даннм множества таймфреймов.
То есть можно сделать все, что ранее удавалось сделать с помощью нескольких ZUP, в одном.
Так как планируется делать на основе мультизагзага, то каким образом вводить параметры?
Ввод параметров в виде строки, как это сделано в мультизигзагах неприемлем.
А если вводить параметры раздель, не в виде строки, то количество параметров не поддается подсчету.
Могут быть тысячи параметров. Это неприемлемо.Склоняюсь к тому, что параметры как таковые вообще почти не делать. То есть изменять свойства программы с помощью вызова табло, похожего на хэнд менеджер (создатель Хэнд менеджера, по моим данным, также был забанен на форуме mql4). С помощью табло создаются необходимые объекты, задаются свойства объектов. Далее эти объекты живут своей жизнью на графике. При необходимости изменения свойств объектов вызывается соответствующее табло и задаются новые свойства объектов. Также необходимо предусмотреть возможность перетаскивания точек привязки объектов с помощью мыши.
Отсутствие входных параметров вызывает вопрсы. Каким образом созданная структура может быть перенесена с помощью профиля или шаблона на другой график? Точнее, насколько корректно будут работать профили и шаблоны с такой структурой?
Непонятно стоит ли использовать индикаторные буферы. Склоняюсь больше к тому, что строить зигзаги – несколько последних (сколько – задавать отдельно) лучей – с помощью отрезков прямых линий или с помощью меток. То есть графическими объектами. Это сильно съэкономит память и отпадет необходимость резервирования памяти под непонятное количество индикаторных буферов. Плюс отсутствие индикаторных буферов устранит потенциальную непонятку с принудительной переинициализацией индикаторных буферов, как это сделано в МТ4 билд 387 и далее.
Количество буферов, которые могут быть использованы в процессе работы, заранее определить не представляется возможном. А резервировать память под 10-20-30 буферов расточительство.
-
wellx
Активный пользовательА если все считывать через ini-файл?
Или через хмл? Ну, считаем параметры, да и не зависит по реализации ни от кого… и количество бесконечно…
Страница 4 из 5
Поделиться этой страницей
Кто-нибудь знает, как избежать ошибки array out of range
при попытке отобразить большое количество баров (допустим, 7000) в индикаторном буфере?
2 ответа
Лучший ответ
Хотя массивы (проблема) выглядят одинаково, есть большая разница
Индикаторы MQL4 используют для работы с массивами «другие» механизмы, нежели «обычные» массивы.
... Testing pass stopped due to a critical error in the EA
... array out of range in '!2015-09-08___!EA 2xAMA 01 2015-09-08_msMOD_0.00.mq4' (519,39)
Да, MT4
выдает фатальную ошибку при попытке обработать неправильный ptr
->
array[aStaticSIZE]
< / strong>, и необходимо принять меры, чтобы избежать такого случая или обрезать < / strong> ptr
(аналогично сценариям с циклическим буфером с низкой задержкой), чтобы не выходить за границу массива (недостаточное / переполнение) или extend array[]
через ArrayResize()
, чтобы идти в ногу с ростом ptr (пока позволяет память)) на массивах, объявленных как динамические double Array[];
, однако Технические индикаторы MQL4 < / strong> у меня совсем другая ситуация.
. . . . . (И нужно проверять каждое обновление стелса New-MQL4.56789)
Что касается "New"-MQL4.56789-Build-840
, ваш “ обычный ” массив не может содержать более чем 2.147.483.647
элементов, если диспетчер пула памяти O / S позволяет, поэтому у вас должно быть много места, даже если вы используете отображения более высокой размерности { 2D | 3D | 4D }
.
Несколько лет назад я использовал множество параллельных 2D / 3D-массивов для быстрых и private
(надежно инкапсулированных) обработчиков кучи / стека для поддержки высокодинамичных объектов в масштабах более 100 тыс. Строк / 2D-плоскостей, и все они хорошо работали в старый – MQL4
.
Так что некоторые элементы 7k + не должны вас беспокоить.
Индикаторы используют массив косвенно, через автоматический обработчик буфера
В этом смысле ваш код не должен заботиться об этих проблемах.
/*
#property "pragmas" help MQL4-compiler decide about setup of internal handlers
so this part of code "speaks" to MetaLang.exe at compile-time*/
#property indicator_buffers 3 // .DEF N-Buffs
#property indicator_color1 White // .SET Buf[0].color
#property indicator_color2 SeaGreen // .SET Buf[1].color
#property indicator_color3 FireBrick // .SET Buf[2].color
#property indicator_width1 1 // .SET Buf[0].width
#property indicator_width2 2 // .SET Buf[1].width
#property indicator_width3 2 // .SET Buf[2].width
double buffer_line_up[], // .DEF Arrays as dynamic ...[]
buffer_line_dn[], // with human-readable-names
buffer_line_ax[]; // and MT4 will take care
int init() {
SetIndexBuffer( 0, buffer_line_ax ); // .ASSOC IndexBuffer.0<-array[]
SetIndexLabel( 0, "SuperTrend" );
SetIndexBuffer( 1, buffer_line_up ); // .ASSOC IndexBuffer.0<-array[]
SetIndexLabel( 1, "Up Trend" );
SetIndexStyle( 1, DRAW_LINE,
STYLE_SOLID,
1 + int( ATR_Multiplier / 5 ),
SeaGreen
);
SetIndexBuffer( 2, buffer_line_dn ); // .ASSOC IndexBuffer.0<-array[]
SetIndexLabel( 2, "Down Trend" );
SetIndexStyle( 2, DRAW_LINE,
STYLE_SOLID,
1 + int( ATR_Multiplier / 5 ),
FireBrick
);
SetIndexDrawBegin(0, ATR_Period ); // .DEF initial depth of Buffer before 1st GUI output
IndicatorShortName( "xxxx[" + ATR_Period + "," + ATR_Multiplier + "]" );
IndicatorDigits( MarketInfo( Symbol(), MODE_DIGITS ) );
3
user3666197
24 Май 2016 в 04:14
У меня была аналогичная проблема, я всегда получал ошибку “Array out of range
” для одного из моих буферов. Я проверил с помощью ArraySize()
, который вернул 0
.
В конце концов, я просто забыл вызвать SetIndexBuffer(...)
для этого буферного массива в onInit() {...}
моего индикатора.
Поскольку я использовал внутренний буфер без рисования линий, я сначала использовал функцию IndicatorBuffers()
, чтобы увеличить количество буферов, а затем зарегистрировал свой дополнительный буфер, используя SetIndexBuffer(...)
< / сильный>.
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
IndicatorBuffers(5);
//buffers with #properties settings
SetIndexBuffer(0,Buffer1);
SetIndexBuffer(1,Buffer2);
SetIndexBuffer(2,Buffer3);
SetIndexBuffer(3,Buffer4);
//additional buffer without #properties
SetIndexBuffer(4,AdditionalBuffer);
3
Jan Rasehorn
16 Окт 2015 в 15:37