Discussão do artigo "Fundamentos Básicos da Programação: Variáveis Globais do Terminal" - página 3

 
Dmitry Fedoseev:
Isso pode ser resolvido por meio de prefixos de variáveis globais.
Isso pode ser resolvido por meio de prefixos, mas não é uma boa solução :-( há uma questão de gerar prefixos exclusivos e na revisão de variáveis pelo F3 é uma bagunça... realmente as variáveis não têm espaço de nome. Se tivermos que gerar um prefixo a partir de DC, account, account, chart... e lembrar que o comprimento do nome é limitado, não poderemos fazer muito com os prefixos :-)
 

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?

 
Admiral Thrawn:

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.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Konstantin Efremov:

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.

 
Dmitry Fedoseev:

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.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Eu li tudo, é um grande benefício, mas a última parte é um pouco complicada, as variáveis temporárias ainda são úteis. Eu tenho um painel de negociação no EA, o painel inclui um botão para abrir a função trailing stop, a variável temporária pode lembrar o valor da variável e, em seguida, alternar os ciclos.
 

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 é;

  1. Criar um servidor IOCP e, em vez de criar threads (o que não é possível), salvar o identificador do IOCP em uma Var global
  2. Em seguida, abro pelo menos dois outros serviços, que atuam como threads de trabalho, e eles leem o identificador do IOCP da var global e se registram no IOCP

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


 
MetaQuotes:

Novo artigo Noções básicas de programação MQL5: Variáveis globais do terminal foi publicado:

Autor: Dmitry Fedoseev

Isso é o que a integração do Python precisa para enviar dados de e para o Python para os EAs do MLQ. Assim, um EA desenvolvido em Python poderia ser testado no Strategy Tester, a menos que haja alguma impossibilidade que eu desconheça.