Обсуждение статьи "Принципы экономного пересчета индикаторов"

 

Опубликована статья Принципы экономного пересчета индикаторов:

Вызовы пользовательских и технических индикаторов занимают совсем немного места в программном коде механических торговых систем. Зачастую какие-нибудь несколько строчек кода и всего-то. Но подчас именно эти несколько строчек кода съедают львиную долю всех затрат времени, которое будет истрачено на тестирование эксперта. Так что ко всему, что связано с расчетом данных внутри индикаторов, следует относиться гораздо более обстоятельно, чем оно могло бы показаться на первый взгляд. Именно об этом и пойдёт речь в данной статье.

Рис.11 Результат прохождения теста экспертом AMA_Ex_Test

Автор: Nikolay Kositsin

 

Спасибо за статью.

У меня есть один вопрос. Вы для оптимизации расчетов индикатора используете первую форму индикатора, там есть  begin. Но если нельзя её использовать (для корректных расчетов нужны open[], high[], low[], close[] ...) как быть ? там во второй форме нет begin

 
Prival:

Спасибо за статью.

У меня есть один вопрос. Вы для оптимизации расчетов индикатора используете первую форму индикатора, там есть  begin. Но если нельзя её использовать (для корректных расчетов нужны open[], high[], low[], close[] ...) как быть ? там во второй форме нет begin

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

рассмотрено не все но в целом все равно интересно =)

а конкретно не рассмотрена такая штука как оптимизация вызова технических индикаторов

мне кажется это тема достаточно актуальна. 

 

вернее как лучше инициализировать технический индикатор

в целом функция проверки данных реализована

но пример инициализации точно не рассмотрен

 насколько известно из справки 

Нельзя обратиться к данным индикатора сразу после его создания, так как на расчет значений индикатора требуется некоторое время, и поэтому создавать хэндлы индикаторов лучше всего в OnInit(). Функция iCustom() создает соответствующий пользовательский индикатор и при успешном создании возвращает его хэндл. Пользовательские индикаторы могут содержать до 512 индикаторных буферов, содержимое которых также можно получать при помощи функции CopyBuffer(), используя полученный хэндл.

 как лучше обойти данную особенность....

 

меня тоже все время интерисует одна вещь

   if (Handle == INVALID_HANDLE)  Print(" Не удалось получить хендл индикатора SMA");

 если это условие сработало, что делать ? допустим это чемпионат, все ... инит больше не запуститься

 
Prival:

меня тоже все время интерисует одна вещь

 если это условие сработало, что делать ? допустим это чемпионат, все ... инит больше не запуститься

 Да! Факт незадокументированный, я тож не в курсе! Точно надо бы разобраться! Но мне проще, я все индюки в самого эксперта упакую и усё, чтобы эксперт на марафонских дистанциях бегал как спринтер и не спотыкался ни разу нигде и никогда!

 
Prival:

меня тоже все время интерисует одна вещь

 если это условие сработало, что делать ? допустим это чемпионат, все .. инит больше не запуститься

Для начала получить код ошибки и вывести ее в лог. И попытаться уже в OnTick() или OnCalculate() еще раз доступиться. Если не удалось получить хэндл индикатора, то скорей всего такого индикатора нет или не хватает памяти. Эксперт в таком случае не имеет права торговать.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 
Rosh:
Для начала получить код ошибки и вывести ее в лог. И попытаться уже в OnTick() или OnCalculate() еще раз доступиться. Если не удалось получить хэндл индикатора, то скорей всего такого индикатора нет или не хватает памяти. Эксперт в таком случае не имеет права торговать.

 

Ну вот дождались!  так мы и сами умеем! Вот если бы в такой ситуации сделать возврат функцией OnInit() минус единицы для повторного вызова OnInit() и так до тех пор, пока хендл не появится! Но теперь и так всё понятно, что если компьютер не перенапрягать, то и причин для неполучения хендла не обнаружится. Но я как-то при обновлении билда такое видел, лечится перекомпиляцией индикатора!

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Минус один вернуть можно, но ничего хорошего для советника/индикатора это не сулит.

 
К счастью, ошибка создания индикатора по вине терминала практически не происходит.
Причина обращения: