Discusión sobre el artículo "Principios de programación en MQL5 - Variables golbales del terminal"

 

Artículo publicado Principios de programación en MQL5 - Variables golbales del terminal:

En este artículo se demuestran las posibilidades orientadas a objetos del lenguaje MQL5 en cuanto a creación de objetos responsables del funcionamiento con las variables globales del programa. Como ejemplo práctico se verá una situación en la que las variables globales pueden usarse como puntos de control en la ejecución de etapas del programa.

Autor: Dennis Kirichenko

 

funcionalidad. ¿Cómo va a repercutir en el entorno de negociación la creación o modificación de una variable global?

¿Puede explicar qué representa el valor numérico de las variables globales?

Durante bastante tiempo he estado investigando y tratando de entender las variables globales de la terminal, aunque hasta ahora no he entendido su uso y efecto. Si es posible, ¿podría darme un ejemplo sencillo de cómo la creación de una variable global puede tener un resultado positivo en el saldo de mi cuenta de operaciones?

Muchas gracias.

Saludos,

Dale.

 
### Suposicion - Lo que desea implementar

※ Por favor, compruebe el archivo de la biblioteca 2 que se utilizará en primer lugar desde el enlace de abajo.



① Asignación:

Quieres escribir y leer variables globales (comúnmente llamadas variables globales) para archivos txt externos en MT4 / MT5, que es una herramienta de comercio de divisas proporcionada por MetaQuotes.


② Estado:

Me gustaría implementar esto usando las clases CGlobalVar.mqh y CGlobalVarList.mqh descritas en la página de referencia a continuación.

(En concreto, realiza una escritura / lectura de una variable global utilizando el método Save () / Load () de la clase CGLobalVarList).

Básicamente no utiliza la API de Windows (HANDLE CeateFile W (), etc.). Д.).


③ Ubicación de almacenamiento del archivo de operación:

La posición por defecto del archivo de destino sigue la especificación de esta clase

/ Archivos

o

Se almacena cuando se especifica FILE_COMMON como argumento de FileOpen ()

C: \ { Usuario \ Nombre de usuario \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Archivos \ Archivo

Y uno de.


④ Archivos creados:

Dos archivos de secuencia de comandos simples como muestras experimentales

WriteGlobalParameters.mq4

и

ReadGlobalParameters.mq4.

Fue creado por.


※ observaciones

① Si sólo se trata de compartir una variable global con otro terminal, puedes pensar en el método de usar memoria compartida, etc. etc. Sin embargo, esta vez sólo piensa en el método usando el archivo txt externo.


② En cuanto al archivo (WriteGlobalParamaeters.mq 4) en el lado de exportación, utilizando las funciones incorporadas MQL GlobalVariablesTotal (), GlobalVariableName (), GlobalVariableName (), GlobalVariableGet (), GlobalVariableTime (), no utilizando Guardar (HANDLE) Escribir utilizando la función WriteFile () (↓).

For (int i = GlobalVariablesTotal () - 1; i> = 0; i -) {

cadena gName = GlobalVariableName (i);

if (this.CheckGlobalVar (gName)) continue;

double gValue = GlobalVariableGet (gName);

datetime gTime = GlobalVariableTime (gName);

WriteFile (hFile, gName, gValue, gTime);

}, Era posible escribir la lista de variables en un fichero txt en el directorio especificado.

Sin embargo, en el caso del grupo de funciones GlobalVariable anterior, aunque se podía escribir, no se puede añadir a la lista de variables globales de lectura y terminal, por lo que se deja fuera.


#### Problemas encontrados - Mensaje de error

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: File save error

2018.05.26 22: 34: 45.282 WriteGlobalParameters EURUSD, M1: Error creando puntero


ReadGlobalParameters.mq 4 Lado:

2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: unclear reason 0

2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: Error de creación de puntero


* Del mensaje de error anterior

Está claro que la operación prevista falla debido a defectos en la especificación del puntero y a un funcionamiento inadecuado del archivo,

Dado que no se sabe dónde está el problema en el siguiente código, me gustaría hablar de este punto (así como la razón 0 poco clara)


```MQL4/MQL5.

WriteGlobalParameters.mq4>

//+------------------------------------------------------------------+

//| WriteGlobalParameters.mq4

//| Copyright 2018, MetaQuotes Software Corp.

/ /| http s://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>

//+------------------------------------------------------------------+

//| Función de inicio del programa de script

//+------------------------------------------------------------------+

void OnStart(){

//Nombre de archivo

string FileName="Escribir";

string FileType="txt";

string file=NombreArchivo+". "+TipoArchivo;


//Puntero

CGlobalVarList *list = new CGlobalVarList;

if(lista!=NULL){

Print("Error de creación de puntero");

}


//Handle

int hFile;

hFile=FileOpen(fichero,FILE_WRITE|FILE_COMMON); //FILE_CSV|FILE_UNICODE


if(hFile>=0){

if(!list.Save(hFile)){

Print("Error al guardar el archivo");

borrar lista;

FileClose(hFile);

}

//Cerrar

FileClose(hFichero);

}

//Liberar el puntero

borrar lista;

}

==========================================================================

ReadGlobalParameters.mq4>

//+------------------------------------------------------------------+

//| ReadGlobalParameters.mq4

//| Copyright 2018, MetaQuotes Software Corp.

/ /| http s://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>

//+------------------------------------------------------------------+

//| Función de inicio del programa de script

//+------------------------------------------------------------------+

void OnStart(){

//Nombre de archivo

string FileName="Leer";

string FileType="txt";

string file=NombreArchivo+". "+TipoArchivo;


//Puntero

CGlobalVarList *list = new CGlobalVarList;

if(lista!=NULL){

Print("Error de creación de puntero");

}


//Handle

int hFile;

hFile=FileOpen(fichero,FILE_READ|FILE_COMMON); //FILE_CSV|FILE_UNICODE


if(hFile>=0){

if(!list.Load(hFile)){

Print("Error de carga de archivo");

borrar lista;

FileClose(hFile);

}

//Cerrar

FileClose(hFichero);

}

//Liberar el puntero

borrar lista;

}


### He intentado

起動 Habilitar MT 4 y registrar nombres arbitrarios y valores numéricos (0,0 o 1,0 fácilmente en Coco) a la lista de variables globales en el terminal.

(El tiempo no se establece ya que se establece automáticamente al registrar)


================================================== ===============

En primer lugar desde el lado Write GlobalParameters.mq4 ---


① WriteGlobalParameters.mq4 se aplica al gráfico con la configuración ⓪.

→ Si funciona correctamente, el archivo se crea en el directorio especificado anteriormente y se debe introducir la información de la variable global.


② Si se comprueba el directorio (C: \ Usuario \ Usuario - Nombre \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \),

El especificado "Write.txt" fue creado, pero el tamaño del archivo es de 0 kilobytes.

→ Cuando lo abrí, por supuesto, el nombre y el valor de la variable global no se introdujeron.


================================================== ================

A continuación en ReadGlobalParameters.mq 4 lado ---


③ Creé un archivo "Read.txt" para leer una variable global con un nombre arbitrario y un valor numérico en el mismo directorio que 2

(Creamos y probamos dos tipos de nombres/números/timestamps, split (sin especificar) y split tab (especificando "\ t" en FileOpen ())))


④ Similar a ①, incluso aplicando ReadGlobalParameters.mq4 al gráfico, el mensaje de error anterior y la apertura de la lista de variables globales en el terminal también estaba vacía.


================================================== ================

※ observaciones

Como medida de precaución, hicimos el mismo experimento con FILE_CSV, FILE_UNICODE, FILE_BIN y FILE_ANSI, que están configurados por defecto para la función FileOpen (), pero el resultado no cambió.

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

Ahora las variables globales son solo dobles.

Puede usar un objeto CMap con un elemento como key:value pair.

O utilizar Array o lista ..... O usar un Array o una lista como Variable Global.


O utilizar un puntero a una memoria como variable global.