Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спрошу тогда по другому
Как для индикатора, безопасно и без лагов графика, пересчитывать все бары в истории на каждом тике и по типу первый старт
Т.е. при первом старте пересчитываются все бары в истории и далее добавляется новый бар, вот и нужно постоянно пересчитывать все бары в истории
Так ведь на подобной логике и работают почти все индикаторы. Код, показанный Вами, именно это и делает. Проблема, скорее всего, в том, что все это перенесено в OnTimer, для которого IndicatorCounted() некорректно работает. В таком случае нужно просто повторить логику IndicatorCounted своими силами, запоминая количество посчитанных баров на последней итерации:
У меня закачена история с 1999 года
Есть какой нибудь быстрый цикл баров истории с ограничением отображения по дате а не по барам ?
У индикатора отображать объекты на графике не по всей истории а с определённой даты, например с начала 2020 года
Или может есть быстрый цикл по всей истории но чтоб не тормозил график ?
Такой цикл не подходит, тяжело тащит
В прошлую пятницу меня попросили решить эту проблему. Времени в субботу и воскресенье не было, сделал во вторник, или в среду - не помню.
Просто, не отображайте индикатор на всей истории, ограничьте глубину ретроспективы. Это не просто, а очень просто. У меня так:
Я не совсем понимаю Ваш вопрос.
Лучше бы Вы выложили код индикатора, и тогда можно было бы что-то посоветовать конкретное.
Общая рекомендация делать код без дополнительных циклов, а дальше уже нужно смотреть, где у Вас "тяжёлые" расчёты.
То, что Вы спрашиваете про основной цикл по всем барам, это нужная часть кода, чтобы сделать расчёты на всей истории. И этот цикл не займёт особого времени на любом временном интервале.
Это работает так. При первом запуске индикатора IndicatorCounted() вернёт 0 баров, и цикл пройдёт по всем барам истории допустим 2000 баров.
Затем на следующем тике IndicatorCounted() вернёт число 2000, и основной цикл уже будет считать только последние два бара.
если 2000>0 тогда 2000-1=1999
лимит будет равен 2000-1999=1.
цикл от 1 до 0.
И цикл при каждом последующем тике пересчитывает всего один предыдущий и один текущий бар.
Вот и всё, цикл ничего не весит. А все тормоза у Вас скорее всего в коде внутри этого цикла, но мы этот код не видим.
И главная причина непонимания на форуме: нужно говорить о том, что Вы хотите получить, а не то почему не работает, то что Вы делаете? Никто ведь не знает, какие идеи у Вас в голове. И возможно есть более простые решения этого вопроса.
Если смотреть на тот кусок, который Вы показали, возникает много вопросов:
- функция start() не используется в индикаторах, вместо неё используется OnCalculate,
- зачем использовать OnTimer, когда для приёма тиков предназначен OnCalculate,
- зачем Вы используете странную конструкцию if (counted_bars==0) {limit--; limit-=10;} else limit++;
Лучше скажите, что Вы хотите получить и выложите весь код полностью. Тогда есть шанс на быструю помощь, без 20 страниц пустых разговоров.
ЗЫ Жутко работает форум.
Пытаюсь ответить на пост - мне под курсор засовывают предложение скачать МТ5 (скачал уже 5 раз, кому от этого полегчало?). Пытаюсь раскрасить кусок кода - раскрашивается кусок текста сообщения.
Спасибо добрые люди за помощь!!
По моим требованиям мне больше подходит такое решение, работает чисто, без лагов :
Подскажите пожалуйста что значит отмеченное и что ожидается если >0