Просьба по функциям iLowest и iHighest.

 

Добрый день!

При тестировании столкнулся с проблемой вывода максимальных и минимальных значений функций iLowest и iHighest.

Опытным путем установил, что при смене таймфрейма на тестере эти функции возвращают значения таймфрейма, который указан в тестере, а не передается параметром в функцию - вопиющая несправедливость, подумал я, до того, как почитал документацию и форум.

В документации было сказано, что может вылетать ошибка и следует попробовать еще раз - при этом самой ошибки у меня в тестах не было.

Форум окончательно прояснил ситуацию - оказалось дело не в функциях iLowest и iHighest, а в Low и High!

Вот ссылка на тему https://www.mql5.com/ru/forum/104426

Вкратце: вопрос заключался в том, что для независимости от таймфреймов необходимо использовать функции iLow и iHigh, а не Low и High!

Если же посмотреть документацию по функции iLowest, то можно увидеть следующий код в примере:

int val_index=iLowest(NULL,0,MODE_LOW,10,10);
if(val_index!=-1) val=Low[val_index];

Просьба: замените, пожалуйста, в официальной документации функцию Low, на iLow, потому что текущий пример вводит в заблуждение и порождает логические ошибки в коде, либо допишите текстом, что на разных таймфреймах лучше использовать iLow, либо напишите в примере, что пример абстрактный.

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

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

Спасибо.

Не работают iHighest и iLowest
Не работают iHighest и iLowest
  • 2007.08.10
  • www.mql5.com
Не знаю с какого билда началось, но в 208 не работает следующая конструкция: hilevel=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,4,0)]; При задействован...
 
Manaslu Manaslov:

Добрый день!

При тестировании столкнулся с проблемой вывода максимальных и минимальных значений функций iLowest и iHighest.

Опытным путем установил, что при смене таймфрейма на тестере эти функции возвращают значения таймфрейма, который указан в тестере, а не передается параметром в функцию - вопиющая несправедливость, подумал я, до того, как почитал документацию и форум.

В документации было сказано, что может вылетать ошибка и следует попробовать еще раз - при этом самой ошибки у меня в тестах не было.

Форум окончательно прояснил ситуацию - оказалось дело не в функциях iLowest и iHighest, а в Low и High!

Вот ссылка на тему https://www.mql5.com/ru/forum/104426

Вкратце: вопрос заключался в том, что для независимости от таймфреймов необходимо использовать функции iLow и iHigh, а не Low и High!

Если же посмотреть документацию по функции iLowest, то можно увидеть следующий код в примере:

Просьба: замените, пожалуйста, в официальной документации функцию Low, на iLow, потому что текущий пример вводит в заблуждение и порождает логические ошибки в коде, либо допишите текстом, что на разных таймфреймах лучше использовать iLow, либо напишите в примере, что пример абстрактный.

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

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

Спасибо.

Так и должно быть. Родным таймфреймом для тестера является тот который установлен в параметрах тестера.

Будьте внимательны. Вот-же ответ одиннадцатилетней давности

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Не работают iHighest и iLowest

Rashid Umarov, 2007.08.13 12:14

Потому что High[] обращается к данным родного таймфрейма, а если вы хотите обращаться к данным другого таймфрейма, то используйте iHigh().

 
Alexey Viktorov:

Так и должно быть. Родным таймфреймом для тестера является тот который установлен в параметрах тестера.

Будьте внимательны. Вот-же ответ одиннадцатилетней давности


Алексей, у меня просьба конкретно к примеру из документации по функциям iLowest/iHighest, а не по тестеру.

Если бы вызов Low был в терминале из соседнего таймфрейма он бы в советнике высчитывал данные соседнего таймфрейма, при чем здесь тестер.

Уверен, что добавить одну строчку текста в документацию (или исправить пример) - это совсем не сложно.

 
Manaslu Manaslov:

Алексей, у меня просьба конкретно к примеру из документации по функциям iLowest/iHighest, а не по тестеру.

Если бы вызов Low был в терминале из соседнего таймфрейма он бы в советнике высчитывал данные соседнего таймфрейма, при чем здесь тестер.

Уверен, что добавить одну строчку текста в документацию (или исправить пример) - это совсем не сложно.

С чего это вы взяли такой вывод?

Low[], High[], Open[], Close[], Time[] и Volume[] возвращают данные с текущего таймфрейма.

Из справки mql4:

double High[]

Массив-таймсерия, содержащий максимальные цены каждого бара текущего графика.

Индексация элементов таймсерий производится задом наперед, от последнего к первому. Текущий бар, самый последний в массиве, имеет индекс 0. Самый старый бар, первый на графике, имеет индекс Bars-1.

double Low[]

Массив-таймсерия, содержащий минимальные цены каждого бара текущего графика.

Индексация элементов таймсерий производится задом наперед, от последнего к первому. Текущий бар, самый последний в массиве, имеет индекс 0. Самый старый бар, первый на графике, имеет индекс Bars-1.

Про остальные массивы-таймсерии сами прочтите.
 
Manaslu Manaslov:

Алексей, у меня просьба конкретно к примеру из документации по функциям iLowest/iHighest, а не по тестеру.

Если бы вызов Low был в терминале из соседнего таймфрейма он бы в советнике высчитывал данные соседнего таймфрейма, при чем здесь тестер.

Уверен, что добавить одну строчку текста в документацию (или исправить пример) - это совсем не сложно.

Как не по тестеру когда в вашем сообщении говорится именно о тестере, что я и выделил при циировании

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Просьба по функциям iLowest и iHighest.

Manaslu Manaslov, 2018.11.02 10:59

Добрый день!

При тестировании столкнулся с проблемой вывода максимальных и минимальных значений функций iLowest и iHighest.

Опытным путем установил, что при смене таймфрейма на тестере эти функции возвращают значения таймфрейма, который указан в тестере, а не передается параметром в функцию - вопиющая несправедливость, подумал я, до того, как почитал документацию и форум.

Но я согласен, тестер действительно не при чём, такое-же поведение и в терминале будет. Повторять цитаты из документации, думаю будет лишним.
 
Artyom Trishkin:

С чего это вы взяли такой вывод?

Low[], High[], Open[], Close[], Time[] и Volume[] возвращают данные с текущего таймфрейма.

Из справки mql4:

Про остальные массивы-таймсерии сами прочтите.

Немного не правильно выразился - если бы в терминале переключился на соседний таймфрейм, то данные вызова Low были бы этого текущего (родного) таймфрейма, на который я переключился, который активен в данный момент.

Прощу прощения.

Еще раз.

Ситуация с примером кода: есть вызов iLowest (не важно iHighest) с явным указанием таймфрейма PERIOD_M1, переданным, как параметр, в функцию, а при переключении в самой программе, терминале (ну или указание в тестере) таймфрейма на, допустим М15, код в связке с вызовом Low возвращает данные уже таймфрейма М15, что лично меня крайне огорчает потому, что для функции был явно указан параметр.

val_index = iLowest(Symbol(), PERIOD_M1, MODE_LOW, bar_count, bar_index);
if(-1 != val_index){
   extremum = Low[val_index];
   //extremum = iLow(Symbol(), PERIOD_M1, val_index);
...

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

 
Manaslu Manaslov:

Еще раз.

И ещё раз

текущего... И только текущего...

Только вот удобства такие исправления не добавят. А добавят огромное количество головной боли и непоняток.
 
Alexey Viktorov:

И ещё раз


текущего... И только текущего...

Только вот удобства такие исправления не добавят. А добавят огромное количество головной боли и непоняток.

Алексей, я разве писал, что я не понимаю, что Low это вызов от текущего таймфрейма?

По-моему, Вы не по теме пишите комментарий уже не в первый раз.

На мой взгляд, использование в примере в документации функции iLow как раз наоборот исключит ошибки смены таймфрейвом и будет более универсальным решением.

Пример документации даже не обязательно менять - как альтернативный вариант, просто дописать текст к описанию функции, что пример абстрактный или опять же текстом дописать, что при использовании iLow будет устранена зависимость от таймфрейма.

Если у Вас другое мнение по поводу использования других вызовов или функций в примерах документации  - это Ваше право.

Моё обращение здесь больше к разработчикам продукта, т.к. я предполагаю, что документацию к своему продукту могут править только они.

 

А вот и  я))) 

Всем привет,

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


Помню делал определитель хай и лоу цены и сделал выбор таймфрейма (периода), но на других таймфреймах кроме текущего определение хай и лоу цены было некорректным. Пришлось убрать возможность выбора timeframe и тупо прописать нуль - текущий таймфрейм графика значит.

Так что это за параметр такой -  timeframe - и почему в справке предлагается его выбирать, если iHighest только с текущим таймфремом работает? Может просто инфа в описание iHighest перенеслась автоматом из iHigh? Подозреваю что так и есть.

 
geratdc_:

А вот и  я))) 

Всем привет,

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


Помню делал определитель хай и лоу цены и сделал выбор таймфрейма (периода), но на других таймфреймах кроме текущего определение хай и лоу цены было некорректным. Пришлось убрать возможность выбора timeframe и тупо прописать нуль - текущий таймфрейм графика значит.

Так что это за параметр такой -  timeframe - и почему в справке предлагается его выбирать, если iHighest только с текущим таймфремом работает? Может просто инфа в описание iHighest перенеслась автоматом из iHigh? Подозреваю что так и есть.

Не вводите народ в заблуждение, функция имеет возможность задавать таймфрейм, с которого брать данные.

 
Я тоже так думал, но потом когда ковырялся, понял что у меня она некорректно выдавала экстремумы с других таймфреймов кроме текущего. Стал бы я тогда поддакивать здесь тем кто указывает на аналогичную проблему.
Причина обращения: