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

 

Не пойму что происходит...

Вот функция и индикатор прикреплен, она постоянно возвращает -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);
  }


Файлы:
 

Попробуйте сравнить не с 0, а с EMPTY_VALUE (или EMPTY)

 

if (iCustom(Symbol(),t,"ASCTrend1sig",3,300,0,i) == 0 )
{
a = -1;
}

Сорри, туфту написал. Вроде код корректный.

Но на всякий случай вместо

double a;

напишите

double a = 0;
И перепроверьте выходные значения.
 
Попробовала и то и то, все равно -1 возвращает.
 
TheXpert >>:

При сигнале iCustom(...) возвращает значение.

Если значение не равно 0 при индексе 0, мне надо чтобы функция возвращали -1,

а при индексе 1 чтобы возвращала 1. 

 

Не помогает.

Я попробовала сделать return(i)  возвращает не понятно откуда взятую цифру.

 
liza >>:

При сигнале 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);// Это для корректного восприяти компилятором
}

При этом у Вас не будет конфликта условий.

Успехов.

 
Ну, молодцом, задумала функцию как int, а пытаешься возвратить double. Отсюда и ошибки.
 
liza >>:

Не помогает.

Я попробовала сделать return(i) возвращает не понятно откуда взятую цифру.

Предполагаю, что ненулевых данных нет -- сделайте распринтовку результатов кастомного индикатора.

 
TheXpert писал(а) >>

Предполагаю, что ненулевых данных нет -- сделайте распринтовку результатов кастомного индикатора.

Да, мне тоже так кажется.

 
Большое спасибо!!!  Работает.
Причина обращения: