В режиме "Шаг с заходом" поочерёдно просматривая вкладку "Отладка":
Спасибо. Никак не могу понять, почему в начале индикатор вызывает дважды OnCalculate. Хотелось бы выяснить, на какое событие такая реакция. По отладке, к сожалению, событий не видно.
fxsaber: Спасибо. Никак не могу понять, почему в начале индикатор вызывает дважды OnCalculate. Хотелось бы выяснить, на какое событие такая реакция. По отладке, к сожалению, событий не видно.
Бывает дважды, бывает один, а может и три раза дёрнуть: Вы в Oncalculate() поставьте такой код -
Бывает дважды, бывает один, а может и три раза дёрнуть: Вы в Oncalculate() поставьте такой код -
будет понятно, когда происходит подкачка истории (при подкачке истории prev_calculated==0).
Не, я на RTS сейчас запускаю, когда котиры стоят. Выяснил, что вызывается один раз, а отладчик врет, показывая, будто два. Код для воспроизведения (запускать на символе, где не идут тики)
#property indicator_chart_window#property indicator_buffers1#property indicator_plots1int Func(){ return(0); }
intOnCalculate( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[] )
{
// return(0); // если расскоментировать и здесь поставить точку останова, то отладчик отработает, как надоreturn(Func()); // здесь поставить точку останова (F9)
}
После нажатия на F5 будет попадание на точку останова. И после второго нажатия на F5 - аналогично. Хотя этого не должно бы было быть - как подтверждение, можно раскоментировать строчку, что в коде и попробовать с ней.
Не, я на RTS сейчас запускаю, когда котиры стоят. Выяснил, что вызывается один раз, а отладчик врет, показываю, будто два. Код для воспроизведения (запускать на символе, где не идут тики)
После нажатия на F5 будет попадание на точку останова. И после второго нажатия на F5 - аналогично. Хотя этого не должно бы было быть - как подтверждение, можно раскоментировать строчку, что в коде и попробовать с ней.
Без разницы идут котировки или стоят. В индикаторе нужно контролировать условие prev_calculate==0 - это подкачка истории и второй момент - щадящий режим пересчёта изменённых баров, то есть по сути rates_total -prev_calculate+1.
Karputov Vladimir: Без разницы идут котировки или стоят. В индикаторе нужно контролировать условие prev_calculate==0 - это подкачка истории и второй момент - щадящий режим пересчёта изменённых баров, то есть по сути rates_total -prev_calculate+1.
Вы бы читали сначала, что написано, а только потом отвечали. Код для воспроизведения бага отладчика! Все данные для воспроизведения даны.
Вот скрипт для воспроизведения того же бага
int Func(){ return(0); }
int Func2()
{
// return(0); // если расскоментировать и здесь поставить точку останова, то отладчик отработает, как надо return(Func()); // здесь поставить точку останова (F9)
}
voidOnStart()
{
Func2();
}
fxsaber: Вы бы читали сначала, что написано, а только потом отвечали. Код для воспроизведения бага отладчика! Все данные для воспроизведения даны.
Я Вам ответил - Вам нет дела до того, сколько раз вызывается OnCalculate. Ваша задача - обеспечивать или полный пересчёт индикатора или частичный, анализируя два значения: rates_total, prev_calculate и условие когда prev_calculate==0.
Нет жёстких условий, что OnCalculate() должна быть вызвана один или два раза. OnCalculate() никому ничего не должна. А вот программист обязан контролировать два значения: rates_total, prev_calculate и условие когда prev_calculate==0.
Karputov Vladimir: Я Вам ответил - Вам нет дела до того, сколько раз вызывается OnCalculate. Ваша задача - обеспечивать или полный пересчёт индикатора или частичный, анализируя два значения: rates_total, prev_calculate и условие когда prev_calculate==0.
Мне есть дело, сколько раз вызывается отладчик и сколько раз вызывается OnCalculate. Я по натуре ЗАНУДА! И мне до всего есть дело.
Вы совершенно не разобравшись в сути проблемы, пытаетесь меня учить чему-то. Спасибо, конечно. Но давайте слушать и слышать оппонента.
А что это за звездочки под названием темы? И количество отзывов еще.
Как в режиме дебага узнать, откуда была вызвана функция, в которой сейчас нахожусь?
Грубо говоря, хотелось бы иметь доступ ко вложенному дереву вызовов функций/методов. Это возможно?
Как в режиме дебага узнать, откуда была вызвана функция, в которой сейчас нахожусь?
В режиме "Шаг с заходом" поочерёдно просматривая вкладку "Отладка":
В режиме "Шаг с заходом" поочерёдно просматривая вкладку "Отладка":
Спасибо. Никак не могу понять, почему в начале индикатор вызывает дважды OnCalculate. Хотелось бы выяснить, на какое событие такая реакция. По отладке, к сожалению, событий не видно.
Бывает дважды, бывает один, а может и три раза дёрнуть: Вы в Oncalculate() поставьте такой код -
будет понятно, когда происходит подкачка истории (при подкачке истории prev_calculated==0).
Бывает дважды, бывает один, а может и три раза дёрнуть: Вы в Oncalculate() поставьте такой код -
будет понятно, когда происходит подкачка истории (при подкачке истории prev_calculated==0).
Не, я на RTS сейчас запускаю, когда котиры стоят. Выяснил, что вызывается один раз, а отладчик врет, показывая, будто два. Код для воспроизведения (запускать на символе, где не идут тики)
После нажатия на F5 будет попадание на точку останова. И после второго нажатия на F5 - аналогично. Хотя этого не должно бы было быть - как подтверждение, можно раскоментировать строчку, что в коде и попробовать с ней.
Не, я на RTS сейчас запускаю, когда котиры стоят. Выяснил, что вызывается один раз, а отладчик врет, показываю, будто два. Код для воспроизведения (запускать на символе, где не идут тики)
После нажатия на F5 будет попадание на точку останова. И после второго нажатия на F5 - аналогично. Хотя этого не должно бы было быть - как подтверждение, можно раскоментировать строчку, что в коде и попробовать с ней.
Без разницы идут котировки или стоят. В индикаторе нужно контролировать условие 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. Я по натуре ЗАНУДА! И мне до всего есть дело.
Вы совершенно не разобравшись в сути проблемы, пытаетесь меня учить чему-то. Спасибо, конечно. Но давайте слушать и слышать оппонента.