OnDeinit в индикаторах - страница 3

 

Сделайте Print в начале OnDeinit и после закрытия клиентского терминала посмотрите лог экспертов и убедитесь, что OnDeinit был вызван!

Вот Ваша ошибка

for(int i=ObjectsTotal()-1;i>=0;i--)

Вы чётко знаете те объекты, которые создавали сами.

Сохраняйте их имена и удаляйте их без обращения к ObjectsTotal и ObjectName

PS в новом билде была добавлена функция удаления группы объектов по префиксу. Это Вам поможет, если Вы будете именовать свои объекты с использованием одного и того же уникального префикса в их имени

 
stringo:

Сделайте Print в начале OnDeinit и после закрытия клиентского терминала посмотрите лог экспертов и убедитесь, что OnDeinit был вызван!

Вот Ваша ошибка

Вы чётко знаете те объекты, которые создавали сами.

Сохраняйте их имена и удаляйте их без обращения к ObjectsTotal и ObjectName

PS в новом билде была добавлена функция удаления группы объектов по префиксу. Это Вам поможет, если Вы будете именовать свои объекты с использованием одного и того же уникального префикса в их имени

Мне уже довелось проверить как работает удаление группы объектов по префиксу. Здорово, но даже откомпилированный код в предыдущих билдах не работает. Соответственно использовать это можно, пока, только в личных целях. Не заставлять-же обновляться из-за этого. Многие ведь и не знают как обновиться пока не выложат обновление на сервере ДЦ.
 
stringo:

Вообще-то деинит во всех программах вызывается при закрытии терминала.

Есть даже специальный код причины деинициализации. REASON_CLOSE

И обнуляет буферы индикаторов или нет?
 
eevviill:
И обнуляет буферы индикаторов или нет?
Что такое "обнуляет буферы индикаторов"?
 
eevviill:
И обнуляет буферы индикаторов или нет?
Все обнуляет. Ведь терминал закрывается )))
 
stringo:

Ситуацию с Вашим индикатором разобрали.

Дело вот в чём - индикатор рассчитывается не только на приходе тиков, но и на первой отрисовке и на приходе недостающей истории.

1. Пришёл свежий тик - индикатор рассчитался

2. Пришла недостающая история, которая заткнула дыру между последними данными с прошлого запуска терминала и последним тиком. Индикатор рассчитался. Но при этом состояния нового бара нет!

Чтобы решить эту проблему Вам необходимо проверять количество баров. Примерно так

Эмм. Блок инициализации буферов EMPTY_VALUE поставил в Инит. Проблема осталась.
 

Засунул блок инициализации буферов пустым значением и в инит и в деинит. Результат тот же. Тоесть его нету.

Жду коментариев разработчиков. 

 

 
Scriptong:
Все обнуляет. Ведь терминал закрывается )))
Да да.
 
eevviill:
Эмм. Блок инициализации буферов EMPTY_VALUE поставил в Инит.

Зачем? В ините буфера ещё могут быть не распределены.

А как быть в том случае, когда буфер сильно прирос (пришла новая порция исторических данных)?

В таких случаях инициализацию буферов делают перед расчётом индикатора, когда понятно, что будет пересчитан весь индикатор

 
stringo:

Зачем? В ините буфера ещё могут быть не распределены.

А как быть в том случае, когда буфер сильно прирос (пришла новая порция исторических данных)?

В таких случаях инициализацию буферов делают перед расчётом индикатора, когда понятно, что будет пересчитан весь индикатор

ок. В деинит тоже не работает обнуление.
Причина обращения: