[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 701

 
IgorM:


рылась твоя собака в передаче параметров в функцию, если ты передаешь как SaveDataIND(double TempIND[])

то double TempIND[ ] это фактически новый массив для функции, но без права изменения параметров, попробуй SaveDataIND(double &TempIND[])

Нет, ну надо же а!!! Похоже собака всёт-ки съела кусок мяса... Спасибо, Игорь!
 

А возможно ли сделать, чтобы в функцию можно было передавать какой индюкатор использовать, чтобы в строке

TempIND[j]=iAD(NULL,PERIOD_M5,j);     

не конкретный индикатор был, а передавался как параметр функции?

 
Ну сделай что-нить типа switch и распиши свои возможные индюкаторы, назначив им индексы.
 
Mathemat:
Ну сделай что-нить типа switch и распиши свои возможные индюкаторы, назначив им индексы.
Спасибо, Алексей, такая мысля самая первая ко мне постучалась... Думал, мож кто по-экстремальней что-нить предложит... :)
 
artmedia70:

А возможно ли сделать, чтобы в функцию можно было передавать какой индюкатор использовать, чтобы в строке

не конкретный индикатор был, а передавался как параметр функции?



а смысл? такие действия обычно не делают - обычно в функцию данные пересылают, а в вызывающей функции готовят данные/массив

у тебя вроде и конструкция  ArrayResize(TempIND,nBars); не правильная, по крайней мере в других языках программирвания компилятор не пропустил бы т.к. у тебя double TempIND[50];  - т.е. массив обьявлен как статический а надо тогда динамическим (т.е. без размерности) - double TempIND[]; 

ЗЫ: да и путаница у тебя с именами в переменных в функции - не забывай, что если есть глобальная переменная (глобальная в теле советника), то переменная объявленная внутри функции с таким же именем будет совершенно другая:

int my_int = 100;

///////////
int my_func(){

int my_int = 123;
Print("my_func my_int = ",my_int);
return(0);
}

int start(){
Print("start_func my_int = ",my_int);
return(0);
}
обычно это называется область видимости переменных - переименовывай то что в функции свои имена т.е. void SaveDataIND(double myTempIND[], int nBars) - меньше путаницы будет
 
artmedia70:

У вас Lot где инициализирована?

Далее только после проверки на лосей либо меняете Lots_New как и писалось раньше, либо присваиваете ей значение = Lot;



Спасибо! Все заработало!
 
IgorM:


а смысл? такие действия обычно не делают - обычно в функцию данные пересылают, а в вызывающей функции готовят данные/массив

у тебя вроде и конструкция ArrayResize(TempIND,nBars); не правильная, по крайней мере в других языках программирвания компилятор не пропустил бы т.к. у тебя double TempIND[50]; - т.е. массив обьявлен как статический а надо тогда динамическим (т.е. без размерности) - double TempIND[];

ЗЫ: да и путаница у тебя с именами в переменных в функции - не забывай, что если есть глобальная переменная (глобальная в теле советника), то переменная объявленная внутри функции с таким же именем будет совершенно другая:

обычно это называется область видимости переменных - переименовывай то что в функции свои имена т.е. void SaveDataIND(double myTempIND[], int nBars) - меньше путаницы будет

1. Что ж мне, Игорь, для каждого индюкатора писать свою абсолютно идентичную функцию?

2. Спасибо, исправил на всяк пожарный...

3. Меня не путает - я вижу какой массив и где используется, мне как-то так проще наоборот, а вот когда у меня будет море имён, тады точно запутаюсь... Хотя... нужно привыкать к правильному написанию, наверное...

 
cyclik33:

Спасибо! Все заработало!
Не за что, обращайтесь... :)
 
T-G 13.07.2010 22:56правка | удалить
artmedia70:
Проверять открытие новой свечи. Если новая - открываетесь, если старая - нет...
а как это лучше сделать?
 
T-G:
T-G 13.07.2010 22:56правка | удалить
artmedia70:
Проверять открытие новой свечи. Если новая - открываетесь, если старая - нет...
а как это лучше сделать?

static int time = Time[0];

if (time < Time[0]){

// старая свеча

} else {

// новая свеча

time = Time[0];

}

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