Попробуйте сравнить не с 0, а с EMPTY_VALUE (или EMPTY)
if (iCustom(Symbol(),t,"ASCTrend1sig",3,300,0,i) == 0 )
{
a = -1;
}
Сорри, туфту написал. Вроде код корректный.
Но на всякий случай вместо
double a;
напишите
double a = 0;И перепроверьте выходные значения.
Не помогает.
Я попробовала сделать return(i) возвращает не понятно откуда взятую цифру.
При сигнале iCustom(...) возвращает значение.
Если значение не равно 0 при индексе 0, мне надо чтобы функция возвращали -1,
а при индексе 1 чтобы возвращала 1.
А если выполняются оба условия ? Вы забываете, что EMPTY_VALUE, которым инициализируется значение индикатора по умолчанию - это макс инт, а не ноль. Потому Ваш код всегда возвращает -1.
Танцевать нужно от печки - что Вы хотите ? Если выделить сигнал индикатора, то лучше это сделать так :
int asc (int t, int b, int mxBars=300) { int i = b; int dB = Bars-mxBars; while(true) { if( i>=dB ) return(0); if(iCustom(Symbol(),t,"ASCTrend1sig",3,mxBars,0,i) != EMPTY_VALUE) return(-1); if(iCustom(Symbol(),t,"ASCTrend1sig",3,mxBars,1,i) != EMPTY_VALUE) return( 1); i ++; } return(0);// Это для корректного восприяти компилятором }
При этом у Вас не будет конфликта условий.
Успехов.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Не пойму что происходит...
Вот функция и индикатор прикреплен, она постоянно возвращает -1.
Подскажите пожалуйста, что не так!
int asc (int t, int b)
{
int i = b;
double a;
double F = 0;
while (iCustom(Symbol(),t,"ASCTrend1sig",3,300,0,i) == 0 || iCustom(Symbol(),t,"ASCTrend1sig",3, 300,1,i) == 0)
{
i ++;
}
if (iCustom(Symbol(),t,"ASCTrend1sig",3,300,1,i) != 0 )
{
a = 1;
}
if (iCustom(Symbol(),t,"ASCTrend1sig",3,300,0,i) != 0 )
{
a = -1;
}
return (a);
}