Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1083

 
А если необходимо найти наибольшее значение в заданном количестве последних баров?
 

Так ведь здесь-то статический массив

//--- создадим массив 
   double array[]; 
   int size=772; 
   ArrayResize(array,size); 
   //---  заполним его значениями индикатора 
   for(int i=0;i<size;i++) 
     { 
      array[i]=iATR(NULL,0,14,i);
     }
   //--- найдем позицию максимального элемента в массиве 
   int max_position=ArrayMaximum(array,772,0); 
   //--- теперь получим само максимальное значение в массиве 
   double max=array[max_position];
 

Так, ведь пишу прямо - самоучка, недалёк в понимании тонкостей восприятия программисткого бытия (А тема называется: Любой вопрос новичка...). Привожу пример, чтобы не упрекнули, что всё хочу на халяву получить не приложив усилий, и с другой стороны пытаюсь чётко сформулировать задачу (чтобы не сказали, что не можем читать чужие мысли).

Ещё раз, как из данного кода или может быть милостью понимающих в личном изложении кодинга получить максимальное значение индикатора за заданное количество последних баров???

С искренним уважением, почтением и пониманием, что программисты - это люди из другого мира и столь деликатное объяснение - это не факт, что всё выше описанное придётся изложить ещё, возможно, ни один раз для получения желаемого результата.

//--- создадим массив 
   double array[]; 
   int size=772; 
   ArrayResize(array,size); 
   //---  заполним его значениями индикатора 
   for(int i=0;i<size;i++) 
     { 
      array[i]=iATR(NULL,0,14,i);
     }
   //--- найдем позицию максимального элемента в массиве 
   int max_position=ArrayMaximum(array,772,0); 
   //--- теперь получим само максимальное значение в массиве 
   double max=array[max_position];
 

Перерыл все что можно но так и не нашел решения, последняя надежда на вас други :)

Общая задача была сделать индикатор, который после кидания на график, то есть он уже как бы работает, мы нажимаем заданную клавишу и под текущим положением курсора появляется тренд линия (date1=date2, price1=price2) 

Проблема возникла когда не получилось из if(id==CHARTEVENT_MOUSE_MOVE) вынести координаты указателя в if(id==CHARTEVENT_KEYDOWN) , а код внизу тоже не хочет передавать их, я хз, как это реализовать, есть еще вариант но в нем тоже проблема, может кто знает, при кидании индикатора на график появляется начальное меню, так вот, можно ли его как-то заблокировать, чтобы индикатор сразу появлялся на графике?

#property strict
#define VK_D             0x44 


int OnInit()
  {
//---
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{    
 
if(id==CHARTEVENT_MOUSE_MOVE)

{     int      x     =(int)lparam;
      int      y     =(int)dparam; 
      datetime dt    =0; 
      double   price =0; 
      int      window=0;
      ChartXYToTimePrice(0,x,y,window,dt,price); 


  if(id==CHARTEVENT_KEYDOWN)
{ 
  switch(int(lparam)) 
{ case VK_D:
   
   ObjectCreate("Trend Line",OBJ_TREND,0,dt,price,dt,price);
   ObjectSetInteger(0,"Trend Line",OBJPROP_SELECTED,true); 
}   
} 
}    
}
 
Craft:

Так, ведь пишу прямо - самоучка, недалёк в понимании тонкостей восприятия программисткого бытия (А тема называется: Любой вопрос новичка...). Привожу пример, чтобы не упрекнули, что всё хочу на халяву получить не приложив усилий, и с другой стороны пытаюсь чётко сформулировать задачу (чтобы не сказали, что не можем читать чужие мысли).

Ещё раз, как из данного кода или может быть милостью понимающих в личном изложении кодинга получить максимальное значение индикатора за заданное количество последних баров???

С искренним уважением, почтением и пониманием, что программисты - это люди из другого мира и столь деликатное объяснение - это не факт, что всё выше описанное придётся изложить ещё, возможно, ни один раз для получения желаемого результата.


Ну так переверни цикл и все дела.

От rates_total-1 до rates_total минус нужное_количество_баров. Если в советнике, то от Bars()-1 до Bars() минус...

 
K_i_r_i_t_o:

Перерыл все что можно но так и не нашел решения, последняя надежда на вас други :)

Общая задача была сделать индикатор, который после кидания на график, то есть он уже как бы работает, мы нажимаем заданную клавишу и под текущим положением курсора появляется тренд линия (date1=date2, price1=price2) 

Проблема возникла когда не получилось из if(id==CHARTEVENT_MOUSE_MOVE) вынести координаты указателя в if(id==CHARTEVENT_KEYDOWN) , а код внизу тоже не хочет передавать их, я хз, как это реализовать, есть еще вариант но в нем тоже проблема, может кто знает, при кидании индикатора на график появляется начальное меню, так вот, можно ли его как-то заблокировать, чтобы индикатор сразу появлялся на графике?

Обрати внимание на видимость переменных.

Глубоко не вникал, но заметил что переменные объявлены внутри условия. Так не должно быть.

 
AlexeyVik:

Обрати внимание на видимость переменных.

Глубоко не вникал, но заметил что переменные объявлены внутри условия. Так не должно быть.

Так в этом  и проблема, как сделать чтобы переменные были переданы из одной if в другую, пробовал множество вариаций, никак не хочет работать..
 
K_i_r_i_t_o:
Так в этом  и проблема, как сделать чтобы переменные были переданы из одной if в другую, пробовал множество вариаций, никак не хочет работать..

Вот тут почитай.

Какое множество вариаций? Переменные глобального уровня видны в любой части программы, это крайний случай.

 
AlexeyVik:

Вот тут почитай.

Какое множество вариаций? Переменные глобального уровня видны в любой части программы, это крайний случай.

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

Добрый день, господа.

Вопрос по массивам. Как найти наибольшее значение индикатора на необходимом количестве последних баров графика, а не первых?

     Уж, много раз это обсуждалось (не могу найти), но т. к. редко приходилось использовать массивы не обращал внимания.

Подскажите, как решить проблему с индексацией, возможно сделать более элегантно через ArrayMaximum(array)?

Если где-то элементарная ошибка, извините, самоучка-с.

Поток исправлений ошибок в билдах MQL4 не иссякает, поэтому чем проще код, тем надежнее.

Amax=-1000000;

iAmax=-1;

for(int i=0;i<size;i++) {

   if (array[i]>Amax) {iAmax=i; Amax=array[i];}

}

if (iAmax<0) ...что-то не так