Массивы - как передать значение из одного в другой? - страница 2

 
Попробуй для начала объявить double Massiv[]; как ценовую серию, предварительно задав рамерность в Bars.
 
ты забыл про SetIndexBuffer(). попробуй так:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red

double Buffer[];
double Massiv[];

int init()
{
IndicatorBuffers(2);
SetIndexBuffer(0,Buffer);
SetIndexBuffer(1,Massiv);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,108);
return(0);
}
int start()
{
for( int i=Bars;i>=0;i--)
{
Massiv[i]=High[i]; //присваеваем значение итому элементу массива
Buffer[i]=Massiv[i];// присваиваем итый элемент массива итому элементу массива буффера.
}
return(0);
}
 
Ок, спасибо, не знал, что массивом нельзя пользоваться, просто объявив его. :))
 
К чему, собственно, огород городить с массивами, Highest, Lowest и т.п.? Стандартный iFractals для этих целей не подходит что-ли? Или нужен именно 7-9-11-... барный фрактал?
 
Вообщем уже и без массивов все устроил, оргооомное спасибо компостеру, но все же не понятно, почему нельзя передавать элементы обычного массива в массив буффера :((

Напр:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red

double Buffer[];
double Massiv[];

int init()
{

SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,108);

return(0);
}

int start()
{
for( int i=Bars;i>=0;i--)
{

Massiv[i]=High[i]; //присваеваем значение итому элементу массива
Buffer[i]=Massiv[i];// присваиваем итый элемент массива итому элементу массива буффера.
}

return(0);
}

------------------------ В итоге ничего не выводится :((((.

Это основной вопрос топика, а не то, что можно сделать все без массивов.

Хотя я как раз в этом случае смог без них обойтись:))


Все весьма понятно для тех, кто знаком с C\C++. Вы я вижу не вникали.
Дело вот в чем : Ваше описание

double Buffer[];
double Massiv[];

декларирует не сами массивы, а только лишь указатели на них - то есть намерение эти массивы создать. Для того, чтобы пользоваться массивами их нужно разместить в памяти компа - то есть выделить им кусок оперативной памяти и начало этого куска присвоить значению указателя. Только с тех пор Buffer[i] будет иметь смысл.
В С\С++ это называется динамическим размещением.
В языке МТ4 есть функция
int ArrayResize( object& array[], int new_size),
которая сможет Вам помочь в случае одномерного массива - то есть перед заполнением массивов вызовите ее для каждого массива
ArrayResize( Buffer, Bars);
ArrayResize( Massiv, Bars);
и будет Вам счастье.

Второй вариант задать статическое размещение - описание нужно изменить :
например так :

double Buffer[10000];
double Massiv[10000];

при этом память будет отведена сразу под указанное число элементов типа double.

Использование же SetIndexBuffer(.....) не только выделяет память, но и делает эти массивы индикаторными в терминологии МТ4 - если Вам их рисовать не нужно, то достаточно просто ArrayResize(); или статического размещения.

Удачи и попутных трендов.
Причина обращения: