Que tipo de lógica é estragada?
Quando você muda o cronograma, uma nova cópia do indicador é criada e não sabe nada sobre a cópia anterior. Durante um certo período de tempo (muito curto), ambas as cópias do indicador existem em paralelo. Depois, a cópia anterior é descarregada.
Leia a documentação https://www.mql5.com/ru/docs/runtime/running
- www.mql5.com
Que tipo de lógica é estragada?
Quando você muda o cronograma, uma nova cópia do indicador é criada e não sabe nada sobre a cópia anterior. Durante um certo período de tempo (muito curto), ambas as cópias do indicador existem em paralelo. Em seguida, a cópia anterior é excluída.
Leia a documentação https://www.mql5.com/ru/docs/runtime/running
Obrigado por seu feedback
Sobre "estrago lógico".
Escrevi um indicador que substitui o gráfico principal (castiçais) por seu próprio tipo de desenho DRAW_CANDLES
O objetivo é remover a tabela de preços principal e exibir somente a minha tabela.
- Quando a Inite define a cor da carta principal como transparente.
Desenho minha própria carta (de acordo com meus parâmetros).
Como eu quero restaurar a cor do gráfico principal após a remoção do meu indicador
- No DeInit eu restauro a cor da carta principal
Ao mudar o TF quero dizer primeiro DeInit (restaurar a cor), e depois Init (voltar a ser transparente)
A execução dos comandos não é seqüencial; periodicamente, ao alterar o TF
periodicamente a tabela principal (com a cor restaurada) é sobreposta ao meu indicador.
Aqui está um "parafuso lógico", por exemplo.
PS: (((Ler documentaçãohttps://www.mql5.com/ru/docs/runtime/running )))
Se você mudar o símbolo ou o cronograma do gráfico, ao qual o Expert Advisor está anexado, o Expert Advisor não é descarregado e carregado. Neste caso , os manipuladoresOnDeinit() no antigo símbolo/linha de tempo eOnInit() no novo símbolo/linha de tempo (se disponível) são chamadosconsistentemente, valores de variáveis globais evariáveis estáticas não são redefinidos. Todos os eventos recebidos para uma EA antes da conclusão da inicialização (OnInit()) são ignorados.
- www.mql5.com
A respeito.
"é criada uma nova cópia do indicadorque nada sabe sobre a cópia anterior"
Por que então o DeInit apaga objetos que foram criados na nova cópia Init. Se for apenas uma cópia.
Quando o cronograma é alterado, o OnInit é chamado a cada vez e causa alguns inconvenientes.
O que significa chamar o OnInit todas as vezes
Para que serve o OnInit - para rubricar todas as variáveis e parâmetros uma vez
Por exemplo
Quero escrever um indicador que crie um marcador de texto em um gráfico com o cronograma atual.
Ao apagar o indicador, ele remove esta marca de texto do gráfico.
E ao mudar a TF atualizaria seu conteúdo para um novo (removendo o antigo e criando um novo).
O que recebemos
Algumas vezes mudamos o TF e a marca de texto desapareceu. (Assim, inicialmente o OnInit e depois o DeInit agiram, o que removeu este rótulo).
Então, poucas vezes mais mudou a TF e ela apareceu.
Isto não está certo.
se forem objetos gráficos, eles pertencem à sala de bate-papo e podem ser acessados por qualquer software em execução nessa sala
se forem objetos gráficos, eles pertencem ao chat e são acessíveis por qualquer programa em execução neste chat.
Então, como este problema pode ser resolvido ??? (Alguém tem ????)
Ou aceitar como está. Que, para acelerar os cálculos, é possível executar comandos de forma não seqüencial.
O que é contrário à documentação
Ao alterar um símbolo ou um cronograma de um gráfico, ao qual o Expert Advisor está anexado, o Expert Advisor não será descarregado e carregado. Neste caso, a
sequencialmente
Os manipuladoresOnDeinit() no símbolo/cronograma antigo eOnInit() no novo símbolo/cronograma (se disponível) são chamados
Então, este problema pode ser resolvido ??? (Funcionou para alguém ????)
Eu me junto ao autor desta linha. A pergunta realmente não é ociosa. E muito específico.
Descobri este problema há muito tempo. Entrei em contato com o Servicedesk em junho de 2016 com um exemplo absolutamente semelhante ao do autor deste tópico. Eles o ignoraram - ainda é um tópico em aberto:
É claro que eu fiz uma transferência de parâmetro em indicador ao mudar o TF, tendo gasto muito tempo com isso. Mas eu não quero fazer uma tarefa simples com diamantes.
Mas os desenvolvedores, por favor, implementem a possibilidade de criar variáveis globais especiais em indicadores que não serão reinicializados durante as mudanças de tempo. No Expert Advisors a reinicialização não acontece no momento da mudança da TF, no indicador ela acontece. Se houvesse a possibilidade de não reinicializar algumas variáveis e matrizes nos indicadores, a sincronização do OnInit e OnDeinit não ocorreria, e novas oportunidades interessantes para os programadores se abririam. Não creio que esta possibilidade de desinicialização variável afete a segurança dos programas.
Para que serve?
Há muitas situações.
Por exemplo:
-Quando começo o indicador, faço cálculos de variáveis, matrizes de índice, matrizes de dados, independentes da TF, e elas podem ser bastante longas e volumosas. A questão é por que tenho que fazer isso cada vez que mudo o TF.
- Não posso alterar os parâmetros do indicador através da janela de parâmetros, mas por conveniência e clareza diretamente do gráfico com um mouse (você pode ver e usar este indicador, o que o atinge de uma maneira mais complicada). E as configurações não são perdidas toda vez que você muda o TF.
Esta questão é resolvida como dois dedos... Você sabe o que...
No OnDeinit é necessário condicionar o motivo da desinicialização antes de apagar o objeto... Se não for uma mudança de período, então o objeto é apagado. E É SÓ ISSO...
Esta questão é resolvida como dois dedos... Você sabe o que...
No OnDeinit é necessário condicionar o motivo da desinicialização antes de apagar o objeto... Se não for uma mudança de período, então o objeto é apagado. E É SÓ ISSO...
Tenho experimentado e utilizado este código de motivo (REASON_CHARTCHANGE) em toda a sua extensão. Mas qual é a utilidade se todas as variáveis forem novamente definidas para seu estado original e o OnDeinit puder ser executado após o OnInit do novo TF
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá a todos!
Estou enfrentando o seguinte problema
Eu tenho um indicador ou consultor especializado.
Há duas funções nele - Init() e DeInit()
Qual é a seqüência de execução dessas funções quando eu mudo o TF (timeframe)?
Entendo que quando eu iniciar ou anexar o indicador, o Init() deve funcionar.
Ao excluí-lo do gráfico, ele deve executarDeInit()
Ao mudar o TF, a princípio oDeInit() do TF atual deve funcionar e depois oInit() do novo TF deve funcionar
Entretanto, nem sempre é executado nesta seqüência, o que estraga a lógica de escrever o programa.
Anexei uma amostra do indicador e dos registros.
Por favor, avise quem resolveu este problema ou simplesmente esqueça-o!