Fractals из Example?
запустил, нормально все 2605
из готовых на каждом тике считает 5-7 баров, который в Example код на новом баре обновляет, можно еще добавить ему
//--- проверка на новый бар if(prev_calculated==rates_total) return(rates_total);
(готовый и код без изменений)

Fractals из Example?
запустил, нормально все 2605
из готовых на каждом тике считает 5-7 баров, который в Example код на новом баре обновляет, можно еще добавить ему
(готовый и код без изменений)
тема не про то как оформить цикл пересчёта внутри индикатора.
имелся в виду про CustomSymbol который пополняется самостоятельно через CustomRatesUpdate. То есть iFractals запущеный только на очень нестандартом тайм-фрейме моргает.
---
Когда терминалу отдаётся обновление свечи, он запускает в полный пересчёт индикаторы Custom-чарта :-( По iFractals это просто хорошо заметно.
довольно неожиданное поведение и как с ним обновлять/добавлять свечи не вызывая пересчёта (довольно тяжёлых) индикаторов не ясно :-(
тема не про то как оформить цикл пересчёта внутри индикатора.
имелся в виду про CustomSymbol который пополняется самостоятельно через CustomRatesUpdate. То есть iFractals запущеный только на очень нестандартом тайм-фрейме моргает.
---
Когда терминалу отдаётся обновление свечи, он запускает в полный пересчёт индикаторы Custom-чарта :-( По iFractals это просто хорошо заметно.
довольно неожиданное поведение и как с ним обновлять/добавлять свечи не вызывая пересчёта (довольно тяжёлых) индикаторов не ясно :-(
тихо, сам с собою, я веду беседу :-) Может кому пригодится:
Единственное найденное решение - вместо обновлений последней свечи через CustomRatesUpdate, пытаться поделить её на псевдо-тики обновляющие High,Low,Close и передавать их через CustomTickAdd. Тогда всё проходит гладко
но это не самый короткий/быстрый код, и он рушит последовательность тиков и вообще не всегда применим.
А только моргает или реально пересчитывается? Что принты в индикаторе скажут (прев_калкулейтд)?
Просто моргание было еще с древних времен даже на обычном графике и без изменения истории. Уж не помню, чем закончилось, но, может, это та же история.
А только моргает или реально пересчитывается? Что принты в индикаторе скажут (прев_калкулейтд)?
Просто моргание было еще с древних времен даже на обычном графике и без изменения истории. Уж не помню, чем закончилось, но, может, это та же история.
к сожалению, пересчитывается
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[]) { ArraySetAsSeries(time,true); if (prev_calculated==0) { PrintFormat("Full recalc time[0]=%s ArraySize(time)=%d rates_total=%d",TimeToString(time[0],TIME_MINUTES|TIME_SECONDS),ArraySize(time),rates_total); } return(rates_total); }
и результат:
каждый раз когда вызывается CustomSymbolUpdate, все индикаторы на чартах получают prev_calculated=0. Даже если обновляется только единственная последняя свечка.
В четверке с оффлайн-графиками та же самая беда. Но там хоть имеем дело с недокументированными возможностями. А тут уже все документировано.
Для обхода нужно делать свои nPrevCalculated и nRatesTotal. Например, в MTF-индикаторах именно так и приходится поступать, там нельзя ориентироваться на стандартные nPrevCalculated, т. к. они для текущего периода графика.

- www.metatrader5.com
Как-нибудь можно обновлять/добавлять последнюю минутку не вызывая полный перерасчёт ?
к сожалению, пересчитывается
и результат:
каждый раз когда вызывается CustomSymbolUpdate, все индикаторы на чартах получают prev_calculated=0. Даже если обновляется только единственная последняя свечка.
Может так?
input int Length = 5; /*Длина индикатора*/ 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[]) { //--------------------------------------------- //Проверка количества баров, на достаточность для расчёта индикатора if(rates_total < Length) return(0); //--------------------------------------------- //Объявление локальных переменных int limit, bar; //---------------------------------------------- //Расчёт стартового номера limit для цикла пересчёта баров if(prev_calculated > rates_total || prev_calculated <= 0) //проверка на первый старт расчёта индикатора limit = rates_total - (rates_total - Length); //стартовый индекс для расчёта всех баров else limit = rates_total - prev_calculated; //стартовый индекс для расчёта новых баров //---------------------------------------------- //Основной цикл расчёта индикатора for(bar = limit; bar >= 0 && !_StopFlag; bar--) { PrintFormat("Full recalc time[0]=%s rates_total=%d", TimeToString(TimeLocal(), TIME_MINUTES|TIME_SECONDS), bar); } return(rates_total); }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
заметил весьма неприятную вещь - видимо индикаторы пересчитываются полностью даже если обновляется только последняя минутка.
по крайней мере iFractals из поставки весьма ощутимо и назойливо моргает ;-(
Как-нибудь можно обновлять/добавлять последнюю минутку не вызывая полный перерасчёт ?