Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
185916
MetaQuotes Software Corp.  

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

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

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

Автор: Nikolay Kositsin

Prival
4596
Prival  

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

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

Stanislav Korotky
21009
Stanislav Korotky  
Prival:

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

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

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

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

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

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

Vasily
1261
Vasily  

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

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

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

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

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

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

Prival
4596
Prival  

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

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

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

Nikolay Kositsin
318006
Nikolay Kositsin  
Prival:

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

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

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

Rashid Umarov
Админ
12389
Rashid Umarov  
Prival:

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

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

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

 

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

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

MetaQuotes
Админ
25306
Renat Fatkhullin  
К счастью, ошибка создания индикатора по вине терминала практически не происходит.

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий