Ошибки, баги, вопросы - страница 3150
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это обсуждение здесь оффтоп, ему место в какой-нибудь новичковой ветке
Если не пользовался этой конструкцией раньше, то воздержись со своим офтопом.
раньше тоже не мог заходить с этим же кодом
не сочиняйте
у Хатимлянского скачайте старый билд и проверьте, если не верите.
Артём тоже пользовался этой конструкцией.
Что и описал он выше, поэтому только он тут понимает проблему.
Раньше правильный расчёт limit был
и заходил в цикл i>=0
А теперь не заходит, потому что limit получается -1
Всегда была проверка: if(limit>1) limit=rates_total-1. Это для случаев, если нет в расчётах i+сколько_то. Если есть, то эти "сколько-то" нужно включать в конструкцию: limit=rates_total-1-сколько_то.
Без неё всегда был выход за пределы массива. Ведь rates_total - это ни что иное как Bars(). Соответственно, если баров 5000, и мы обращаемся к индексу 5000, то выходим за пределы массива (подсчёт-то баров с нуля начинается).
В вашем примере не правильный расчёт limit:
Должен быть таким:
int limit = rates_total-prev_calculated;А после него проверка на limit>1
и если limit таки больше единицы, то limit = rates_total-1
Всегда была проверка: if(limit>1) limit=rates_total-1. Это для случаев, если нет в расчётах i+сколько_то. Если есть, то эти "сколько-то" нужно включать в конструкцию: limit=rates_total-1-сколько_то.
Без неё всегда был выход за пределы массива. Ведь rates_total - это ни что иное как Bars(). Соответственно, если баров 5000, и мы обращаемся к индексу 5000, то выходим за пределы массива (подсчёт-то баров с нуля начинается).
В вашем примере не правильный расчёт limit:
Должен быть таким:
А после него проверка на limit>1
и если limit таки больше единицы, то limit = rates_total-1
Спасибо Артём! И сорян за кипишь.
Точно, должна быть проверка, о ней как раз я запамятовал.
В коде у меня комментарий ещё остался
//Проверка и расчёт количества просчитываемых баров.
Видимо копипаста дала о себе знать, и пошло недопонимание у меня.
С проверкой всё как надо работает. Спасибо.
Спасибо Артём!
Точно, должна быть проверка, о ней как раз я запамятовал.
С проверкой всё как надо работает. Спасибо.
Пожалуйста. Расчёт limit исправьте. Он у вас не правильный - я выше акцентировал внимание на этом.
-1 здесь быть не должно.
Если rates_total равен 5000, и просчитанных на прошлом вызове OnCalculate() баров тоже 5000 (prev_calculated), то limit будет равен -1. Соответственно, цикл выполняться не будет вообще.
Если же хотите сделать выбор как считать индикатор (по тикам на нулевом баре, либо только на открытии нового), то введите переменную, указывающую как считать:
int end = (каждый тик ? WRONG_VALUE : 0);
тогда цикл будет таким: for(int i=limit; i>end; i--) { //... }
и расчёт limit будет верным, и цикл таким, какой хотите.
Правильный код.
i>=0 для каждого тика
i>0 для нового бара
Или
Ты даже не спросил чем заняться... Телепаты из отпуска вернулись? ;)
Правильный код.
i>=0 для каждого тика
i>0 для нового бара
Это лучше в OnInit() перенести
Ты даже не спросил чем заняться... Телепаты из отпуска вернулись? ;)
:)
Артем, не нужно быть телепатом, чтобы увидеть, что чел зарегистрировался несколько минут назад и первым делом увидел "Ошибки, баги, вопросы"
Ясень пень, что спрашивает про то, можно ли на халяву капусты срубить, причем чтоб особо не напрягаться...
:)
Артем, не нужно быть телепатом, чтобы увидеть, что чел зарегистрировался несколько минут назад и первым делом увидел "Ошибки, баги, вопросы"
Ясень пень, что спрашивает про то, можно ли на халяву капусты срубить, причем чтоб особо не напрягаться...
Может он решил тяжким трудом программиста срубить себе средств на Бентли, вложившись в репетитора? :)