Здрасте всем.
Имеется индикатор, который вычисляет и заполняет буффер индикатора в определенное время. Время его работы укаывается вручную. В промежутках нулевые значения.
Подскажите кто может как найти Максимум\Минимум именно в промежутках работы индикатора. Я понимаю, что нужно использовать функцию ArrayMaximum/ArrayMinimum. но не пойму как задать индексы, точнее привязать их к начальной точке отсчета.
Заранее спасибо.

- www.mql5.com
Я понимаю, что нужно использовать функцию ArrayMaximum/ArrayMinimum. но не пойму как задать индексы, точнее привязать их к начальной точке отсчета.
чтобы использовать ArrayMaximum() Вам придется с начальной точки отсчета скопировать данные в новый массив, размер которого будет равен скопированным данным и тогда Вы сможете корректно применить ArrayMaximum()
сделайте проще, один цикл от начала - точка отсчета и до точки окончания - Ваш скрин квадрат, в этом цикле и находите макс и мин значения
для МТ4 примерно такой код:
#property strict #property show_inputs input datetime StartTime = D'2018.06.01'; input datetime EndTime = D'2018.10.01'; //+------------------------------------------------------------------+ void OnStart() { int st,end; double ind,min,max; min = DBL_MAX; max = 0.0; st = iBarShift(NULL,0,StartTime); end = iBarShift(NULL,0,EndTime); while(st>=end){ ind = iCustom(NULL,0,"MyIndicator",0,st); if(ind!=EMPTY_VALUE){ if(ind>max) max=ind; if(ind<min) min=ind; } st--; } Print("max = ",max," , min = ",min); } //+------------------------------------------------------------------+
Документацию почитать не пробовали?
Пробовал читать и документацию, и форум облазил и в Google-e искал. А спрашиваю потому что все равно не понял как сделать, никогда раньше не делал и со многими функциями просто не знаком.
чтобы использовать ArrayMaximum() Вам придется с начальной точки отсчета скопировать данные в новый массив, размер которого будет равен скопированным данным и тогда Вы сможете корректно применить ArrayMaximum()
сделайте проще, один цикл от начала - точка отсчета и до точки окончания - Ваш скрин квадрат, в этом цикле и находите макс и мин значения
для МТ4 примерно такой код:
Спасибо. Попробую разобраться. Не совсем понял зачем использовать iCustom? Попробую добавить эти расчеты в имеющийся индикатор.
Пробовал читать и документацию, и форум облазил и в Google-e искал. А спрашиваю потому что все равно не понял как сделать, никогда раньше не делал и со многими функциями просто не знаком.
На вопрос, или уточнение в чём собственно проблема
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Нужна помощь в нахождении Максимума и Минимума в индикаторе
Gerkl, 2018.12.11 03:39
Здрасте всем.
Имеется индикатор, который вычисляет и заполняет буффер индикатора в определенное время. Время его работы укаывается вручную. В промежутках нулевые значения.
Подскажите кто может как найти Максимум\Минимум именно в промежутках работы индикатора. Я понимаю, что нужно использовать функцию ArrayMaximum/ArrayMinimum. но не пойму как задать индексы, точнее привязать их к начальной точке отсчета.
Заранее спасибо.
я дал ссылку на функцию определения индекса бара по указанному времени.
А дальше или как в примере Igor Makanu тупым перебором в цикле, или как в документации.
int ArrayMaximum( const void& array[], // массив для поиска int start=0, // с какого индекса начинаем поиск int count=WHOLE_ARRAY // количество проверяемых );
Попробую добавить эти расчеты в имеющийся индикатор.
не прокатит, это скрипт, Вам все равно придется самостоятельно читать документацию
А дальше или как в примере Igor Makanu тупым перебором в цикле, или как в документации.
баги могут быть, если индикаторные буфера которые не отображены, не нулем заполнены, мой пример тож не защищен от этого недостатка, но топикстартеру, по моему, это не поможет )))
не прокатит, это скрипт, Вам все равно придется самостоятельно читать документацию
баги могут быть, если индикаторные буфера которые не отображены, не нулем заполнены, мой пример тож не защищен от этого недостатка, но топикстартеру, по моему, это не поможет )))
Судя по картинке не отображаемые значения отсутствуют. Ну, а если получился 0 и это будет минимальным значением, то так тому и быть.
Далеко не всегда полезны функции "на все случаи жизни".
Всем спасибо за помощь, идеи и советы. Данную задачу выполнил в виде отдельной функции. Проверил на чарте, вроде работает правильно. дальнейшее тестирование выявит ошибки, если такое будут.
Выкладываю код, если кому интересно.
void MaxMin(int i) { int st,end,cur; int maxValueIdx,minValueIdx,count; double maxValue,minValue; datetime startTime = StringToTime(TimeToString(Time[i],TIME_DATE)+" "+StartTime); datetime endTime = StringToTime(TimeToString(Time[i],TIME_DATE)+" "+EndTime); datetime currentTime=StringToTime(TimeToString(Time[i],TIME_DATE)+" "+TimeToString(Time[i],TIME_MINUTES)); st=iBarShift(NULL,0,startTime); end=iBarShift(NULL,0,endTime); cur= iBarShift(NULL,0,currentTime); if(end<=cur) { end=cur; count=(st-end); maxValueIdx=ArrayMaximum(MainBuffer,count,end); maxValue=MainBuffer[maxValueIdx]; MaxBuffer[i]= maxValue; minValueIdx = ArrayMinimum(MainBuffer,count,end); minValue=MainBuffer[minValueIdx]; MinBuffer[i]=minValue; } }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здрасте всем.
Имеется индикатор, который вычисляет и заполняет буффер индикатора в определенное время. Время его работы укаывается вручную. В промежутках нулевые значения.
Подскажите кто может как найти Максимум\Минимум именно в промежутках работы индикатора. Я понимаю, что нужно использовать функцию ArrayMaximum/ArrayMinimum. но не пойму как задать индексы, точнее привязать их к начальной точке отсчета.
Заранее спасибо.