Ошибки, баги, вопросы - страница 1681
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Без разницы идут котировки или стоят. В индикаторе нужно контролировать условие prev_calculate==0 - это подкачка истории и второй момент - щадящий режим пересчёта изменённых баров, то есть по сути rates_total -prev_calculate+1.
Вы бы читали сначала, что написано, а только потом отвечали. Код для воспроизведения бага отладчика! Все данные для воспроизведения даны.
Вот скрипт для воспроизведения того же бага
Вы бы читали сначала, что написано, а только потом отвечали. Код для воспроизведения бага отладчика! Все данные для воспроизведения даны.
Я Вам ответил - Вам нет дела до того, сколько раз вызывается OnCalculate. Ваша задача - обеспечивать или полный пересчёт индикатора или частичный, анализируя два значения: rates_total, prev_calculate и условие когда prev_calculate==0.
Нет жёстких условий, что OnCalculate() должна быть вызвана один или два раза. OnCalculate() никому ничего не должна. А вот программист обязан контролировать два значения: rates_total, prev_calculate и условие когда prev_calculate==0.
Я Вам ответил - Вам нет дела до того, сколько раз вызывается OnCalculate. Ваша задача - обеспечивать или полный пересчёт индикатора или частичный, анализируя два значения: rates_total, prev_calculate и условие когда prev_calculate==0.
Мне есть дело, сколько раз вызывается отладчик и сколько раз вызывается OnCalculate. Я по натуре ЗАНУДА! И мне до всего есть дело.
Вы совершенно не разобравшись в сути проблемы, пытаетесь меня учить чему-то. Спасибо, конечно. Но давайте слушать и слышать оппонента.
Не, я на RTS сейчас запускаю, когда котиры стоят. Выяснил, что вызывается один раз, а отладчик врет, показывая, будто два. Код для воспроизведения (запускать на символе, где не идут тики)
После нажатия на F5 будет попадание на точку останова. И после второго нажатия на F5 - аналогично. Хотя этого не должно бы было быть - как подтверждение, можно раскоментировать строчку, что в коде и попробовать с ней.
Вот так видно, в чём дело. Проследите за значением i на первой и второй остановках.
Вот так видно, в чём дело. Проследите за значением i на первой и второй остановках.
Прослеживал, поэтому и написал
Выяснил, что вызывается один раз, а отладчик врет, показывая, будто два
Зачем отладчик возвращает меня туда же после второго нажатия на F5? С return(0) такого не происходит, что есть правильно.
Да не врёт, а останавливается дважды - перед вычислением выражения в скобках, и после него, непосредственно перед возвратом.
Кстати, очень удобная фишка, на мой взгляд. Надо запомнить. Не нужно выносить результат в скобках в отдельную переменную, чтобы проверить возвращаемое значение перед выходом, дебаггер сам повторно сделает остановку.
Да не врёт, а останавливается дважды - перед вычислением выражения в скобках, и после него, непосредственно перед возвратом.
Кстати, очень удобная фишка, на мой взгляд. Надо запомнить. Не нужно выносить результат в скобках в отдельную переменную, чтобы проверить возвращаемое значение перед выходом, дебаггер сам второй раз сделает остановку.
Поставьте такой код:
и набросьте индикатор на график. А потом перезагрузите терминал (индикатор удалять с графика не нужно). Увидите, что OnCalculate() может быть вызвано и один раз, и два раза, и даже три. То етьс, как я говорил выше - нет жёстких правил.
Поставьте такой код:
и набросьте индикатор на график. А потом перезагрузите терминал (индикатор удалять с графика не нужно). Увидите, что OnCalculate() может быть вызвано и один раз, и два раза, и даже три. То етьс, как я говорил выше - нет жёстких правил.
Согласился бы, что это удобно. Но как выяснить результат возврата перед выходом без переменной в отладчике?
Посмотреть в теле Func(), что она возвращает перед выходом. Я ж о частном случае говорю. Если значение будет вычисляться непосредственно в скобках, то никак, конечно.
PS. Хотя... Почему никак? На второй остановке посмотреть значения всех аргументов return() и подсчитать результат. )