Так, ведь пишу прямо - самоучка, недалёк в понимании тонкостей восприятия программисткого бытия (А тема называется: Любой вопрос новичка...). Привожу пример, чтобы не упрекнули, что всё хочу на халяву получить не приложив усилий, и с другой стороны пытаюсь чётко сформулировать задачу (чтобы не сказали, что не можем читать чужие мысли).
Ещё раз, как из данного кода или может быть милостью понимающих в личном изложении кодинга получить максимальное значение индикатора за заданное количество последних баров???
С искренним уважением, почтением и пониманием, что программисты - это люди из другого мира и столь деликатное объяснение - это не факт, что всё выше описанное придётся изложить ещё, возможно, ни один раз для получения желаемого результата.
//--- создадим массив
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 0x44intOnInit()
{
//---ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &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);
}
}
}
}
Так, ведь пишу прямо - самоучка, недалёк в понимании тонкостей восприятия программисткого бытия (А тема называется: Любой вопрос новичка...). Привожу пример, чтобы не упрекнули, что всё хочу на халяву получить не приложив усилий, и с другой стороны пытаюсь чётко сформулировать задачу (чтобы не сказали, что не можем читать чужие мысли).
Ещё раз, как из данного кода или может быть милостью понимающих в личном изложении кодинга получить максимальное значение индикатора за заданное количество последних баров???
С искренним уважением, почтением и пониманием, что программисты - это люди из другого мира и столь деликатное объяснение - это не факт, что всё выше описанное придётся изложить ещё, возможно, ни один раз для получения желаемого результата.
Ну так переверни цикл и все дела.
От rates_total-1 до rates_total минус нужное_количество_баров. Если в советнике, то от Bars()-1 до Bars() минус...
Перерыл все что можно но так и не нашел решения, последняя надежда на вас други :)
Общая задача была сделать индикатор, который после кидания на график, то есть он уже как бы работает, мы нажимаем заданную клавишу и под текущим положением курсора появляется тренд линия (date1=date2, price1=price2)
Проблема возникла когда не получилось из if(id==CHARTEVENT_MOUSE_MOVE) вынести координаты указателя в if(id==CHARTEVENT_KEYDOWN) , а код внизу тоже не хочет передавать их, я хз, как это реализовать, есть еще вариант но в нем тоже проблема, может кто знает, при кидании индикатора на график появляется начальное меню, так вот, можно ли его как-то заблокировать, чтобы индикатор сразу появлялся на графике?
Обрати внимание на видимость переменных.
Глубоко не вникал, но заметил что переменные объявлены внутри условия. Так не должно быть.
K_i_r_i_t_o: Так в этом и проблема, как сделать чтобы переменные были переданы из одной if в другую, пробовал множество вариаций, никак не хочет работать..
Какое множество вариаций? Переменные глобального уровня видны в любой части программы, это крайний случай.
Да читал я это все, в том то и дело, что не получается значения переменных перенести в другую функцию, а в одной функции их никак не собрать, я в тупике, а что на счет меню индикатора?
Ну что же, никто не знает есть ли возможность убрать из цепочки "навигатор-запуск индикатора-стартовое меню-работа индикатора", само стартовое меню? очень нужно, help!!!!!
Так, ведь пишу прямо - самоучка, недалёк в понимании тонкостей восприятия программисткого бытия (А тема называется: Любой вопрос новичка...). Привожу пример, чтобы не упрекнули, что всё хочу на халяву получить не приложив усилий, и с другой стороны пытаюсь чётко сформулировать задачу (чтобы не сказали, что не можем читать чужие мысли).
Ещё раз, как из данного кода или может быть милостью понимающих в личном изложении кодинга получить максимальное значение индикатора за заданное количество последних баров???
С искренним уважением, почтением и пониманием, что программисты - это люди из другого мира и столь деликатное объяснение - это не факт, что всё выше описанное придётся изложить ещё, возможно, ни один раз для получения желаемого результата.
//--- создадим массив 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) , а код внизу тоже не хочет передавать их, я хз, как это реализовать, есть еще вариант но в нем тоже проблема, может кто знает, при кидании индикатора на график появляется начальное меню, так вот, можно ли его как-то заблокировать, чтобы индикатор сразу появлялся на графике?
Так, ведь пишу прямо - самоучка, недалёк в понимании тонкостей восприятия программисткого бытия (А тема называется: Любой вопрос новичка...). Привожу пример, чтобы не упрекнули, что всё хочу на халяву получить не приложив усилий, и с другой стороны пытаюсь чётко сформулировать задачу (чтобы не сказали, что не можем читать чужие мысли).
Ещё раз, как из данного кода или может быть милостью понимающих в личном изложении кодинга получить максимальное значение индикатора за заданное количество последних баров???
С искренним уважением, почтением и пониманием, что программисты - это люди из другого мира и столь деликатное объяснение - это не факт, что всё выше описанное придётся изложить ещё, возможно, ни один раз для получения желаемого результата.
Ну так переверни цикл и все дела.
От rates_total-1 до rates_total минус нужное_количество_баров. Если в советнике, то от Bars()-1 до Bars() минус...
Перерыл все что можно но так и не нашел решения, последняя надежда на вас други :)
Общая задача была сделать индикатор, который после кидания на график, то есть он уже как бы работает, мы нажимаем заданную клавишу и под текущим положением курсора появляется тренд линия (date1=date2, price1=price2)
Проблема возникла когда не получилось из if(id==CHARTEVENT_MOUSE_MOVE) вынести координаты указателя в if(id==CHARTEVENT_KEYDOWN) , а код внизу тоже не хочет передавать их, я хз, как это реализовать, есть еще вариант но в нем тоже проблема, может кто знает, при кидании индикатора на график появляется начальное меню, так вот, можно ли его как-то заблокировать, чтобы индикатор сразу появлялся на графике?
Обрати внимание на видимость переменных.
Глубоко не вникал, но заметил что переменные объявлены внутри условия. Так не должно быть.
Обрати внимание на видимость переменных.
Глубоко не вникал, но заметил что переменные объявлены внутри условия. Так не должно быть.
Так в этом и проблема, как сделать чтобы переменные были переданы из одной if в другую, пробовал множество вариаций, никак не хочет работать..
Вот тут почитай.
Какое множество вариаций? Переменные глобального уровня видны в любой части программы, это крайний случай.
Вот тут почитай.
Какое множество вариаций? Переменные глобального уровня видны в любой части программы, это крайний случай.
Добрый день, господа.
Вопрос по массивам. Как найти наибольшее значение индикатора на необходимом количестве последних баров графика, а не первых?
Уж, много раз это обсуждалось (не могу найти), но т. к. редко приходилось использовать массивы не обращал внимания.
Подскажите, как решить проблему с индексацией, возможно сделать более элегантно через 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) ...что-то не так