Событие - перестроение индикатора?

 

Время от времени индикаторы частично или полностью перестраиваются. Это происходит в случаях изменения данных, прокрутки графика и пр. Это определено в документации МТ -MQL.

Все хорошо, пока индикатор использует непосредственно данные графика. А если индикатор использует левые данные, да еще несогласованные по ТФ с индикатором?

При первоначальном построении мы загружаем левые данные в буфер на необходимую для построения глубину, обрабатываем, строим индикатор, и дальше только подгружаем по мере необходимости.

А что делать при перестроении? Нужно какое-либо событие указывающее на полное перестроение чтобы инициализировать и запустить весь алгоритм по новой.

И как нам такое событие сформировать, да еще и не ошибиться, что это именно оно? Есть варианты с rates_total,  prev_calculated, но все как-то сложно и непрозрачно получается.

Если кто сталкивался с такой задачей, как Вы ее решали? М.б. все проще чем кажется.

 
Yuriy Asaulenko:

Если кто сталкивался с такой задачей, как Вы ее решали? М.б. все проще чем кажется.

Первое, что приходит в голову - prev_calculated = 0 - первый запуск, полный пересчет.
 
Alexey Kozitsyn:
Первое, что приходит в голову - prev_calculated = 0 - первый запуск, полный пересчет.
, Да, наверное. Интересно, индикатор всегда с prev_calculated == 0 перестраивается полностью, или может, скажем, последние N отсчетов?
 
Yuriy Asaulenko:
, Да, наверное. Интересно, индикатор всегда с prev_calculated == 0 перестраивается полностью, или может, скажем, последние N отсчетов?
Как напишите, так и будет.
 
Делал работу индикатора с данными из файла. Всё в таймере. Размер файла изменился - полная перерисовка.
 
Alexey Kozitsyn:
Как напишите, так и будет.

Эт ясно. Сами то мы могем.) Но вопрос о механизме штатной перерисовки МТ - когда, как, с какого места перерисовывает. В доках механизм оч в общем виде, без подробностей.

МТ всегда сбрасывает prev_calculated  в 0? А с буферами что происходит? - сбрасываются? Насколько я помню, значение rates_total может серьезно гулять.

 
Yuriy Asaulenko:
Эт ясно. Но вопрос о механизме штатной перерисовки МТ - когда, как, с какого места перерисовывает. В доках механизм оч в общем виде, без подробностей.

Что значит с какого места перерисовывает? Вы когда индикатор создаете, Вы сами указываете сколько и чего он должен рисовать. Хотите - будет рисовать историю (всю или частично), не хотите - будет рисовать только то, что в реальном времени. Если изменились хэш-суммы (при подгрузке истории, например) - prev_calculated = 0, а дальше пользователь решает, как обрабатывать эту ситуацию.

Так что, как я и сказал - как напишите, так и будет.

 
Yuriy Asaulenko:

МТ всегда сбрасывает prev_calculated  в 0?

Насколько я помню, да.
 
Alexey Kozitsyn:
Насколько я помню, да.
Понял. А с буферами что происходит? - сбрасываются? Насколько я помню, значение rates_total может серьезно гулять. Т.е., вся индексация поплывет.
 
Yuriy Asaulenko:
Понял. А с буферами что происходит? - сбрасываются? Насколько я помню, значение rates_total может серьезно гулять. Т.е., вся индексация поплывет.

Предлагаю Вам написать индикатор и посмотреть, что произойдет. А потом рассказать здесь. Если честно, я не помню. Но на это и не закладываюсь.

При правильном написании ничего плыть не должно. Да, надеюсь, мы оба подразумеваем МТ5.

 
Alexey Kozitsyn:

Предлагаю Вам написать индикатор и посмотреть, что произойдет. А потом рассказать здесь. Если честно, я не помню. Но на это и не закладываюсь.

При правильном написании ничего плыть не должно. Да, надеюсь, мы оба подразумеваем МТ5.

Все хорошо, пока индикатор не использует внешнюю несогласованную с графиком информацию - все автоматом и не задумываясь.)

Наверно, да. Обвесить индикатор Print-ами, и пусть в журнал значения-сообщения пишет.

Причина обращения: