Ну так а в чём состоит принципиальная разница то?
При первом проходе просчитываются все бары, а затем только последний как ни переставляй направление пересчёта.
Только вам следовало бы написать for(int i = limit-1; i >= 0; i--), чтобы сохранить правильность границ пересчёта (нумерация баров в MQL4 начинается с 0).
Или у вас имеются какие-то более глубокие мысли на этот счёт?
При первом проходе просчитываются все бары, а затем только последний как ни переставляй направление пересчёта.
Только вам следовало бы написать for(int i = limit-1; i >= 0; i--), чтобы сохранить правильность границ пересчёта (нумерация баров в MQL4 начинается с 0).
Или у вас имеются какие-то более глубокие мысли на этот счёт?
Если индикатор использует свои предыдущие значения для расчета
текущего значения, перебор от 0 до limit-а будет некорректен.
Это конечно же вполне логично, но только в приведённом случае такие расчёты отсутствуют. Или же я ошибаюсь?
solandr:
Нет, тут их нет.Это конечно же вполне логично, но только в приведённом случае такие расчёты отсутствуют. Или же я ошибаюсь?
Только я все равно не вижу смысла писать код, который может быть ошибочным.
Часто люди пишут индикаторы, копируя куски кода из других (тем более стандартных!) индикаторов.
solandr:
Ну так а в чём состоит принципиальная разница то?
При первом проходе просчитываются все бары, а затем только последний как ни переставляй направление пересчёта.
Только вам следовало бы написать for(int i = limit-1; i >= 0; i--), чтобы сохранить правильность границ пересчёта (нумерация баров в MQL4 начинается с 0).
Или у вас имеются какие-то более глубокие мысли на этот счёт?
Ну так а в чём состоит принципиальная разница то?
При первом проходе просчитываются все бары, а затем только последний как ни переставляй направление пересчёта.
Только вам следовало бы написать for(int i = limit-1; i >= 0; i--), чтобы сохранить правильность границ пересчёта (нумерация баров в MQL4 начинается с 0).
Или у вас имеются какие-то более глубокие мысли на этот счёт?
А зачем ? Последний то пересчитываетсья и предпоследний бар в этом индикаторе пересчитывать не нужно
int start() { int limit; int counted_bars = IndicatorCounted(); //---- check for possible errors if(counted_bars < 0) return(-1); //---- last counted bar will be recounted if(counted_bars > 0) counted_bars--; limit = Bars - counted_bars; //---- for(int i = limit; i >= 0; i--) { MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MACD_Mode,MACD_PRICE,i)- iMA(NULL,0,SlowEMA,0,MACD_Mode,MACD_PRICE,i); } for(i = limit; i >= 0; i--) { SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,Signal_Mode,i); } for(i = limit; i >= 0; i--) { OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i]; } return(0); }Почему я задал этот вопрос, так как не видел логики такого расчёта
Ведь расчитовать логично со сторого бара к новому, хотя результаты те же самые в этом индикаторе
Вы видимо просто не разобрались с принципами расчётов индикаторов.
Обратите внимание вот на эти строчки кода:
int counted_bars = IndicatorCounted();
limit = Bars - counted_bars;
При первом тике после запуска этого индикатора IndicatorCounted()=0 и
соответственно будут посчитаны все имеющиеся бары. После этого
IndicatorCounted() станет равным количеству баров, для которых был произведён
расчёт.
int IndicatorCounted( | ) |
Когда прийдёт новый бар, то limit станет равным 1 и произойдёт один цикл пересчёта нового пришедшего бара. Остальные посчитанные бары пересчитываться при этом не будут! Поэтому для данного случая оба варианта записи цикла одинаковы.
solandr:
Ну так а в чём состоит принципиальная разница то?
При первом проходе просчитываются все бары, а затем только последний как ни переставляй направление пересчёта.
Только вам следовало бы написать for(int i = limit-1; i >= 0; i--), чтобы сохранить правильность границ пересчёта (нумерация баров в MQL4 начинается с 0).
Или у вас имеются какие-то более глубокие мысли на этот счёт?
Вы не обратили внимание на Ну так а в чём состоит принципиальная разница то?
При первом проходе просчитываются все бары, а затем только последний как ни переставляй направление пересчёта.
Только вам следовало бы написать for(int i = limit-1; i >= 0; i--), чтобы сохранить правильность границ пересчёта (нумерация баров в MQL4 начинается с 0).
Или у вас имеются какие-то более глубокие мысли на этот счёт?
counted_bars--;
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я думаю правильней производить расчёт от limit и до нулевого бара или я ошибаюсь ?