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

 
eevviill:
ок. В деинит тоже не работает обнуление.

Вы так и не ответили на вопрос, что Вы имеете в виду под обнулением буферов?

Обнулением содержимого индикаторных буферов клиентский терминал не занимается. Обнуление должен предусмотреть программист

Уничтожение буферов производится автоматически при выгрузке индикатора

 
stringo:

Вы так и не ответили на вопрос, что Вы имеете в виду под обнулением буферов?

Обнулением содержимого индикаторных буферов клиентский терминал не занимается. Обнуление должен предусмотреть программист

Уничтожение буферов производится автоматически при выгрузке индикатора

 ArrayInitialize(body_up,EMPTY_VALUE);
ArrayInitialize(body_down,EMPTY_VALUE);
ArrayInitialize(shadow_up,EMPTY_VALUE);
ArrayInitialize(shadow_down,EMPTY_VALUE);
  ArrayInitialize(yell_body_up,EMPTY_VALUE);
ArrayInitialize(yell_body_down,EMPTY_VALUE);
ArrayInitialize(yell_shadow_up,EMPTY_VALUE);
ArrayInitialize(yell_shadow_down,EMPTY_VALUE);
Это не работает ни в инит ни в деинит.
 
eevviill:
Это не работает ни в инит ни в деинит.
А зачем это нужно в деините? Да и зачем динамический массив индикатора инициализировать?
 
eevviill:
Это не работает ни в инит ни в деинит.

Ещё раз.

Инициализацию массива необходимо производить только перед тотальным пересчётом. И то только в том случае, если вы заполняете массив выборочно, а не подряд элемент за элементом

 
stringo:

Ещё раз.

Инициализацию массива необходимо производить только перед тотальным пересчётом. И то только в том случае, если вы заполняете массив выборочно, а не подряд элемент за элементом

eevviill:
Это не работает ни в инит ни в деинит.

А зачем это нужно в деините? Да и зачем динамический массив индикатора инициализировать?

 

Вы читали проблему? 

 
evillive:
А зачем это нужно в деините? Да и зачем динамический массив индикатора инициализировать?

Потому что где то надо. В ините сказали нельзя.

Потому что обсчитывается только 0 бар. После закрытия терминала и открытия через пару свечей получается что 0 бар обсчитывается+ещё один с сдвигом на время которое был терминал закрыт. 

 
stringo:

Ещё раз.

Инициализацию массива необходимо производить только перед тотальным пересчётом. И то только в том случае, если вы заполняете массив выборочно, а не подряд элемент за элементом

Класно. Я заполняю только 0 елемент.

Если не понятна проблема, то могу ещё раз описать. 

 
eevviill:

Потому что где то надо. В ините сказали нельзя.

Потому что обсчитывается только 0 бар. После закрытия терминала и открытия через пару свечей получается что 0 бар обсчитывается+ещё один с сдвигом на время которое был терминал закрыт. 

На самом деле был корректно расссчитан нулевой бар, но потом произошла загрузка истории.  И рассчитан уже новый нулевой бар.  
 
Vinin:
На самом деле был корректно расссчитан нулевой бар, но потом произошла загрузка истории.  И рассчитан уже новый нулевой бар.  

Вот. Для этого я делаю обнуление буферов. В ините уже сказали что нельзя этого делать. 

Я хочу в деинит. Но там тоже не работает. Почему? 

 
Ещё раз попробую объяснить(на пальцах):
  1. Запустился терминал спустя X времени после последнего запуска
  2. Инициировалась закачка истории, которая отсутствует( терминал не работал X минут)
  3. Вызывается OnCalculate индикатора на имеющуюся историю prevtime= последнее известное время истории, размер индикаторного буфера N баров
  4. Пока подкачивается история с сервера приходит тик
  5. Вызывается OnCalculate индикатора, где Time[0] время тика, индикатор его запоминает как prevtime, размер индикаторного буфера N+1 баров (между барами N и N+1 имеется дыра в истории)
  6. После докачки истории опять вызывается OnCalculate индикатора, но в этот раз, дыры в истории нет, но вот prevtime имеет туже дату, что и Time[0] - нового бара нет (соответственно нет зануления буферов в индикаторе), при этом размер буфера индикатора N+X/Timeframe баров и IndBuffer[0] вовсе не тот, который был в п.5