- Вертикальная линия - Линии - Объекты - Чарты - MetaTrader 5 для Android
- Вертикальная линия - Линии - Объекты - Чарт - MetaTrader 5 для iPhone
- Вертикальная линия - Линии - Использование аналитических объектов - Графики котировок, технический и фундаментальный анализ
Собственно проблема в том что индикатор рисующий линию при смене ТФ на котором ещё не подкачана история расчитывает данные, потом на графике добавлются бары, и он ещё раз расчитывает данные, соответсвенно прошлые тоже оотсаются+пропуски.
Значит ошибка в логике работы индикатора. При подкачке истории идеальный вариант работы индикатора: рассчитать свое состояние на момент последнего не измененного в истории бара и заново произвести расчет данных на обновленном участке истории.
В реальности такой вариант не всегда возможен, т. к. вернуть окружение индикатора на какой-либо указанный бар - это проведение расчета с начала истории. Поэтому при сколько-нибудь сложных алгоритмах работы индикатора полный пересчет истории производится при подкачке даже одного бара (не путать с открытием нового бара).
Собственно проблема в том что индикатор рисующий линию при смене ТФ на котором ещё не подкачана история расчитывает данные, потом на графике добавлются бары, и он ещё раз расчитывает данные, соответсвенно прошлые тоже оотсаются+пропуски.
В индикаторе в OnCalculate() нужно делать проверку на:
if(prev_calculated==0) // значит история изменилась или это первый проход
В индикаторе в OnCalculate() нужно делать проверку на:
Спасибо.
Меня просто смутило что алерты мне выдавали то что история кусками подгружалась.
Да. Так и есть.
Значит ошибка в логике работы индикатора. При подкачке истории идеальный вариант работы индикатора: рассчитать свое состояние на момент последнего не измененного в истории бара и заново произвести расчет данных на обновленном участке истории.
В реальности такой вариант не всегда возможен, т. к. вернуть окружение индикатора на какой-либо указанный бар - это проведение расчета с начала истории. Поэтому при сколько-нибудь сложных алгоритмах работы индикатора полный пересчет истории производится при подкачке даже одного бара (не путать с открытием нового бара).
Тоесть единственное работающие решение только?
for(int i=rates_total-prev_calculated;i>=0;i--)
Тоесть единственное работающие решение только?
for(int i=rates_total-prev_calculated;i>=0;i--)
А если надо пересчёт не только текущего бара то так(например 4)?
for(int i=rates_total-prev_calculated+4;i>=0;i--) { if(i>Bars) i=Bars;
Ага, рабочая.
Когда бары кусками подгружаются, то кусками и пересчёт.
Получается правильный кусок только тот что подгрузился последним дальше-влево хаха.
Пора учиться индикаторы писать
Научи.
А я говорю что надо вносить разработчиками коректировку в первые расчёты индикатора.
Пора учиться индикаторы писать
Хочешь трюк? Угадай что Алерт возвратил?
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(prev_calculated!=0) Alert(prev_calculated," M:",Period()); return(rates_total); }
Хочешь трюк? Угадай что Алерт возвратил?
Алертами в индикаторах не пользуюсь. Предусматриваю полный перерасчет если произошла подгрузка истории. Проконтролировать это легко.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования