OnDeinit em indicadores - página 5

 
mql5:
Vou tentar explicar novamente (com os dedos):
  1. O terminal começou a funcionar X tempo após o último arranque
  2. Iniciado o download do histórico, que está faltando (o terminal ficou ocioso por X minutos)
  3. Chamado OnCalculate para o indicador sobre o histórico disponível prevtime = último histórico conhecido, indicador tamanho de buffer N barras
  4. Enquanto o histórico está sendo baixado do servidor, um tique vem
  5. Chamado de OnCalculate do indicador, onde Tempo[0] é um tempo de tick, o indicador o memoriza como prétempo, o tamanho do buffer do indicador é N+1 barras (entre N e N+1 barras há uma lacuna na história)
  6. Após o download do histórico, OnCalculate é chamado novamente, mas desta vez não há nenhum buraco no histórico, mas o tempo anterior tem a mesma data que Time[0] - nenhuma nova barra (respectivamente, nenhuma compensação de buffers no indicador), o tamanho do buffer do indicador N+X/barras de tempo e IndBuffer[0] não são os mesmos do passo 5



O que tem a ver com isso?

Estou perguntando por que não funciona.

/////////////////////////////////////
void OnDeinit(const int reason)
{
 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:

O que isso tem a ver com o tempo anterior?

Estou perguntando por que não funciona.

E como você sabe que não está funcionando? Como você verifica?

E por que inicializar os amortecedores indicadores antes de descarregá-los? Já está descarregado, não está?

Osbuffers indicadores devem ser inicializados quando todos os valores indicadores forem totalmente recalculados:

int OnCalculate(..)
{
   ...
   if (<необходимо пересчитать все значения индикатора, например, если limit == Bars - 1>)
   {
      ArrayInitialize(...);
   }
   ...
}
 
eevviill:

Aqui. Eu faço uma zeragem tampão para isso. A Inite já disse que você não pode fazer isso.

Eu quero desinibir. Mas também não funciona lá. Por quê?

O que init() e deinit() tem a ver com isso? A operação é necessária em um lugar bem diferente. Vou repeti-lo novamente. Após o cálculo, a história foi carregada.

Eu fiz uma versão funcional.

Arquivos anexados:
 
Scriptong:

Como você sabe se não está funcionando? Como você verifica?


https://forum.mql4.com/ru/65066/page2#1015138
 
Vinin:

O que init(), deinit() tem a ver com isso? A operação é necessária em outro lugar. Vou repetir. Após o cálculo, o histórico foi carregado.

Fez uma versão funcional.

Eu ainda acertei na primeira vez por sua recomendação.

Estou me perguntando por que o deinit não funciona para zerar as arrays?

 
eevviill:
https://forum.mql4.com/ru/65066/page2#1015138

Você deu um link para o código que funciona na OnCalculate. Perguntei como você sabe que a inicialização no DeInit não funciona. Deixe-me especificar, por precaução, que depois de OnDeinit() nada do código indicador funciona (nem OnInit(), nem OnCalculate()). Portanto, você pode verificar a zeragem das matrizes somente no próprio OnDeinit().

 
Scriptong:

Você deu um link para o código que funciona na OnCalculate. Perguntei como você sabe que a inicialização no DeInit não funciona. Deixe-me especificar, por precaução, que depois de OnDeinit() nada do código indicador funciona (nem OnInit(), nem OnCalculate()). Portanto, você pode verificar o fato de zerar as arrays somente no próprio OnDeinit().

Eu forneci um link para

OperaçãoAbertura do indicador M1 - terminal fechado - abriu-o em alguns minutos. O resultado está em capturas de tela.

É assim que eu testo.

 
eevviill:

Eu ainda acertei na primeira vez por sua recomendação.

Estou me perguntando por que deinit não funciona com zeragem de arrays?

Ou o deinit não funciona quando o terminal está fechado?
 
eevviill:
Ou o deinit não funciona quando o terminal está fechado?
Faz, mas não adianta limpar os amortecedores indicadores - eles não são salvos.
 
mql5:
Funciona, mas não adianta limpar os amortecedores indicadores - eles não são salvos.

Por quê?

Por que o valor do buffer 0 cheio é salvo, mas não zerado?