Discussão do artigo "Fundamentos Básicos da Programação: Variáveis Globais do Terminal" - página 3
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
Isso pode ser resolvido por meio de prefixos de variáveis globais.
Bons artigos para iniciantes.
The GlobalVariableTemp() function creates a temporary global variable (that exists till the terminal is stopped). In a few years that I develop EAs on MQL5, I have never faced the need for such a variable. Moreover, the very concept of a temporary global variable contradicts the basic principle of their application — long-term data storage not affected by the terminal relaunches.
Esse não é o único uso das variáveis globais do Terminal. Elas também podem ser usadas para trocar informações entre diferentes EAs ou indicadores. Portanto, nesse caso, poderia ser um recurso para ter os dados somente na memória e não mantidos na reinicialização do terminal.
A parte do mutex é muito interessante, mas tenho uma pergunta e uma observação.
Pode acontecer que algum EA seja removido de um gráfico durante a execução da função OnTick(), mas a função Mutex_Release() não é executada.
Como um EA pode ser removido e a função Mutex_Release() não é executada? Se você remover um EA de um gráfico de maneira normal (fechar o gráfico, remover o EA ou fechar o terminal), ele nunca interromperá o fluxo de execução. Estou perdendo alguma coisa?
Portanto, minha observação é que a única maneira pela qual a função Mutex_Release() não pode ser executada é com uma parada "dura", falha de energia ou de hardware, etc., o que torna suas variáveis globais do mutex uma candidata perfeita para ser criada como temporária usando GlobalVariableTemp().
As variáveis globais funcionam durante o teste de estratégia?
Por exemplo, quando um indicador armazena valores em uma GV e um EA os lê, o testador de estratégia buscará os valores durante a simulação?
As variáveis globais funcionam durante o teste de estratégia?
Por exemplo, quando um indicador armazena valores em uma GV e um EA os lê, o testador de estratégia buscará os valores durante a simulação?
Sim
"É possível que as variáveis globais desapareçam quando o computador é desligado abruptamente."As variáveis globais desapareceram após o fechamento do terminal MT5 bild 2361. GlobalVariablesFlush() é executado em dois terminais MT5 diferentes. Que absurdo. Os terminais são iniciados com a tecla /portable, talvez esse seja o motivo?
Tentei criar manualmente, abri e fechei o terminal e parece que ele foi salvo. Os resultados da otimização automática foram gravados nos globais, e esse é um processo muito longo. Portanto, não é um armazenamento tão confiável. Terei de adicionar um procedimento para gravar variáveis globais no arquivo por meio de estruturas.
As variáveis globais desapareceram após o fechamento do terminal MT5 bild 2361. GlobalVariablesFlush() é executado em dois terminais MT5 diferentes. Não faz sentido. Os terminais são iniciados com a tecla /portable, talvez seja esse o motivo?
Tentei criar manualmente, abri e fechei o terminal e parece que ele foi salvo. Os resultados da otimização automática foram gravados nos globais, e esse é um processo muito longo. Portanto, não é um armazenamento tão confiável. Terei de adicionar um procedimento para gravar variáveis globais no arquivo por meio de estruturas.
No terminal ou no testador? Há uma diferença no MT5.
No terminal ou no testador? Há uma diferença no MT5.
No terminal.
Em geral, resolvi o problema da seguinte maneira. Na classe que lida com a otimização automática para o Expert Advisor, além de criar variáveis globais, também escrevi dados idênticos em arquivos para cada par de moedas (os arquivos preliminares são excluídos sempre que a classe é iniciada, pois a classe é chamada apenas para recálculo, portanto, em qualquer caso, os dados devem ser atualizados). Os arquivos são arquivos de texto comuns, e os nomes dos arquivos são codificados em uma instância específica do Expert Advisor. Durante a inicialização, o EA chama a função de leitura de dados de otimização dos arquivos e de criação ou atualização de variáveis globais.
Também é conveniente porque os arquivos podem ser copiados e usados durante a execução no testador de estratégia (os arquivos ficam naturalmente na pasta comum dos terminais), já que o testador cria suas próprias instâncias de variáveis globais, e a otimização automática em si é um processo longo e o carregamento de dados prontos dos arquivos reduz significativamente o tempo de teste.
Olá, Dmitry,
Sei que seu artigo já tem alguns anos, mas achei que poderia compartilhar algo e, com sorte, também fazer uma pergunta!
Então, você mencionou que não encontrou uso para a Temp Global Var. Estou desenvolvendo algo que requer exatamente isso. Eu estava tentando descobrir uma maneira de implementar o compartilhamento da porta de conclusão de IO por meio de variáveis globais, especialmente em caso de falha ou reinicialização normal. Estou projetando um sistema de tratamento de pedidos usando portas de conclusão de IO do Windows. Como podemos criar threads Win32 a partir da MQL5, não posso criar um pool de threads ao criar o servidor IOCP, portanto, minha solução alternativa usando os serviços é;
No caso de o terminal reiniciar, de forma anormal ou não, quero que o identificador do IOCP tenha desaparecido na inicialização do terminal, para que eu possa criar um novo identificador do IOCP para uma nova inicialização. Isso contribui para uma implementação muito mais limpa.
Também gostaria de saber se as variáveis globais são rápidas e se são confiáveis.
Obrigado pelo excelente artigo, foi uma ótima leitura,
Shep
Novo artigo Noções básicas de programação MQL5: Variáveis globais do terminal foi publicado:
Autor: Dmitry Fedoseev