Как искать экстремумы произвольного индикатора на n барах? - страница 2

 

а пример смотрели как там реализовано?

double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int    maxValueIdx=ArrayMaximum(num_array);
Print("Max value = ", num_array[maxValueIdx]);

 
Svinozavr:
Можете посмотреть, как это сделано в стохастике.


Сейчас посмотрю.

//-------------------------------- 

При такой вот записи:

int maxSymbol_1 =ArrayMaximum(Symbol1,Bars,1); 

  Comment (maxSymbol_1) ;

коммент почему-то возвращает "1600", вместо 30

Причем, на графике всего-то - полторы сотни баров.  

 
Rita:


Сейчас посмотрю.

//--------------------------------

При такой вот записи:

int maxSymbol_1 =ArrayMaximum(Symbol1,Bars,1);

Comment (maxSymbol_1) ;

коммент почему-то возвращает "1600", вместо 30

Причем, на графике всего-то - полторы сотни баров.

издеваешся?
 

Не издеваюсь.

Я не программистка вообще, - я немного вникла в основы MQL в силу своих способностей и могу составить лишь самые простейшие коды.

Поэтому, прошу мне лучше  сразу написать - как правильно будет программно задать нужный результат для моего случая? 

 
Rita:

Не издеваюсь.

Я не программистка вообще, - я немного вникла в основы MQL в силу своих способностей и могу составить лишь самые простейшие коды.

Поэтому, прошу мне лучше сразу написать - как правильно будет программно задать нужный результат для моего случая?

всё зависит от того, что нужно.
 

я задаю линию индикатора в отдельном окне:

int start()
  { 
     int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
     if(counted_bars>0) counted_bars-=10;
      
  //------------------------------------------------------------
   int limit=Bars - IndicatorCounted();  
   int k;    for(k = 0; k < limit; k++)   {  
 
   Symbol1[k]=K1* 
      (iMA(Symbol_1,Period(),per2,0,ma_method,Price,iBarShift(Symbol_1,0,Time[k],false))-
      iMA(Symbol_1,Period(),per1,0,ma_method,Price,iBarShift(Symbol_1,0,Time[k],false))) ;  
                                            }               

//-----------------------------------------------------   
    return(0);
  }

Мне нужно найти максимальное и минимальное значение этой линии на участке Bars, т.е. среди тех баров, линия по которым отрисована  в окне индикатора.

Я сделала, для начала,  вот так (чтобы найти номера экстремумов)):

int    maxSymbol_1 =ArrayMaximum(Symbol1,Bars,1);
 int    minSymbol_1 =ArrayMinimum(Symbol1[k],Bars,1);
 
  Comment (maxSymbol_1) ;

Но это не работает. Ни с кв. скобками, ни без кв. скобок.

 

После того, как номер  "экстремального" бара будет найден, я смогу найти численную величину экстремума, вот так:

double VOLmax = Symbol1[maxSymbol_1]; 
 
Bars - количество всех баров в окне, считаются даже те которые не видно.
 
Понятно. А как мне вычислить число баров, которые на текущем тф помещаются в окне?
 
int WindowBarsPerChart( ) 
Функция возвращает количество баров, помещающихся в окно текущего графика. 
Пример:
   // обработка видимых баров.
   int bars_count=WindowBarsPerChart();
   int bar=WindowFirstVisibleBar();
   for(int i=0; i<bars_count; i++,bar--)
     {
      // номера баров уменьшаются, так как нумерация идет в обратном порядке.
      // ...
     }

но возникнут другие проблемы
Причина обращения: