Спасибо за статью.
У меня есть один вопрос. Вы для оптимизации расчетов индикатора используете первую форму индикатора, там есть begin. Но если нельзя её использовать (для корректных расчетов нужны open[], high[], low[], close[] ...) как быть ? там во второй форме нет begin
Спасибо за статью.
У меня есть один вопрос. Вы для оптимизации расчетов индикатора используете первую форму индикатора, там есть begin. Но если нельзя её использовать (для корректных расчетов нужны open[], high[], low[], close[] ...) как быть ? там во второй форме нет begin
рассмотрено не все но в целом все равно интересно =)
а конкретно не рассмотрена такая штука как оптимизация вызова технических индикаторов.
мне кажется это тема достаточно актуальна.
вернее как лучше инициализировать технический индикатор
в целом функция проверки данных реализована
но пример инициализации точно не рассмотрен
насколько известно из справки
Нельзя обратиться к данным индикатора сразу после его создания, так как на расчет значений индикатора требуется некоторое время, и поэтому создавать хэндлы индикаторов лучше всего в OnInit(). Функция iCustom() создает соответствующий пользовательский индикатор и при успешном создании возвращает его хэндл. Пользовательские индикаторы могут содержать до 512 индикаторных буферов, содержимое которых также можно получать при помощи функции CopyBuffer(), используя полученный хэндл.
как лучше обойти данную особенность....
меня тоже все время интерисует одна вещь
if (Handle == INVALID_HANDLE) Print(" Не удалось получить хендл индикатора SMA");
если это условие сработало, что делать ? допустим это чемпионат, все ... инит больше не запуститься
меня тоже все время интерисует одна вещь
если это условие сработало, что делать ? допустим это чемпионат, все ... инит больше не запуститься
Да! Факт незадокументированный, я тож не в курсе! Точно надо бы разобраться! Но мне проще, я все индюки в самого эксперта упакую и усё, чтобы эксперт на марафонских дистанциях бегал как спринтер и не спотыкался ни разу нигде и никогда!
меня тоже все время интерисует одна вещь
если это условие сработало, что делать ? допустим это чемпионат, все .. инит больше не запуститься
- www.mql5.com
Для начала получить код ошибки и вывести ее в лог. И попытаться уже в OnTick() или OnCalculate() еще раз доступиться. Если не удалось получить хэндл индикатора, то скорей всего такого индикатора нет или не хватает памяти. Эксперт в таком случае не имеет права торговать.
Ну вот дождались! так мы и сами умеем! Вот если бы в такой ситуации сделать возврат функцией OnInit() минус единицы для повторного вызова OnInit() и так до тех пор, пока хендл не появится! Но теперь и так всё понятно, что если компьютер не перенапрягать, то и причин для неполучения хендла не обнаружится. Но я как-то при обновлении билда такое видел, лечится перекомпиляцией индикатора!
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Принципы экономного пересчета индикаторов:
Вызовы пользовательских и технических индикаторов занимают совсем немного места в программном коде механических торговых систем. Зачастую какие-нибудь несколько строчек кода и всего-то. Но подчас именно эти несколько строчек кода съедают львиную долю всех затрат времени, которое будет истрачено на тестирование эксперта. Так что ко всему, что связано с расчетом данных внутри индикаторов, следует относиться гораздо более обстоятельно, чем оно могло бы показаться на первый взгляд. Именно об этом и пойдёт речь в данной статье.
Автор: Nikolay Kositsin