Могли бы вы рассказать о случае, когда участник форума оказался полезным в вашей работе, и можете ли вы описать это подробно? - страница 4
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
чтобы пересчитывать даже на каждом тике (когда prev_calculated==rates_total), а не на каждом баре.
того-же эффекта можно добиться если не отнимать еденицу от цикла а возвращать rates_total-1.
Что кстати более соответствует логике функции OnCalculate - вернуть кол-во баров не требующих пересчёта
это не тот случай, тут к limit присваивается на первом запуске или при подкачке истории
или имеется ввиду весь с 0 пересчитывать, а зачем?
последний бар понятно на каждом тике можно дергать
какая-то не понятная схема, получается rates_total будет меньше prev_calculatedэто не тот случай, тут к limit присваивается на первом запуске или при подкачке истории
или имеется ввиду весь с 0 пересчитывать, а зачем?
последний бар понятно на каждом тике можно дергать
какая-то не понятная схема, получается rates_total будет меньше prev_calculatedблин,да..
там цикл просто дурацкий из mt4, "цирк уехал, клоуны остались" - в нём предполагается что массивы как таймсерии, пересчёт от макс.индекса (limit) к 0, а чтобы limit не вышел за границы массивов отнимается 1. Из кол-ва (limit=rates_total-prev_calculated) делается соотв. индекс массива (limit=limit-1)
Топотня на ровном месте, потому у вас и затруднения в её прочтении.
это не тот случай, тут к limit присваивается на первом запуске или при подкачке истории
или имеется ввиду весь с 0 пересчитывать, а зачем?
последний бар понятно на каждом тике можно дергать
какая-то не понятная схема, получается rates_total будет меньше prev_calculatedэта схема требует доработки -- я бы эту схему в реальности не использовал -- проблему схемы выделил желтым -- ну, а вопрос про отнимание 1 подчеркнул.
рассмотрим четыре примера.
пусть есть 10 баров -- 9 8 7 6 5 4 3 2 1 0
ситуация А -- начало расчёта
rates_total =10
prev_calculated =0
limit =10 -- и надо отнять 1, чтобы не был выход за пределы массива в цикле for(int i=limit; i>=0; i--) -- идёт перерасчёт всей истории от бара 9 до 0
ситуация В -- текущий бар
rates_total =10
prev_calculated =10
limit =0 -- идёт перерасчёт нового бара
ситуация С -- новый бар -- бары: 10 9 8 7 6 5 4 3 2 [1 0]
rates_total =11
prev_calculated =10 -- остановились на баре 1
limit =1 -- идёт перерасчёт только что закрытого бара 1 и нового бара 0
ситуация D -- отсутствовала связь бары: 10 9 8 7 [6 5 4 3 2 1 0]
rates_total =11
prev_calculated =5 -- остановились на баре 6
limit =11-5 =6 -- отнимается 1 по if(limit>1) -- идёт перерасчёт с бара 5, "закрытый" бар 6 не перерасчитывается, а должен был, чтобы отработать его закрытие на манер ситуации С
в принципе, можно заменить
но лучше использовать подход нумерации баров как в mql5 и отказаться от подхода mql4 по нумерации баров, когда текущий бар =0
да, и основной баг этой схемы:
в случае ситуации D -- произойдёт обнуление ранее рассчитанных данныхэто не тот случай, тут к limit присваивается на первом запуске или при подкачке истории
или имеется ввиду весь с 0 пересчитывать, а зачем?
последний бар понятно на каждом тике можно дергать
какая-то не понятная схема, получается rates_total будет меньше prev_calculatedРасчёт идёт от самого старого бара истории:
limit = rates_total - 1;
Если имеем всего 20 баров, то limit изначально равен 19, так как считаем-то до нулевого текущего бара.
Почему лучше в индикаторах считать от начала истории до текущего времени? Да для того, чтобы правильно эмулировать расчёт индикатора, который был бы, если бы мы наблюдали за этим расчётом на протяжении всей истории.
К примеру, возьмём индикатор, который не просто рисует линию, которую можно нарисовать хоть от конца, хоть от начала истории совершенно одинаково, а индикатор, который, например, строит фибы, которые в свою очередь далее строятся от значений предыдущих фибо-уровней. Когда идём от начала истории, то мы будем правильно строить каждую фибу, так как данные уже слева все посчитаны, и мы получаем очередные данные так, как будто это текущие данные. У нас есть построенные фибо-уровни слева, а справа - неизвестная ещё история - всё как в реале. И строим очередные фибы не зная того, что есть справа - в "будущем". А теперь попробуйте построить тоже самое, но начиная от текущих данных к самым старым. Вот тут и начинается не просто "топотня на ровном месте", а реальная "беготня по тёмным комнатам с натягиванием сов на глобусы".
в принципе, можно заменить
но лучше использовать подход нумерации баров как в mql5 и отказаться от подхода mql4 по нумерации баров, когда текущий бар =0
Значит - не делал сложных индикаторов. Можешь считать от текущих данных как в советнике. Но индикатор должен рассчитываться от начала истории. Если нужно сделать просто, и сделать правильно рассчитывающий индикатор.
limit =11-5 =6 -- отнимается 1 по if(limit>1) -- идёт перерасчёт с бара 5, "закрытый" бар 6 не перерасчитывается, а должен был, чтобы отработать его закрытие на манер ситуации С
Если limit равен 6, то это значит, что limit больше 1. А при limit, большем единицы, идёт полный перерасчёт всего индикатора от rates_total-1 до нуля включительно.
Соответственно, не нужны тут никакие танцы с бубнами. Всё уже есть:
Значит - не делал сложных индикаторов
мы говорим о багах своей схемы -- исключим бестолковые личностные оценки кто чем занимался.
Можешь считать от текущих данных как в советнике
на багах своей схемы
Схема не моя. Её предложил Витя Николаев. И в ней нет описанного тобою "бага". Остальное - дело вкуса каждого. Мне по вкусу именно такая простота и надёжность как у АК.