Индикатор использует историю нескольких инструментов. Как предварительно загрузить историю? - страница 2

 
TheXpert:
Самый православный способ открыть нужные графики
Открываемый график становится активным. Потом его надо найти и закрыть. И так n раз.
Документация по MQL5: Операции с графиками / ChartOpen
Документация по MQL5: Операции с графиками / ChartOpen
  • www.mql5.com
Операции с графиками / ChartOpen - Документация по MQL5
 
komposter:

Да, опрос тут был лишним, нужно было просто спросить - как лучше )

Даже без таймера можно инициировать загрузку в ОнКалкулейт и делать расчеты только при наличии всей истории. 

Можно. Но без тиков можно и не дождаться окончания.
 
Silent:
Можно. Но без тиков можно и не дождаться окончания.

А на некоторых инструментах их может не быть в течении часов или дней... 

И в итоге на таких получается: 

1. ОнКалкулейт происходит только при старте, 

2. т.к. история не подготовилась, пропускаем расчет, прев_калкулейтед=0

3. при использовании ОнТаймер повлиять на прев_калкулейтед мы не можем (документированными способами) 

4. при  прев_калкулейтед=0 график не отрисовывается... 

5. при изначальной установке прев_калкулейтед>0 и не готовых данных получаем не инициализированные значения в рядах и/или мерцание

Поправьте, если я ошибаюсь

 
pronych:

А на некоторых инструментах их может не быть в течении часов или дней... 

И в итоге на таких получается: 

1. ОнКалкулейт происходит только при старте, 

2. т.к. история не подготовилась, пропускаем расчет, прев_калкулейтед=0

3. при использовании ОнТаймер повлиять на прев_калкулейтед мы не можем (документированными способами) 

4. при  прев_калкулейтед=0 график не отрисовывается... 

5. при изначальной установке прев_калкулейтед>0 и не готовых данных получаем не инициализированные значения в рядах и/или мерцание

Поправьте, если я ошибаюсь

1. На старте сначала OnInit(), затем OnCalculate()

2. Да, но на следующем вызове OnCalculate() prev_calculated = rates_total

4. Наоборот, если prev_calculated = 0, значит что-то изменилось в истории и нужно обязательно пересчитывать индикатор

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

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
barabashkakvn:

1. На старте сначала OnInit(), затем OnCalculate()

2. Да, но на следующем вызове OnCalculate() prev_calculated = rates_total

4. Наоборот, если prev_calculated = 0, значит что-то изменилось в истории и нужно обязательно пересчитывать индикатор

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

2. prev_calculated = rates_total  если весь индикатор рассчитан. а если нет? если данные не готовы? а следующий вызов OnCalculate()  может произойти через 5,7,100 часов, полно таких инструментов.

4. при prev_ calculated = 0 график не отрисовывается! получается что на низколиквидных инструментах  OnCalculate() может произойти только один раз за сессию. при старте.

   если в этот момент данные не готовы, то надо принимать решение  что записывать в  prev_ calculated.  есть предложения?

Это всё в случае использования мульти-инструментного индикатора для эксперта. В остальных можно ручками пощелкать.

 
Не понимаю причины буйства, все легко и прозрачно реализуется.
 
TheXpert:
Не понимаю причины буйства, все легко и прозрачно реализуется.
Ну помоги. Пример нужен.
 
Вообще, введение подписки в конкретном советнике/индикаторе  на события OnTick(), OnCalculate() по любому инструменту полностью решило бы все эти проблемы. и позволит оптимизировано обрабатывать эти события, без лишних проверок по таймеру.
 
pronych:
Ну помоги. Пример нужен.
prev_calculated запоминается, массивы генерятся в обработке таймера. Все. prev_calculated стопудов будет правильным, если нет, перед событием будет системный вызов OnCalculate. Ну и с нулем порешать.
Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
pronych:
Вообще, введение подписки в конкретном советнике/индикаторе  на события OnTick(), OnCalculate() по любому инструменту полностью решило бы все эти проблемы. и позволит оптимизировано обрабатывать эти события, без лишних проверок по таймеру.
Это нарушает потокобезопасность индикаторов и вообще всего. Разве что асинхронными событиями что вы и сами можете сделать.
Причина обращения: