Discussão do artigo "Princípios de Programação em MQL5: Variáveis Globais do Terminal"

 

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.

Fig.8. Diagrama da sequência de processos da flag

Autor: Dennis Kirichenko

 

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.

 
### Pressuposto - O que você deseja implementar

※ Verifique primeiro o arquivo 2 da biblioteca a ser usado no link abaixo.



① 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.

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • www.mql5.com
The Synchronized Charts script allows comparing bars of different symbols or different periods of the same symbol. Attach the script to a chart and move bars or change the scale, all opened chart will move synchronously with the current one. The bars on different charts aligned to the border according to their open time. CreateGridOrdersTune A...
 

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.