funcionalidade. Como a criação ou alteração de uma variável global terá impacto sobre o ambiente de negociação?
Você pode explicar o que o valor numérico das variáveis globais representa?
Há algum tempo venho pesquisando e tentando entender as variáveis globais do terminal, embora ainda não tenha entendido o uso e o efeito delas. Se possível, você poderia me dar um exemplo simples de como a criação de uma variável global pode ter um resultado positivo no saldo da minha conta de negociação?
Muito obrigado.
Atenciosamente,
Dale.
Artigo publicado Fundamentos da programação MQL5 - Variáveis terminais globais:
Autor: Dennis Kirichenko
① Atribuição:
Deseja gravar e ler variáveis globais (comumente chamadas de variáveis globais) para arquivos txt externos no MT4/MT5, que é uma ferramenta de negociação de moeda fornecida pela MetaQuotes.
② Estado:
Eu gostaria de implementar isso usando as classes CGlobalVar.mqh e CGlobalVarList.mqh descritas na página de referência abaixo.
(Especificamente, ele executa uma gravação/leitura de uma variável global usando o método Save () / Load () da classe CGLobalVarList)
Basicamente, não use a API do Windows (HANDLE CeateFile W (), etc.). Д.).
③ Local de armazenamento do arquivo de operação:
A posição padrão do arquivo de destino segue a especificação dessa classe
/ Files
ou
É armazenado quando FILE_COMMON é especificado como um argumento para FileOpen ()
C: \ { User \ User-Name \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \ File
E um de.
④ Arquivos criados:
Dois arquivos de script simples como amostras experimentais
WriteGlobalParameters.mq4
и
ReadGlobalParameters.mq4.
Ele foi criado por.
※ observações
① Se o objetivo for apenas compartilhar uma variável global com outro terminal, você pode pensar no método de uso de memória compartilhada etc. etc. etc. No entanto, desta vez, pense apenas no método que usa o arquivo txt externo.
② Quanto ao arquivo (WriteGlobalParamaeters.mq 4) no lado da exportação, usando as funções MQL incorporadas GlobalVariablesTotal (), GlobalVariableName (), GlobalVariableName (), GlobalVariableGet (), GlobalVariableTime (), não usando Save (HANDLE) Write usando a função WriteFile () (↓)
For (int i = GlobalVariablesTotal () - 1; i> = 0; i -) {
string gName = GlobalVariableName (i);
if (this.CheckGlobalVar (gName)) continue;
double gValue = GlobalVariableGet (gName);
datetime gTime = GlobalVariableTime (gName);
WriteFile (hFile, gName, gValue, gTime);
}, Era possível gravar a lista de variáveis em um arquivo txt no diretório especificado.
No entanto, no caso do grupo de funções GlobalVariable acima, mesmo que possa ser gravado, ele não pode ser adicionado à lista de variáveis globais de leitura e de terminal, portanto, é deixado de fora.
#### Problemas encontrados - Mensagem de erro
WriteGlobalParameters.mq 4 Lado:
2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: uninit reason 0
2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: Erro de salvamento de arquivo
2018.05.26 22: 34: 45.282 WriteGlobalParameters EURUSD, M1: Erro ao criar ponteiro
ReadGlobalParameters.mq 4 Lado:
2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: razão não clara 0
2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: erro de criação de ponteiro
* A partir da mensagem de erro acima
Está claro que a operação pretendida falha devido a falhas na especificação do ponteiro e à operação inadequada do arquivo,
Como não se sabe onde está o problema no código a seguir, eu gostaria de falar sobre esse ponto (bem como sobre o motivo não claro 0)
```MQL4/MQL5.
WriteGlobalParameters.mq4>
//+------------------------------------------------------------------+
//| WriteGlobalParameters.mq4 |
//| Copyright 2018, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link"https://www.mql5.com"
#property version "1.00"
#include <Arrays\List.mqh>
#include <CGlobalVar.mqh>
#include <CGlobalVarList.mqh>
//+------------------------------------------------------------------+
//| Função de início do programa de script |
//+------------------------------------------------------------------+
void OnStart(){
//Seu nome de arquivo
string FileName="Write";
string FileType="txt";
string file=FileName+". "+FileType;
//Pointer
CGlobalVarList *list = new CGlobalVarList;
Se (list!=NULL){
Print("Pointer Create Error");
}
//Handle
int hFile;
hFile=FileOpen(file,FILE_WRITE|FILE_COMMON); //FILE_CSV|FILE_UNICODE
se(hFile>=0){
se(!list.Save(hFile)){
Imprimir("Erro de salvamento de arquivo");
excluir lista;
FileClose(hFile);
}
//Fechar
FileClose(hFile);
}
//Liberar o ponteiro
excluir lista;
}
==========================================================================
ReadGlobalParameters.mq4>
//+------------------------------------------------------------------+
//| ReadGlobalParameters.mq4 |
//| Copyright 2018, MetaQuotes Software Corp. | ||
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link"https://www.mql5.com"
#property version "1.00"
#include <Arrays\List.mqh>
#include <CGlobalVar.mqh>
#include <CGlobalVarList.mqh>
//+------------------------------------------------------------------+
//| Função de início do programa de script |
//+------------------------------------------------------------------+
void OnStart(){
//Seu nome de arquivo
string FileName="Read";
string FileType="txt";
string file=FileName+". "+FileType;
//Pointer
CGlobalVarList *list = new CGlobalVarList;
Se (list!=NULL){
Print("Pointer Create Error");
}
//Handle
int hFile;
hFile=FileOpen(file,FILE_READ|FILE_COMMON); //FILE_CSV|FILE_UNICODE
se(hFile>=0){
se(!list.Load(hFile)){
Imprimir("Erro de carregamento de arquivo");
excluir lista;
FileClose(hFile);
}
//Fechar
FileClose(hFile);
}
//Liberar o ponteiro
excluir lista;
}
### Eu tentei
起動 Habilite o MT 4 e registre nomes arbitrários e valores numéricos (0,0 ou 1,0 facilmente no Coco) na lista de variáveis globais no terminal.
(O tempo não é definido, pois é definido automaticamente durante o registro)
================================================== ===============
Primeiro do lado do Write GlobalParameters.mq4 ---
① O WriteGlobalParameters.mq4 é aplicado ao gráfico com a configuração ⓪.
→ Se funcionar corretamente, o arquivo será criado no diretório especificado acima e as informações da variável global deverão ser inseridas.
② Se você verificar o diretório (C: \ User \ User - Name \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \),
O arquivo especificado "Write.txt" foi criado, mas o tamanho do arquivo é 0 kilobytes.
→ Quando eu o abri, é claro, o nome e o valor da variável global não foram inseridos.
================================================== ================
Em seguida, no lado 4 do ReadGlobalParameters.mq ---
③ Criei um arquivo "Read.txt" para ler uma variável global com um nome arbitrário e um valor numérico no mesmo diretório que 2
(Criamos e testamos dois tipos de nomes/números/carimbos de data/hora, split (não especificado) e split tab (especificando "\ t" em FileOpen ())))
④ Semelhante a ①, mesmo que você aplique ReadGlobalParameters.mq4 ao gráfico, a mensagem de erro acima e a abertura da lista de variáveis globais no terminal também ficam em branco.
================================================== ================
※ Observações
Como medida de precaução, fizemos o mesmo experimento com FILE_CSV, FILE_UNICODE, FILE_BIN e FILE_ANSI, que são definidos por padrão para a função FileOpen (), mas o resultado não mudou.
- www.mql5.com
Agora, as variáveis globais são apenas duplas.
Você pode usar o objeto CMap com elementos como par chave:valor.
Ou usar a matriz ou a lista ..... Ou usar a matriz ou a lista como variável global.
Ou usar um ponteiro que aponte para uma memória como Global Variable.
- 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
Novo artigo Princípios de Programação em MQL5: Variáveis Globais do Terminal foi publicado:
Este artigo destaca as capacidades orientada a objeto da linguagem MQL5 em criar objetos que facilitam o trabalho com as variáveis globais do terminal. Como exemplo prático eu considero um caso em que as variáveis globais são usados como pontos de controle para a implementação das fases de um programa.
No ambiente MQL4/5 existe um instrumento interessante - as variáveis globais do terminal do cliente. Ela permite criar um área de armazenamento de dados compartilhados para todos os programas do terminal. Além disso, o tempo de vida desta área não pára com o encerramento do terminal. Este artigo sugere a utilização das ferramentas de Programação Orientada a Objetos para ter uma idéia clara do que se trata as variáveis globais do terminal.
Outras informações sobre o artigo, as variáveis globais do terminal do cliente serão chamadas de "variáveis globais" ao menos que ela seja especificada de outra maneira.
1. Variáveis globais, Funções
Do ponto de vista de um programador, uma variável global é uma área da memória disponível para todos os programas em funcionamento de um terminal de negociação. Programadores iniciantes devem notar que, se existem vários terminais que trabalham simultaneamente, cada um deles terá o seu próprio espaço de memória independente para as variáveis globais. Elas não vão se sobrepor.
Os desenvolvedores da linguagem especificaram na Documentação que existem 11 funções usadas para trabalhar com variáveis globais.
A Teoria pode ser encontrada na seção "GlobalVariables" do livro texto MQL4.
Nas próximas seções, usarei os instrumentos da Programação orientada a objetos para a implementação das tarefas definidas.
Autor: Dennis Kirichenko