Подарите пожалуйста новогодний подарок с примером решения))
Уже две недели бьюсь как рыба об лёд и не могу решить задачу
Есть цикл перебора баров в истории, после заполнения отключаемся (return) и ждём новый бар
Как мне на каждом тике получать всю историю заново как будто это первый старт??
Все мои эксперименты приводя к зависанию и ошибке "out of memory" - недостаточно памяти
Всю историю пересчитывать на каждом(новом) тике? или сохранить какие то данные как историю? и обращаться к ним в каждом тике?
Пересчитывать всю историю совсем расточительно, нужно как-то математику реализовать, чтоб полного пересчета избежать.
Всю историю пересчитывать на каждом(новом) тике? или сохранить какие то данные как историю? и обращаться к ним в каждом тике?
Мне наверно подойдёт любой из вариантов, какой будет быстрее и безопасней от перегрузок и зависаний
Мне подойдёт любой из вариантов, какой будет быстрее и безопасней от перегрузок и зависаний
Вы так формулируете вопрос, что за Вас нужно всё додумывать, что практически нереально.
Речь об эксперте, скрипте или индикаторе? Что считается в цикле по историческим барам и что нужно сохранить?
Речь об эксперте, скрипте или индикаторе? Что считается в цикле по историческим барам и что нужно сохранить?
Это индикатор
Суть такая что по стрелкам сигналов я получаю результаты на всей доступной истории,
на новом тике меняются значения параметров индикатора по которым так же меняются сигналы стрелок и требуется получить новые результаты
Пробовал решить проблему грубо подставив после смены значений параметров limit=bars; в тот момент когда if(limit<1) return(0);
В итоге всё работает как требуется, новые результаты получаю, но терминал виснет и далее завершает с ошибкой "out of memory"
По умолчанию если не подкидывать limit=bars; то далее новые результаты =0
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- int limit=rates_total-prev_calculated; if(limit==0) return(rates_total); //--- for(int i=rates_total-1; i>0; i--) { // Код индикатора } //--- return value of prev_calculated for next call return(rates_total); }
Не подходит к сожалению ваш вариант
Вот если вместо return(0) добавить limit=bars; то работает как надо но виснет на каждом тике и через N-время зависает весь терминал полностью
int i=0, bars=Bars-1, limit=bars-IndicatorCounted(); if(limit<bars){ if(limit<1) return(0); //Не повторять на том же баре if(limit<1) limit=bars; i=limit; } else i=bars; while(i>=0) { //Работает индикатор i--;}
Не подходит к сожалению ваш вариант
Вот если вместо return(0) добавить limit=bars; то работает как надо но виснет на каждом тике и через N-время зависает весь терминал полностью
Вы понимаете суть своей конструкции, что такое bars и limit?
Сколько баров просчитываете и в какой момент, а также зачем это делать? И вообще, что именно делать?
Вы понимаете суть своей конструкции, что такое bars и limit?
Сколько баров просчитываете и в какой момент, а также зачем это делать? И вообще, что именно делать?
Если честно, то вообще не понимаю этот пересчёт баров и ни когда не понимал
Можете просветить, что к чему, если не трудно ?))
Если честно, то вообще не понимаю этот пересчёт баров и ни когда не понимал
Можете просветить, что к чему, если не трудно ?))
нужно просто почистить буфер стандартной функцией перед расчетом
ArrayInitialize(буфер,EMPTY_VALUE);
отрисовка индикатора будет выполнена заново, легко и не принужденно, причем на каждом тике
нужно просто почистить буфер перед расчетом
ArrayInitialize(буфер,EMPTY_VALUE);
отрисовка индикатора будет выполнена заново, причем на каждом тике
Не нужно ничего чистить.
Если честно, то вообще не понимаю этот пересчёт баров и ни когда не понимал
Можете просветить, что к чему, если не трудно ?))
Скиньте код расчётной части индикатора.
===
Хотя, мне почему-то кажется, что вы хотите от индикатора чего-то лишнего, раз нужен полный пересчет на каждом баре
===
P.S. Точно не тике, на новом баре?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уже две недели бьюсь как рыба об лёд и не могу решить задачу
Есть цикл перебора баров в истории, после заполнения отключаемся (return) и ждём новый бар
Как мне на каждом тике получать всю историю заново как будто это первый старт??
Все мои эксперименты приводят к зависанию и ошибке "out of memory" (недостаточно памяти)