[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 313

 
А и вот ещё что. Объявив размерность в 4 ячейки в одном из измерений массива, Вы не можете вызвать Buffer_OHLC[4][] - дело в том, что нумерация начинается с нуля, а не с единицы. Поэтому максимум, что Вы можете вызвать, это Buffer_OHLC[3][];
 
drknn:


1. Переменная Candles ни где не используется.

2. Строка

написана не верно. Она лежит в цикле - на каждой итерации цикла Вы создаёте новую переменную Cls. Да и не нужна она там. Достаточно написать


1. Забыл указать, что работа по индикатору не доведена до конца. Но в любом случае это никак не должно влиять на работу именно данной функции.

2. Первоначально у меня так и было. Но когда начало выдавать ошибку я подумал, что проблема может каким-то образом заключаться в передачи данных из массива в массив.

 
drknn:

И попробуйте строку

заменить на


Не помогло. Ошибка прежняя.
 
drknn:
А и вот ещё что. Объявив размерность в 4 ячейки в одном из измерений массива, Вы не можете вызвать Buffer_OHLC[4][] - дело в том, что нумерация начинается с нуля, а не с единицы. Поэтому максимум, что Вы можете вызвать, это Buffer_OHLC[3][];


Нулевая ячейка может остаться и пустой. Подобный пример был описан в учебнике. Ну в общем-то даже сменив размер массива, ошибка осталась.

PS Индикатор должен брать данные с другого инструмента и наносить на текущий. Возможно я что-то принципиально делаю не так при решении данной задачи?

 
silhouette:


Нулевая ячейка может остаться и пустой. Подобный пример был описан в учебнике. Ну в общем-то даже сменив размер массива, ошибка осталась.

PS Индикатор должен брать данные с другого инструмента и наносить на текущий. Возможно я что-то принципиально делаю не так при решении данной задачи?

Вы просто неправильно работаете с двумерным массивом

 

1. Поменяйте первый индекс со вторым местами

2. Используйте ArrayResize

 
silhouette:


Нулевая ячейка может остаться и пустой. Подобный пример был описан в учебнике. Ну в общем-то даже сменив размер массива, ошибка осталась.

PS Индикатор должен брать данные с другого инструмента и наносить на текущий. Возможно я что-то принципиально делаю не так при решении данной задачи?


Вы объявили массив Buffer_OHLC[4][]. И обращаететсь к несуществующей ячейке массива, а именно к Buffer_OHLC[4][i] - такой ячейки в объявленном Вами массиве нет. Максимум что там есть, это Buffer_OHLC[3][i].

Поясняю: Вы объявили 4 ячейки во втором измерении массива (скажем так, 4 строчки некой таблицы с бесконечным числом столбцов). Поскольку нумерация начинается от нуля, то первая строка, к которой можно обратиться, это Buffer_OHLC[0][], вторая - Buffer_OHLC[1][], третья - Buffer_OHLC[2][], четвёртая - Buffer_OHLC[3][]. Строки Buffer_OHLC[4][] в объявленном Вами массиве не существует!

 
Там и [3,i] не существует при i>0 :)
 

Не сочтите за тормоза, впервые имею дело с многомерными массивами :)

drknn, спасибо! Ваше замечание я понял

tara:

1. Поменяйте первый индекс со вторым местами

2. Используйте ArrayResize

Спасибо! Результат есть. Но еще хотелось бы уточнить по поводу функции ArrayResize и размера первого измерения массива.

   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
   
   ArrayResize(Buffer_OHLC,limit-1);
   for(int i=limit; i>=0; i--)
    {
      Buffer_OHLC[i][0]=iOpen (Smb,Period(),i);
      Buffer_OHLC[i][1]=iHigh (Smb,Period(),i);
      Buffer_OHLC[i][2]=iLow  (Smb,Period(),i);
      Buffer_OHLC[i][3]=iClose(Smb,Period(),i);
      
      if(Line==true)
       {
        Buffer_ind[i]=Buffer_OHLC[i][3];
       }
    }
   return(0);

При использовании limit-1 график есть, но всплывает ошибка 4051 "Недопустимое значение параметра функции".

 
может кто-нибудь обьяснит как сделать так что бы открываемый ордер мог открываться в любо момент бара а следуюший только на следующем баре?
Причина обращения: