Не работают iHighest и iLowest

 
Не знаю с какого билда началось, но в 208 не работает следующая конструкция:
hilevel=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,4,0)];
При задействовании текущего бара переменная не определяется, но работают следующие варианты:
hilevel=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,3,1)];
hilevel=High[iHighest(NULL,PERIOD_H1,MODE_LOW,4,0)];
Аналогично для iLowest.
 
Спасибо за найденную ошибку. В понедельник будем разбираться с ней.
 
К сожалению, в Вашем коде ошибка, которую я сразу не заметил. Функции iHighest() и iLowest() работают правильно, просто Вы сделали подмену функций iHigh() на High[] (iLow() на Low[]). Правильный код выглядит так:

//+------------------------------------------------------------------+
//|                                       Check_iHighest_iLowest.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   Print("iHigh(Symbol(),PERIOD_H1,iHighest(NULL,PERIOD_H1,MODE_HIGH,4,0))=",iHigh(Symbol(),PERIOD_H1,iHighest(NULL,PERIOD_H1,MODE_HIGH,4,0)));   
   Print("iHigh(Symbol(),PERIOD_H1,iHighest(NULL,PERIOD_H1,MODE_HIGH,3,1))=",iHigh(Symbol(),PERIOD_H1,iHighest(NULL,PERIOD_H1,MODE_HIGH,3,1)));   
   Print("iLow(Symbol(),PERIOD_H1,iLowest(NULL,PERIOD_H1,MODE_LOW,4,0))=",iLow(Symbol(),PERIOD_H1,iLowest(NULL,PERIOD_H1,MODE_LOW,4,0)));   
 
//----
   return(0);
  }
//+------------------------------------------------------------------+

Вот иллюстрация:
 
Rosh:
К сожалению, в Вашем коде ошибка, которую я сразу не заметил. Функции iHighest() и iLowest() работают правильно, просто Вы сделали подмену функций iHigh() на High[] (iLow() на Low[]). Правильный код выглядит так:

А почему нельзя заменить ?
Результат должен же выйти один и тотже
 
Потому что High[] обращается к данным родного таймфрейма, а если вы хотите обращаться к данным другого таймфрейма, то используйте iHigh().
 
Rosh:
Потому что High[] обращается к данным родного таймфрейма, а если вы хотите обращаться к данным другого таймфрейма, то используйте iHigh().
Правильно, в примере и было обращение к родному таймфрэйму
hilevel=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,4,0)];
 
Хорошо, проверьте сами. Вот Вам код:

//+------------------------------------------------------------------+
//|                                      Check_iHighest_iLowest2.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   Print("iHigh(Symbol(),PERIOD_H1,iHighest(NULL,PERIOD_H1,MODE_HIGH,4,0))=",iHigh(Symbol(),PERIOD_H1,iHighest(NULL,PERIOD_H1,MODE_HIGH,4,0)));   
   Print("iHigh(Symbol(),PERIOD_H1,iHighest(NULL,PERIOD_H1,MODE_HIGH,3,1))=",iHigh(Symbol(),PERIOD_H1,iHighest(NULL,PERIOD_H1,MODE_HIGH,3,1)));   
   Print("iLow(Symbol(),PERIOD_H1,iLowest(NULL,PERIOD_H1,MODE_LOW,4,0))=",iLow(Symbol(),PERIOD_H1,iLowest(NULL,PERIOD_H1,MODE_LOW,4,0)));   
 
   Print ("Варианты с High и Low");
   
   Print("High[iHighest(NULL,PERIOD_H1,MODE_HIGH,4,0)]=",High[iHighest(NULL,PERIOD_H1,MODE_HIGH,4,0)]);   
   Print("High[iHighest(NULL,PERIOD_H1,MODE_HIGH,3,1)]=",High[iHighest(NULL,PERIOD_H1,MODE_HIGH,3,1)]);   
   Print("Low[iLowest(NULL,PERIOD_H1,MODE_LOW,4,0)]=",Low[iLowest(NULL,PERIOD_H1,MODE_LOW,4,0)]);   
//----
   return(0);
  }
//+------------------------------------------------------------------+
И вот результат:
 

почему сигнал не работает?

хотел задать зону фильтра в пунктах от наибольшего хая, и наименьшего лоу... сигнал не работает что я не так делаю?

   double hi_100 = iHigh(Symbol(),tf_100,iHighest(NULL,tf_100,MODE_HIGH,hibar,n_bar)); //поиск хая наибольшего значения
   double lo_100 = iLow (Symbol(),tf_100,iLowest (NULL,tf_100,MODE_LOW,lobar,n_bar));  //поиск лоу наименьшего значения
   if (Bid < lo_100 + zone * Point){open = 1;} //зона разрешения покупок от лоу
   else if (Bid > hi_100 - zone * Point){open=-1;} //зона разрешения продаж от хая
   


 

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


double hi_100 = iHigh(Symbol(),0,iHighest(NULL,0,MODE_HIGH,hibar,n_bar)); //поиск хая наибольшего значения
   double lo_100 = iLow (Symbol(),0,iLowest (NULL,0,MODE_LOW,lobar,n_bar));  //поиск лоу наименьшего значения
   if (Bid < lo_100 + zone * Point){open = 1;} //зона разрешения покупок от лоу
   else if (Bid > hi_100 - zone * Point){open=-1;} //зона разрешения продаж от хая

 
1Rakso >>:

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

Не может быть. Проверьте объявление, тип и значение переменной.

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