Discussione sull’articolo "Fondamenti di programmazione MQL5: Variabili Globali del Terminale"

 

Il nuovo articolo Fondamenti di programmazione MQL5: Variabili Globali del Terminale è stato pubblicato:

Questo articolo evidenzia le capacità orientate agli oggetti del linguaggio MQL5 per la creazione di oggetti che facilitano il lavoro con le variabili globali del terminale. Come esempio pratico considero un caso in cui le variabili globali vengono utilizzate come punti di controllo per l'implementazione delle fasi del programma.

Il risultato di un test simile per le variabili globali complete è presentato in Fig.3. La loro creazione non richiede molto più tempo.

Il motivo è che queste variabili vengono salvate sul disco nel file gvariables.dat situato nella cartella Profili.

Fig.3. Tempo speso per creare variabili globali complete

Fig.3. Tempo speso per creare variabili globali complete

Non credo che sia necessario creare così tante variabili globali. Ho condotto questa valutazione semplicemente per curiosità.

Nel prossimo passaggio lavoreremo con un insieme di variabili globali.

Autore: Denis Kirichenko

 

funzionalità. In che modo la creazione o la modifica di una variabile globale avrà un impatto sull'ambiente di trading?

Sei in grado di spiegare cosa rappresenta il valore numerico delle variabili globali?

Da un po' di tempo sto facendo ricerche e cercando di capire le variabili globali del terminale, anche se per ora non ne ho compreso l'uso e l'effetto. Se possibile, potreste fornirmi un semplice esempio di come la creazione di una variabile globale possa avere un risultato positivo sul saldo del mio conto di trading?

Grazie.

Distinti saluti,

Dale.

 
### Assunzione - Cosa si vuole implementare

※ Si prega di controllare prima il file di libreria 2 da utilizzare dal link sottostante.



① Assegnazione:

Si desidera scrivere e leggere variabili globali (comunemente chiamate variabili globali) per file txt esterni in MT4 / MT5, che è uno strumento di trading di valuta fornito da MetaQuotes.


Stato ②:

Vorrei implementare questa funzione utilizzando le classi CGlobalVar.mqh e CGlobalVarList.mqh descritte nella pagina di riferimento qui sotto.

(In particolare, esegue una scrittura/lettura di una variabile globale utilizzando il metodo Save () / Load () della classe CGLobalVarList).

In pratica non utilizza le API di Windows (HANDLE CeateFile W (), ecc.). Д.).


③ Posizione di memorizzazione del file operativo:

La posizione predefinita del file di destinazione segue le specifiche di questa classe

/ File

o

Viene memorizzato quando FILE_COMMON è specificato come argomento di FileOpen ()

C: \ { Utente \ Nome utente \ AppData \ Roaming \ MetaQuote \ Terminale \ Comune \ File \ File

E uno di.


④ File creati:

Due semplici file di script come esempi sperimentali

ScriviParametriGlobali.mq4

и

ReadGlobalParameters.mq4.

È stato creato da.


※ osservazioni

① Se lo scopo è solo quello di condividere una variabile globale con un altro terminale, si può pensare al metodo di utilizzo della memoria condivisa, ecc. ecc. Tuttavia, questa volta pensate solo al metodo che utilizza il file txt esterno.


② Per quanto riguarda il file (WriteGlobalParamaeters.mq 4) dal lato dell'esportazione, utilizzando le funzioni MQL integrate GlobalVariablesTotal (), GlobalVariableName (), GlobalVariableName (), GlobalVariableGet (), GlobalVariableTime (), non utilizzando Save (HANDLE) Write utilizzando la funzione WriteFile () (↓)

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

string gName = GlobalVariableName (i);

se (this.CheckGlobalVar (gName)) continua;

double gValue = GlobalVariableGet (gName);

datetime gTime = GlobalVariableTime (gName);

WriteFile (hFile, gName, gValue, gTime);

Era possibile scrivere l'elenco delle variabili in un file txt nella directory specificata.

Tuttavia, nel caso del gruppo di funzioni GlobalVariable di cui sopra, anche se è possibile scriverlo, non è possibile aggiungerlo all'elenco delle variabili globali di lettura e di terminale, quindi viene lasciato fuori.


#### Problemi riscontrati - Messaggio di errore

WriteGlobalParameters.mq 4 Side:

2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: uninit reason 0

2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: errore salvataggio file

2018.05.26 22: 34: 45.282 WriteGlobalParameters EURUSD, M1: errore di creazione del puntatore


ReadGlobalParameters.mq 4 Side:

2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: motivo non chiaro 0

2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: errore di creazione del puntatore


* Dal messaggio di errore sopra riportato

È chiaro che l'operazione prevista non riesce a causa di difetti nella specifica del puntatore e di un funzionamento inadeguato del file,

Poiché non è noto dove si trovi il problema nel codice seguente, vorrei parlare di questo punto (così come del poco chiaro motivo 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>

#includere <CGlobalVarList.mqh>

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

//| Funzione di avvio del programma di script |

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

void OnStart(){

//Il vostro nome di file

string FileName="Write";

string FileType="txt";

string file=NomeFile+". "+FileType;


//Pointer

CGlobalVarList *list = new CGlobalVarList;

if(list!=NULL){

Print("Errore di creazione del puntatore");

}


//Manipolo

int hFile;

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


se(hFile>=0){

if(!list.Save(hFile)){

Print("Errore di salvataggio del file");

eliminare l'elenco;

FileClose(hFile);

}

//Chiudere

FileClose(hFile);

}

//Rilasciare il puntatore

eliminare l'elenco;

}

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

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

#includere <CGlobalVarList.mqh>

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

//| Funzione di avvio del programma di script |

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

void OnStart(){

//Il vostro nome di file

string FileName="Read";

string FileType="txt";

string file=NomeFile+". "+FileType;


//Pointer

CGlobalVarList *list = new CGlobalVarList;

if(list!=NULL){

Print("Errore di creazione del puntatore");

}


//Manipolo

int hFile;

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


se(hFile>=0){

if(!list.Load(hFile)){

Print("Errore di caricamento del file");

eliminare l'elenco;

FileClose(hFile);

}

//Chiudere

FileClose(hFile);

}

//Rilasciare il puntatore

eliminare l'elenco;

}


### Ho provato

Abilitare MT 4 e registrare nomi arbitrari e valori numerici (0,0 o 1,0 facilmente in Coco) nell'elenco delle variabili globali sul terminale.

(L'ora non viene impostata perché viene impostata automaticamente al momento della registrazione).


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

Prima dal lato Write GlobalParameters.mq4 ---


① WriteGlobalParameters.mq4 viene applicato al grafico con l'impostazione ⓪.

→ Se funziona correttamente, il file viene creato nella directory specificata in precedenza e le informazioni sulle variabili globali devono essere inserite.


Se si controlla la directory (C: \ User \ User - Name \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \),

Il file specificato "Write.txt" è stato creato, ma la sua dimensione è di 0 kilobyte.

→ Quando l'ho aperto, ovviamente, il nome e il valore della variabile globale non sono stati inseriti.


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

Successivamente su ReadGlobalParameters.mq 4 lato ---


③ Ho creato un file "Read.txt" per leggere una variabile globale con un nome arbitrario e un valore numerico nella stessa directory di 2

(Abbiamo creato e testato due tipi di nomi/numeri/tempi, split (non specificato) e split tab (specificando "\ t" in FileOpen ()))))).


④ Analogamente a ①, anche applicando ReadGlobalParameters.mq4 al grafico, il messaggio di errore precedente e l'apertura dell'elenco delle variabili globali sul terminale risultavano vuoti.


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

Osservazioni

Per precauzione, abbiamo fatto lo stesso esperimento con FILE_CSV, FILE_UNICODE, FILE_BIN e FILE_ANSI, che sono impostati di default per la funzione FileOpen (), ma il risultato non è cambiato.

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

Ora le variabili globali sono solo doppie.

Si può usare l'oggetto CMap con elementi come la coppia chiave:valore.

Oppure utilizzare array o elenchi ..... Oppure utilizzare Array o liste come variabili globali.


Oppure utilizzare un puntatore a una memoria come variabile globale.