OnDeinit em indicadores - página 2

 
eevviill:

Não, não tem. Eu desligo o terminal normalmente.

Se o Deinit é colocado no Init, também não funciona.

Somente a função de eliminação de objetos personalizados ajudou.

Bem, se não apagar, quem sabe o que você fez lá :)

 
keekkenen:

Bem, se não o remove, quem sabe o que você fez com ele :)

Faz sentido. Mas se eu simplesmente apagar o indicador do gráfico, as zonas são apagadas. Quando eu desligo o terminal, eles não estão. Se eu usar a função no init que elimina zonas (é a mesma função no deinit).

Entendi que o deinit funciona para todos. E quando deve ser acionado ao fechar ou abrir o terminal?

 
int deinit()
  {

deinit2();

return(0);
}

//////////////////////

void deinit2()

{

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

  {

  if(StringFind(ObjectName(i),Highest_vol_zones_name)!=-1)

  ObjectDelete(ObjectName(i));

  }

 

}
 
eevviill:

Faz sentido. Mas se eu simplesmente remover o indicador do gráfico, as zonas são removidas. Não quando o terminal é desligado. Somente se eu colocar minha própria função para apagar zonas no init (mesma função no deinit).

Entendi que o deinit funciona para todos. Mas quando deve funcionar quando o terminal é fechado ou aberto?

Sim, funciona quando o terminal está fechado...

talvez você tenha algum tipo de lógica acontecendo por muito tempo ?

no sentido de que, no momento do indicador de desligamento, sem que o terminal calcule algo e o terminal espere que tudo esteja errado e/ou interrompa, que o OnDeinit não funcione ?

Acho que o caminho para o helpdesk...

 
keekkenen:

sim, quando se fecha o terminal ele funciona.

talvez você tenha algum tipo de lógica de jogo longo?

no sentido de que no momento do indicador de desligamento está calculando algo terrivelmente e o terminal espera que tudo esteja errado e/ou interrompa, que o OnDeinit não funcione ?

Acho que o caminho para o helpdesk...

Se funciona para você, então tudo bem. Eu vou dar uma olhada na minha.
 

Nada mudou e mais foi acrescentado.

Indicador tampão. Operação Abertura de um terminal fechado com indicador M1 em alguns minutos. O resultado está em capturas de tela.

E isto apesar do fato de eu também ter escrito no código

//////////////////////////////////////////////////////////////////
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],
                const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[])
  {
    //new bar
if (Time[0] != prevtime) 
{
 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);


prevtime = Time[0];
}

 

Desenvolvedores, vocês vão resolver o problema?

Aqui está um indicador para você. Tente o que eu fiz no posto acima.

Abriu-se a tabela - o indicador M1 - fechou-se o terminal - abriu-se após alguns minutos.

Arquivos anexados:
 
eevviill:

Desenvolvedores, vocês vão resolver o problema?

Aqui está um indicador para você. Tente o que eu fiz no posto acima.

Abriu-se a tabela - o indicador M1 - fechou-se o terminal - abriu-se após alguns minutos.

A situação com seu indicador foi resolvida.

O problema é que o indicador é calculado não apenas na chegada dos carrapatos, mas também no primeiro desenho e na chegada da história ausente.

1. Chega um novo tick - o indicador é calculado.

2. Chega o histórico que falta, que tapa o buraco entre os últimos dados da última partida do terminal e o último tick. O indicador é calculado. Mas, ao mesmo tempo, não há nenhuma nova condição de bar!

Para resolver este problema você precisa verificar o número de barras. Aproximadamente assim

   if(Time[0]!=prevtime || Bars!=prevbars)
     {
      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);

      prevtime=Time[0];
      prevbars=Bars;
     }
 
stringo:

A situação com seu indicador foi resolvida.

É o seguinte - o indicador é calculado não apenas na chegada dos carrapatos, mas também no primeiro desenho e na chegada da história em falta.

1. Chega um novo tick - o indicador é calculado.

2. Chega o histórico que falta, que tapa o buraco entre os últimos dados da última partida do terminal e o último tick. O indicador é calculado. Mas, ao mesmo tempo, não há nenhuma nova condição de bar!

Para resolver este problema você precisa verificar o número de barras. Assim

Obrigado.

Mas não está apenas no meu indicador. Pensei que você, de seu lado, resolveria este problema.

Por exemplo, ao fechar o terminal Deinit em todos os programas a serem executados.

 
eevviill:

Obrigado.

Mas não está apenas no meu indicador. Pensei que você resolveria este problema de seu lado.

Por exemplo, ao fechar o terminal, deinit em todos os programas.

Na verdade, o deinit em todos os programas é chamado quando o terminal é fechado.

Há até mesmo um código especial para o motivo de deinit. RAZÃO_CLOSE