Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1) Замерьте время выполнения одного обсчета OnTick/OnCalculate в микросекундах и выводите их в лог.
Так вы сможете увидеть, сколько времени вы тратите на обсчет одного тика. После чего оцените, сколько тиков при такой скорости вы можете обсчитывать в секунду. Наверняка окажется, что не больше десятка тиков, а их приходит заведомо больше в секунду.
2) Замерьте время обсчета каждого OnCalculate на индикаторах, которые прикреплены в чартам/таймфреймам, откуда вы извлекаете данные.
Там наверняка аналогичная ситуация. Из-за тормозных вычислений терминал ждет, пока будет разблокирован просчитываемый символ:таймфрейм. Именно тормозные индикаторы, тем более на глубокой истории, приводят к заморозке отдачи чужих чартов.
При разработке индикаторов нужно вопросы производительности и экономные пересчеты ставить на первое место. Иначе убьете все вокруг.
Ренат, как-то совсем грустно стало. Тики теперь ждут, пока я разгребу свои проблемы? До сих пор я полагал, что тики генерируются сами по себе, а я либо успеваю, либо нет. А теперь оказывается, что я могу подвесить систему.
Ренат, как-то совсем грустно стало. Тики теперь ждут, пока я разгребу свои проблемы? До сих пор я полагал, что тики генерируются сами по себе, а я либо успеваю, либо нет. А теперь оказывается, что я могу подвесить систему.
Индикатор выполняется на каждом тике, без пропусков. Нужно все время контролировать длительность OnCalculate и частоту прихода тиков. Иначе получите затык.
Самое простое воспроизведение - запустить индикатор на кастомном символе и начать пробрасывать в него тики с определенной частотой. По мере увеличения частоты увидите тормоза. Все логично.
В каких случаях индикатор может не нарисовать своё значение? буферы заполнены валидными значениями, а на чарте у индикатора пусто.... ладно хоть не наоборот. билд 1940
1944 так же. наверно так и должно быть
Индикатор выполняется на каждом тике, без пропусков. Нужно все время контролировать длительность OnCalculate и частоту прихода тиков. Иначе получите затык.
Самое простое воспроизведение - запустить индикатор на кастомном символе и начать пробрасывать в него тики с определенной частотой. По мере увеличения частоты увидите тормоза. Все логично.
Да, именно так.
Ренат, как-то совсем грустно стало. Тики теперь ждут, пока я разгребу свои проблемы? До сих пор я полагал, что тики генерируются сами по себе, а я либо успеваю, либо нет. А теперь оказывается, что я могу подвесить систему.
Тики всегда ждали. Мы гарантируем вызов OnCalculate на каждом тике.
Если в четвёрке это приводило к заморозке GUI, то в пятёрке это всего лишь задержка отдельного потока обработки конкретного символа. И в пятёрке так было всегда. Просто Вы это увидели только теперь
С заморозкой обновления чужого невидимого таймфрейма после реконнекта связи разобрались и исправили. Причина была в неправильных статусах кеша именно после реконнекта.
Бета версия 1946 доступна через Help -> Check Desktop Updates -> Latest Beta Version.
Обновился, будем тестировать.
Вопрос, была ли текущая проблема связанна и с случаями загрузки данных других инструментов (невидимого таймфрейма), я о мультивалютных индикаторах и экспертах или это не взаимосвязанные проблемы?
Тики всегда ждали. Мы гарантируем вызов OnCalculate на каждом тике.
Если в четвёрке это приводило к заморозке GUI, то в пятёрке это всего лишь задержка отдельного потока обработки конкретного символа. И в пятёрке так было всегда. Просто Вы это увидели только теперь
в логе терминала будет о такой ситуации сообщение, примерно как "indicator is too slow"
?
в логе терминала будет о такой ситуации сообщение, примерно как "indicator is too slow"
?
В логе экспертов
спасибо, это хоть что то, но я понимаю, что программно нельзя определить, что индикатор рассчитывает тики которые не актуальны и индикатор подвешивает поток терминала?
спасибо, это хоть что то, но я понимаю, что программно нельзя определить, что индикатор рассчитывает тики которые не актуальны и индикатор подвешивает поток терминала?
Можно попытаться определить.
Если это минутки, то можно сравнить время последнего бара с TimeCurrent(). Если не M1, то можно спросить iTime(_Symbol,PERIOD_M1,0) и сравнить с TimeCurrent().
Можно сравнить цену Bid или Last (в зависимости от инструмента) с ценой Close последнего бара. Можно сразу спросить SymbolInfoTick текущего символа. Там кроме бида и ласта ещё и время тика еть