Experimente este exemplo primitivo. Você entenderá a "singularidade" ao trocar o TF.
Neste exemplo, um objeto com coordenadas de tempo e preço atuais é criado no OnInit. Na OnCalculate, este objeto se move junto com o preço.
No OnDeinit, ele é simplesmente (logicamente) apagado.
Quando trocamos o TF, o objeto aparece e depois desaparece. Por que isso acontece? Porque às vezes o OnDeinit da antiga TF apaga algo que já foi criado no OnInit da nova TF. Não é um bug! O que deve pensar o programador que criou este exemplo e não leu este ramo?
Qual é a diferença? Você pode colocar EventSetTimer em Unite ao invés de criar objetos, e EventKillTimer em DeUnite ao invés de eliminar objetos. E isto não reduzirá a incerteza, porque o temporizador definido será morto por Deunite da velha TF, e às vezes não. E será ainda pior, porque pelo menos você pode ver o objeto, mas não pode ver o timer - quer ele funcione ou não.
Talvez eles já o tenham inventado, não tenham lido tudo. Se o indicador criar painel, você pode usar a variável global de terminal, aumentar seu valor em 1 init e usá-lo como um aditivo para nomes de objetos gráficos.
Minha tarefa era diferente - para salvar parâmetros do painel, para isso criei variáveis globais do terminal em deinit. A solução é simples - para criar variáveis globais do terminal no inite e atualizar cada uma delas à medida que os parâmetros mudam no painel gráfico. Somente exclua variáveis no deinit se a desinicialização for causada pela remoção do indicador.
Se o indicador criar um painel, você pode usar uma variável global do terminal, aumentar seu valor em 1 e usá-lo como um acréscimo aos nomes dos objetos gráficos.
Estas são muletas. Você só precisa fazer a ordem correta no terminal e pronto. Primeiro deinite a instância anterior, e só depois inicie uma nova.
Nikolai Semko:
O que deve pensar um programador que criou este exemplo e ainda não leu este tópico?
Concordo plenamente. Os não leitores não saberão desta característica e matarão seu tempo tentando descobri-la. E isso seria centenas de pessoas... ...especialmente aqueles que são iniciantes.
Tudo o que você precisa é consertar um bug uma vez e pronto.
Qual é a diferença? Você pode colocar EventSetTimer em Unite ao invés de criar objetos, e EventKillTimer em Deunite ao invés de eliminar objetos. Isto não reduzirá a incerteza, porque o temporizador definido será morto por Deunite da velha TF, e às vezes não. E seria ainda pior, porque pelo menos você pode ver o objeto, mas não pode ver se o timer funciona ou não.
Isso parece bobagem. Os cronômetros das cópias indicadoras não têm nada a ver um com o outro.
elibrarius: É tudo muletas. Você só precisa fazer a ordem correta no terminal e isso é tudo. Primeiro deinite a instância anterior, e só depois inicialize a nova instância.
Concordo plenamente. Os não leitores não saberão desta característica e matarão seu tempo tentando descobri-la. E isso seria centenas de pessoas... especialmente para os iniciantes.
Tudo o que você tem que fazer é consertar o bug uma vez e pronto.
É disso que eu estou falando! Estou pessoalmente em um rolo, pois sinto que tenho uma vantagem sobre a maioria, pois sei como lidar com tudo isso, não apenas em palavras, mas também em ações. Já fiz correções e acrescentei muletas aos meus programas.
Só não entendo porque os desenvolvedores se recusam obstinadamente a considerar esta "característica" um bug. Por exemplo:
Slawa:
Os indicadores devem ser utilizados para os fins a que se destinam.
Em outras palavras, a seqüência de preenchimento dos indicadores OnInit e OnDeinit quando o período do símbolo dográfico tiver mudado não deve ser motivo de preocupação para ninguém.
Mas em meu exemplo com o gif animado acima, há um bug definido para um programador que não leu este tópico! O que não é feito de acordo com seu propósito?
Quando você muda of.
Se os indicadores tiverem lixo em seus amortecedores do antigo período de tempo, isso pode afetar também os temporizadores.
Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos
Nova versão do MetaTrader 4 build 1065
Sergey Klimov, 2017.04.14 16:34
Ao alternar entre contas, a variável _Dígitos no indicador não muda.
É mais bonito.
É mais bonito.
Isto é para aqueles que falam de consistência adequada no MT4.
Observe e entenda que nem tudo é tão bonito no MT4.
A fila é unívoca.
Bem, onde é que não há ambigüidade?
Experimente este exemplo primitivo. Você entenderá a "singularidade" ao trocar o TF.
Neste exemplo, um objeto com coordenadas de tempo e preço atuais é criado no OnInit. Na OnCalculate, este objeto se move junto com o preço.
No OnDeinit, ele é simplesmente (logicamente) apagado.
Quando trocamos o TF, o objeto aparece e depois desaparece.
Por que isso acontece?
Porque às vezes o OnDeinit da antiga TF apaga algo que já foi criado no OnInit da nova TF. Não é um bug! O que deve pensar o programador que criou este exemplo e não leu este ramo?
Bem, onde ela está sozinha.
O cronômetro foi mencionado ali.
Qual é a diferença? Você pode colocar EventSetTimer em Unite ao invés de criar objetos, e EventKillTimer em DeUnite ao invés de eliminar objetos. E isto não reduzirá a incerteza, porque o temporizador definido será morto por Deunite da velha TF, e às vezes não. E será ainda pior, porque pelo menos você pode ver o objeto, mas não pode ver o timer - quer ele funcione ou não.
Talvez eles já o tenham inventado, não tenham lido tudo. Se o indicador criar painel, você pode usar a variável global de terminal, aumentar seu valor em 1 init e usá-lo como um aditivo para nomes de objetos gráficos.
Minha tarefa era diferente - para salvar parâmetros do painel, para isso criei variáveis globais do terminal em deinit. A solução é simples - para criar variáveis globais do terminal no inite e atualizar cada uma delas à medida que os parâmetros mudam no painel gráfico. Somente exclua variáveis no deinit se a desinicialização for causada pela remoção do indicador.
Se o indicador criar um painel, você pode usar uma variável global do terminal, aumentar seu valor em 1 e usá-lo como um acréscimo aos nomes dos objetos gráficos.
O que deve pensar um programador que criou este exemplo e ainda não leu este tópico?
Concordo plenamente. Os não leitores não saberão desta característica e matarão seu tempo tentando descobri-la. E isso seria centenas de pessoas... ...especialmente aqueles que são iniciantes.
Tudo o que você precisa é consertar um bug uma vez e pronto.
Qual é a diferença? Você pode colocar EventSetTimer em Unite ao invés de criar objetos, e EventKillTimer em Deunite ao invés de eliminar objetos. Isto não reduzirá a incerteza, porque o temporizador definido será morto por Deunite da velha TF, e às vezes não. E seria ainda pior, porque pelo menos você pode ver o objeto, mas não pode ver se o timer funciona ou não.
É tudo muletas. Você só precisa fazer a ordem correta no terminal e isso é tudo. Primeiro deinite a instância anterior, e só depois inicialize a nova instância.
Concordo plenamente. Os não leitores não saberão desta característica e matarão seu tempo tentando descobri-la. E isso seria centenas de pessoas... especialmente para os iniciantes.
Tudo o que você tem que fazer é consertar o bug uma vez e pronto.
É disso que eu estou falando!
Estou pessoalmente em um rolo, pois sinto que tenho uma vantagem sobre a maioria, pois sei como lidar com tudo isso, não apenas em palavras, mas também em ações. Já fiz correções e acrescentei muletas aos meus programas.
Só não entendo porque os desenvolvedores se recusam obstinadamente a considerar esta "característica" um bug.
Por exemplo:
Os indicadores devem ser utilizados para os fins a que se destinam.
Em outras palavras, a seqüência de preenchimento dos indicadores OnInit e OnDeinit quando o período do símbolo dográfico tiver mudado não deve ser motivo de preocupação para ninguém.
Mas em meu exemplo com o gif animado acima, há um bug definido para um programador que não leu este tópico! O que não é feito de acordo com seu propósito?