Подскажите пожалуйста!!!

 

Как в советнике определить пересечение границы 0 в приложенном индикаторе?

Я сделала это так:

int asc()
{
int a;
double a1 = iCustom(Symbol(),0,"TRIX", 1,0);
double a2 = iCustom(Symbol(),0,"TRIX",1,1);

if(a1 > 0 && a2 < 0) a = 1;
if(a1 < 0 && a2 > 0) a = -1;
else a = 0;
return(a);
}  

и не работает.  Подскажите в чем ошибка.

Файлы:
trix.mq4  5 kb
 
liza писал(а) >>

Как в советнике определить пересечение границы 0 в приложенном индикаторе?

Я сделала это так:

int asc()
{
int a;
double a1 = iCustom(Symbol(),0,"TRIX", 1,0);
double a2 = iCustom(Symbol(),0,"TRIX",1,1);

if(a1 > 0 && a2 < 0) a = 1;
if(a1 < 0 && a2 > 0) a = -1;
else a = 0;
return(a);
}

и не работает. Подскажите в чем ошибка.

int asc()
{
int a=0;
double a1 = iCustom(Symbol(),0,"TRIX", 1,0);
double a2 = iCustom(Symbol(),0,"TRIX",1,1);

if(a1 > 0 && a2 < 0) a =  1;
if(a1 < 0 && a2 > 0) a = -1;
return(a);
} 
 

А почему тогда это работает?

int macd()
{
int a;
double m1 = iMACD(NULL,0,6,12,9,PRICE_CLOSE,MODE_MAIN,0);
double m2 = iMACD(NULL,0,6,12,9,PRICE_CLOSE,MODE_MAIN,1);

if(m1 > 0 && m2 < 0) a = 1;
if(m1 < 0 && m2 > 0) a = -1;
return(a);
}

 
liza писал(а) >>

А почему тогда это работает?

int macd()
{
int a;
double m1 = iMACD(NULL,0,6,12,9,PRICE_CLOSE,MODE_MAIN,0);
double m2 = iMACD(NULL,0,6,12,9,PRICE_CLOSE,MODE_MAIN,1);


return(a);
}

Переменная по умолчанию инициализируется 0. В первом случае при несрабатывании второго иф было присвоение поеременной а нулевого значения. Первый иф не учитывался.

 

Поняла.

Спасибо!

 
liza >>:

Как в советнике определить пересечение границы 0 в приложенном индикаторе?

Я сделала это так:

int asc()
{
int a;
double a1 = iCustom(Symbol(),0,"TRIX", 1,0);
double a2 = iCustom(Symbol(),0,"TRIX",1,1);

if(a1 > 0 && a2 < 0) a = 1;
if
(a1 < 0 && a2 > 0) a = -1;
else
a = 0;
return(a);
}  

и не работает.  Подскажите в чем ошибка.

Приношу извинения, что вмешиваюсь, т.к. Vinin уже все объяснил.

 

Просто, пометил цветом конструкцию, чтобы было видно почему первый иф не учитывался. Так, на всякий случай :)

 
В Вашем случае это можно было сделать так:
if(a1 > 0 && a2 < 0) a = 1;
else if
(a1 < 0 && a2 > 0) a = -1;
else
a = 0;
 
Но почему-то это всеравно выдает только значение 0.
 

Ну, сделайте так:

if(a1 > 0 && a2 < 0) {a = 1;Print("a=1, a1=",a1," a2=",a2);}
else if(a1 < 0 && a2 > 0) {a = -1;Print("a=-1, a1=",a1," a2=",a2);}
else {a = 0;Print("a=0, a1=",a1," a2=",a2);}

и проанализируйте поступающие данные

 
Сделала.  Постоянно выдает 0.
 

Я даже вот так попробовала

double a2 = iCustom(Symbol(),0,"TRIX",3,1,false,1500,1,1);
Print(a2);
И все равно 0

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