Одинаковое значение разных шагов iHighest

 

Не могу понять где ошибка.

Вот код 

for(int i=0;count>i;i+=15){

   int val_indexHigh = iHighest(NULL,PERIOD_M15,MODE_HIGH,i+15,i);
  Print(__FUNCTION__," i ",i," i+15 ",i+15 ,"  val_indexHigh ",val_indexHigh ); 

Итерация шагов смещается на 15 но результат индекса выходит за диапазон. Уже со второй итерацией между числами 15 и 30 число индекса найденого максимального значения оказывается вне диапазона 43 А дальше начиная со значений 75-90 вообще застряет на значении индекса 137 и пять раз показывает одно и тоже значение.

a

 
Igor Petrov:

Не могу понять где ошибка.

Вот код 

Итерация шагов смещается на 15 но результат индекса выходит за диапазон. Уже со второй итерацией между числами 15 и 30 число индекса найденого максимального значения оказывается вне диапазона 43 А дальше начиная со значений 75-90 вообще застряет на значении индекса 137 и пять раз показывает одно и тоже значение.


вам даже сайт дал ссылку iHighest

переходим, читаем:

int  iHighest(
   const string        symbol,              // символ
   ENUM_TIMEFRAMES     timeframe,           // период
   ENUM_SERIESMODE     type,                // идентификатор таймсерии
   int                 count=WHOLE_ARRAY,   // число элементов
   int                 start=0              // индекс
  );

у вас это число переменное

Документация по MQL5: Доступ к таймсериям и индикаторам / iHighest
Документация по MQL5: Доступ к таймсериям и индикаторам / iHighest
  • www.mql5.com
iHighest - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Igor Petrov:

Не могу понять где ошибка.

Вот код 

Итерация шагов смещается на 15 но результат индекса выходит за диапазон. Уже со второй итерацией между числами 15 и 30 число индекса найденого максимального значения оказывается вне диапазона 43 А дальше начиная со значений 75-90 вообще застряет на значении индекса 137 и пять раз показывает одно и тоже значение.

А почему Вы решили что в коде ошибка? Попробуйте в том же диапазоне померить руками на графике!
 
Igor Petrov:

Не могу понять где ошибка.

Вот код 

Итерация шагов смещается на 15 но результат индекса выходит за диапазон. Уже со второй итерацией между числами 15 и 30 число индекса найденого максимального значения оказывается вне диапазона 43 А дальше начиная со значений 75-90 вообще застряет на значении индекса 137 и пять раз показывает одно и тоже значение.


Итерация, конечно, 15, но и сдвиг в функции тоже 15. Всего получается 30, вот и выход за диапазон допустимых адресов. 

 

Никак не могу понять объяснения.

Попробую по шагам.

1. Шаг проверяются индексы с 0 по 15 Здесь результат правильный Найденный индекс максимального значения попадает в диапазон и равен 6

2. Шаг идет смещение на 15 и проверяются индексы начиная от 15 значение стартовое 15 и Количество элементов 15

i+15

итого функция 

iHighest

должна проверить значения элементов от 15 до 30  но результат которая она выдает индекс 43 не находится между этими пределами.

val_indexHigh = 43

Третий шаг функция проверяет значения между 30 и 45 и результат находится в этом диапазоне и результат тот же что и на предыдущем шаге 43. Здесь результат правильный. Но на предыдущем шаге ведь не правильно Там не было проверяемого индекса 43.  

 
у вас i+15 количество проверяемых элементов, вы каждый раз проверяете НЕ 15 элементов.
 
Igor Petrov:

Не могу понять где ошибка.

Вот так нужно сделать:

int val_indexHigh = iHighest(NULL,PERIOD_M15,MODE_HIGH,15,i);

Иначе проверяемый диапазон плавает от 15 до 30 баров

 
Ihor Herasko #:

Вот так нужно сделать:

Иначе проверяемый диапазон плавает от 15 до 30 баров

судя по принтам до 210 за раз

 
Igor Petrov #:

Никак не могу понять объяснения.

Попробую по шагам.

1. Шаг проверяются индексы с 0 по 15 Здесь результат правильный Найденный индекс максимального значения попадает в диапазон и равен 6

2. Шаг идет смещение на 15 и проверяются индексы начиная от 15 значение стартовое 15 и Количество элементов 15

Для себя распишите по подробней.

  1. Шаг проверяются индексы с 0 по 15 Здесь результат правильный Найденный индекс максимального значения попадает в диапазон и равен 6 (i = 0 — i+15 = 15)
  2. Шаг идет смещение на 15 и проверяются индексы начиная от 15 значение стартовое 15 и Количество элементов 15                                         (i = 15 — i+15 = 30)
и так до тех пор пока не поймёте.
 
Все понял, думал что количество считается от индекса текущего, запутался. Огромное всем спасибо.
Причина обращения: