![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
komposter
Tem razão. Cometi um erro.
Obrigado pela sua resposta.
Manual de Referência MQL5 - Biblioteca Standard - Classes para organização de dados - CArrayObj (no website e na ajuda):
2. O mecanismo de gestão da memória está desactivado.
Neste caso, o CArrayObj não é responsável pela libertação de memória
Documentação. Secção de variáveis estáticas.
"...As variáveis estáticas existem desde o momento da execução do programa e são inicializadas uma vez antes de chamar a função especializada OnInit()..."
Código de verificação do Expert Advisor:
"Colocar" a EA no gráfico:
Sem retirar a EA do gráfico, alteramos o período do gráfico:
É suposto funcionar desta forma?
Na verdade interpretei a informação da documentação como uma inicialização forçada de variáveis estáticas em qualquer chamada da função OnInit(), independentemente de ter sido causada por recompilação ou por uma mudança do símbolo ou outra coisa...
Acontece que eu estava enganado. Por favor, esclarece-me: quais são as excepções a esta regra?
Quando os parâmetros de entrada são alterados, é a mesma "confusão".
Quando a conta é alterada, no entanto, é tratada correctamente - as variáveis estáticas são reinicializadas.
Como mudar o símbolo do gráfico sem eliminar o perito(REASON_CHARTCHANGE)?
Documentação. Secção de variáveis estáticas.
"...As variáveis estáticas existem desde o momento da execução do programa e são inicializadas uma vez antes de chamar a função especializada OnInit()..."
Código de verificação do Expert Advisor:
"Colocar" a EA no gráfico:
Sem remover a EA do gráfico, alteramos o período do gráfico:
É suposto funcionar desta forma?
Sim, deve funcionar.
O programa (o seu código) já foi carregado uma vez e só executa uma reinicialização a quente (Deinit/Init sem descarga de código). Neste caso, cabe ao promotor assegurar que o ambiente é rubricado correctamente.
Sim, deveria funcionar dessa forma.
O programa (o seu código) já está carregado uma vez e apenas faz uma reinicialização a quente (Deinit/Init sem descarga de código). Neste caso, o promotor deve preocupar-se com uma inicialização adequada do ambiente.
Em primeiro lugar, o seu comentário contradiz claramente a definição na documentação: inicializar uma vez antes de chamar o OnInit(). Depois deve especificar claramente a definição na documentação: "...inicializar uma vez antes de chamar o OnInit(). primeiro call OnInit()".
Em segundo lugar, o seu comentário contradiz claramente o caso de mudança de conta, em que a MT, obviamente, põe termo à força ao Expert Advisor e restaura-o novamente.
Pode a questão fundamental de saber se as variáveis estáticas devem ser reinicializadas à força em cada (e não apenas na primeira) chamada para o OnInit() ser trazida à consideração/votação?
Em geral, é engraçado como as coisas funcionam.
À primeira vista, pensei que a função OnDenit é uma espécie de destruidor, e OnInit - o construtor do Consultor Especialista.
De facto, acontece que o OnInit é um evento múltiplo (dentro do tempo de vida do perito). Então não é claro, porque é que precisamos de gerar explicitamente o evento OnDenit se sabemos que a EA não termina o seu funcionamento (por exemplo, em caso de mudança de período do gráfico)?
E outra questão.
A razão para a desinicialização de REASON_CHARTCHANGE é o símbolo ou período de um gráfico ter sido alterado.
Por favor, explique como é que um símbolo gráfico pode ser alterado sem apagar a EA nele?
E outra questão.
Motivo da desinicialização REASON_CHARTCHANGE - O símbolo ou período do gráfico foi alterado.
Por favor, explique como é que um símbolo gráfico pode ser alterado sem apagar a EA nele?
Na verdade, é engraçado.
Pela minha intuição, pensei que a função OnDenit era uma espécie de destruidor e que a função OnInit era o construtor do Expert Advisor.
De facto, parece que o OnInit é um evento múltiplo (dentro da vida de um Consultor Especialista). Então não é claro, porque é que precisamos de gerar explicitamente o evento OnDenit se sabemos que a EA não termina o seu funcionamento (por exemplo, em caso de mudança de período do gráfico)?
E outra questão.
A razão para a desinicialização de REASON_CHARTCHANGE - O símbolo ou período de um gráfico foi alterado.
Explique por favor como um símbolo gráfico pode ser alterado sem apagar a EA nele?
Da mesma forma, tudo foi chamado em MT4. E não se sabe se o perito termina ou não o seu trabalho (para este efeito, os parâmetros OnDeinit caem, embora a razão de um possível disparo OnInit também seja fácil de conhecer).
2. É muito simples, nas configurações do terminal permite ao Expert Advisor negociar quando o símbolo e o período mudam.
Depois seleccione outro símbolo na visão geral do mercado e "largue-o" no gráfico com o seu rato.
A EA em qualquer caso, com inicialização normal após a mudança de símbolo/período "não será apagada" (será "Reinício a quente", como Renat disse abaixo). Se o analisarmos a um nível simples, o Conselheiro Especialista será autorizado a negociar sob certas configurações de terminal.
ChartSetSymbolPeriodo()
Em primeiro lugar, o seu comentário contradiz claramente a definição na documentação: eles são inicializados uma vez antes de chamar o OnInit(). Depois deve especificar claramente a definição na documentação: "...inicializar uma vez antes de chamar o OnInit(). primeiro OnInit() chamada".
Em segundo lugar, o seu comentário contradiz claramente o caso de mudança de conta, em que a MT, obviamente, termina à força a EA e restaura novamente.
Podemos introduzir/votar uma questão fundamental sobre a necessidade de reinicialização forçada das variáveis estáticas a cada (e não apenas à primeira) chamada do OnInit()?