Поиск max-min бара за n-баров

 

Подскажите пожалуйста правильное решение
Тема наверно не новая, но найти не могу

Мне надо в диапазоне за n-баров найти самый большой бар и самый маленький бар (High - Low)/Point = пункты
Пример того что я хочу получить:
параметр поиска баров =30
надо пропустить текущий и предыдущий бары
далее начать поиск на промежутке 30 баров
буду рисовать кривую и надо искать по всей истории по 30 баров,
причём с появлением нового бара тридцатый бар станет 31-вым и он уже не учитывается

 
fxfreelife:

Подскажите пожалуйста правильное решение
Тема наверно не новая, но найти не могу

Мне надо в диапазоне за n-баров найти самый большой бар и самый маленький бар (High - Low)/Point = пункты
Пример того что я хочу получить:
параметр поиска баров =30
надо пропустить текущий и предыдущий бары
далее начать поиск на промежутке 30 баров
буду рисовать кривую и надо искать по всей истории по 30 баров,
причём с появлением нового бара тридцатый бар станет 31-вым и он уже не учитывается

Тут ответ. 

Вопросы от начинающих MQL5 MT5 MetaTrader 5 - Попробуйте создать массив из 30-ти цен открытия свечей, чтобы проверять максимумы и минимумы.
Вопросы от начинающих MQL5 MT5 MetaTrader 5 - Попробуйте создать массив из 30-ти цен открытия свечей, чтобы проверять максимумы и минимумы.
  • 2023.06.27
  • www.mql5.com
Написал такой код, который выдает ошибку или значения максимум и минимум во всем массиве opens. нужно создавать еще один массив, который проверять в функциях ArrayMaximum. но я запутался с вложенными циклами и размерностью массивов
 

Запускайте цикл с шагом range, когда rates_total - prev_calculated > range

void maxMinBar(double &max, double &min, int start, int range) {
   double minBar = DBL_MAX,
          maxBar = 0;
   for (int i = start; i < start + range && i < Bars(); i++) {
      double barHeight = (High(i) - Low(i)) / _Point ;
      if( barHeight < minBar) {
         minBar = barHeight;
      }

      if( barHeight > maxBar) {
         maxBar = barHeight;
      }
   }
   max = maxBar;
   min = minBar;
}


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Bars() {
   return iBars(_Symbol, PERIOD_CURRENT);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double High(int index) {
   return iHigh(_Symbol, PERIOD_CURRENT, index);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Low(int index) {
   return iLow(_Symbol, PERIOD_CURRENT, index);
}
 
Всем спасибо, нашёл ответы с ваших постов
 

Подскажите как убрать из цикла текущий бар и предыдущий для расчета

В расчёте участвуют 30 баров, но отсчёт будет начинаться после текущего бара и предыдущего

extern int History = 30;

double MaxMinBar(int limit) 
{
   int i, bars = iBars(NULL, 0);

   for (i=limit; i<limit + History && i<bars; i++) 
   {
 
fxfreelife #:

Подскажите как убрать из цикла текущий бар и предыдущий для расчета

В расчёте участвуют 30 баров, но отсчёт будет начинаться после текущего бара и предыдущего

Текущий - нулевой, предыдущий - первый. И так далее...

Например, цена закрытия текущего - Close(0), предыдущего - Close(1).

 
Yevhenii Levchenko #:

Например, цена закрытия текущего - Close(0), предыдущего - Close(1).

Ну это я знаю, не в этом вопрос,
если считать конкретно бар то ваш метод правильный (0, 1 ...),
а тут надо найти в диапазоне бар с нужным значением
Т.е. надо исключить два бара и искать далее на 30-ти барах

 
fxfreelife #:

Ну это я знаю, не в этом вопрос,
если считать конкретно бар то ваш метод правильный (0, 1 ...),
а тут надо найти в диапазоне бар с нужным значением
Т.е. надо исключить два бара и искать далее на 30-ти барах

Запускать цикл со второго (по индексу второго... по-человечески он третий) бара

Если там нужны индексы, то добавьте переменные для индексов внутри метода, кот в примере привел
 
fxfreelife #:

Подскажите как убрать из цикла текущий бар и предыдущий для расчета

В расчёте участвуют 30 баров, но отсчёт будет начинаться после текущего бара и предыдущего

Вы ответы читаете?

https://www.mql5.com/ru/forum/6343/page1460#comment_47801350


Вопросы от начинающих MQL5 MT5 MetaTrader 5 - Попробуйте создать массив из 30-ти цен открытия свечей, чтобы проверять максимумы и минимумы.
Вопросы от начинающих MQL5 MT5 MetaTrader 5 - Попробуйте создать массив из 30-ти цен открытия свечей, чтобы проверять максимумы и минимумы.
  • 2023.06.27
  • www.mql5.com
Написал такой код, который выдает ошибку или значения максимум и минимум во всем массиве opens. нужно создавать еще один массив, который проверять в функциях ArrayMaximum. но я запутался с вложенными циклами и размерностью массивов
 
Vitaly Muzichenko #:

Вы ответы читаете?

https://www.mql5.com/ru/forum/6343/page1460#comment_47801350

Кто-то здесь точно не читает ;)

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

 
Yevhenii Levchenko #:

Кто-то здесь точно не читает ;)

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

Точно, Я немного не правильно понял задачу.

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