Diskussion zum Artikel "Grundlagen der Programmierung in MQL5: Globale Variablen des Terminals"

 

Neuer Artikel Grundlagen der Programmierung in MQL5: Globale Variablen des Terminals :

Dieser Beitrag beschäftigt sich mit den Objekt-orientierten Fähigkeiten der MQL5-Sprache zur Erzeugung von Objekten, die die Arbeit mit globalen Variablen des Terminals erleichtern. Als praktisches Beispiel betrachte ich einen Fall, wo die globalen Variablen als Kontrollpunkte zur Implementierung der Programmphasen eingesetzt werden.

Bei Ausführung des Moduls, erscheint im Chartfenster ein Kommentar, dass das Programm im Open() Block arbeitet.

Wenn dann kein Schließen des Programms erzwungen wurde, wird die Kontrolle an die Funktion übertragen, die einen entsprechenden Marker setzt/löscht. Sollte ein Marker in einem der Kontrollpunkte nicht gelöscht werden können, wird das so interpretiert, dass das Modul seine Arbeit nicht abgeschlossen hat.

Abb. 8 zeigt ein Muster der Rückverfolgungsphasen der Arbeit des Moduls mit globalen Variablen.

Abb. 8 Muster der Abfolge der verarbeitenden Marker

Abb. 8 Muster der Abfolge der verarbeitenden Marker

Autor: Dennis Kirichenko

 

Funktionalität zu erlangen. Wie wirkt sich das Erstellen oder Ändern einer globalen Variable auf die Handelsumgebung aus?

Können Sie erklären, wofür der numerische Wert der globalen Variablen steht?

Seit geraumer Zeit recherchiere ich und versuche, die globalen Variablen des Terminals zu verstehen, obwohl ich ihre Verwendung und Wirkung noch nicht verstanden habe. Könnten Sie mir bitte ein einfaches Beispiel dafür geben, wie sich die Erstellung einer globalen Variable positiv auf den Saldo meines Handelskontos auswirken kann?

Ich danke Ihnen.

Mit freundlichen Grüßen,

Dale.

 
MetaQuotes Software Corp.:

Veröffentlichter Artikel Grundlagen der MQL5-Programmierung - Globale Terminalvariablen:

Autor: Dennis Kirichenko

### Annahme - Was Sie implementieren wollen

※ Bitte prüfen Sie zuerst die zu verwendende Bibliotheksdatei 2 aus dem untenstehenden Link.



① Zuweisung:

Sie möchten in MT4 / MT5, einem Devisenhandels-Tool von MetaQuotes, globale Variablen für externe txt-Dateien schreiben und lesen.


② Zustand:

Ich möchte dies mit den Klassen CGlobalVar.mqh und CGlobalVarList.mqh implementieren, die auf der Referenzseite unten beschrieben sind.

(Konkret geht es um das Schreiben/Lesen einer globalen Variablen mit der Methode Save () / Load () der Klasse CGLobalVarList)

Verwenden Sie grundsätzlich nicht die Windows-API (HANDLE CeateFile W (), etc.). Д.).


③ Speicherort der Operationsdatei:

Die Standardposition der Zieldatei folgt der Angabe dieser Klasse

/ Dateien

oder .

Sie wird gespeichert, wenn FILE_COMMON als Argument für FileOpen () angegeben wird

C: \ { User \ User-Name \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \ File

Und eine von.


④ Erstellte Dateien:

Zwei einfache Skriptdateien als experimentelle Beispiele

WriteGlobalParameters.mq4

и

ReadGlobalParameters.mq4.

Es wurde erstellt von.


※ Bemerkungen

① Wenn es nur darum geht, eine globale Variable mit einem anderen Terminal zu teilen, kann man über die Methode der Verwendung von gemeinsamem Speicher usw. nachdenken. usw. Denken Sie aber diesmal nur an die Methode mit der externen txt-Datei.


② Wie bei der Datei (WriteGlobalParamaeters.mq 4) auf der Exportseite, mit den eingebauten MQL-Funktionen GlobalVariablesTotal (), GlobalVariableName (), GlobalVariableName (), GlobalVariableGet (), GlobalVariableTime (), nicht mit Save (HANDLE) Write mit der Funktion 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);

}, Es war möglich, die Liste der Variablen in eine txt-Datei im angegebenen Verzeichnis zu schreiben.

Im Fall der obigen Funktionsgruppe GlobalVariable kann sie jedoch nicht in die Liste der globalen Lese- und Terminalvariablen aufgenommen werden, obwohl sie herausgeschrieben werden könnte, und wird daher ausgelassen.


#### Aufgetretene Probleme - Fehlermeldung

WriteGlobalParameters.mq 4 Seite:

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

2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: Fehler beim Speichern der Datei

2018.05.26 22: 34: 45.282 WriteGlobalParameters EURUSD, M1: Fehler beim Erstellen des Zeigers


ReadGlobalParameters.mq 4 Seite:

2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: unklarer Grund 0

2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: Fehler bei der Zeigererstellung


* Aus der obigen Fehlermeldung

Es ist klar, dass der beabsichtigte Vorgang aufgrund von Fehlern in der Zeigerspezifikation und einer unzureichenden Dateioperation fehlschlägt,

Da nicht bekannt ist, wo das Problem im folgenden Code liegt, möchte ich auf diesen Punkt eingehen (sowie auf die unklare Ursache 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>

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

//| Skriptprogramm Startfunktion |

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

void OnStart(){

//Ihr Dateiname

string Dateiname="Schreiben";

string FileType="txt";

string file=Dateiname+". "+DateiTyp;


//Zeiger

CGlobalVarList *list = new CGlobalVarList;

if(list!=NULL){

Print("Pointer Create Error");

}


//Handle

int hFile;

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


if(hFile>=0){

if(!list.Save(hFile)){

Print("Fehler beim Speichern der Datei");

Liste löschen;

FileClose(hFile);

}

//Schließen

FileClose(hFile);

}

//Zeiger wieder freigeben

Liste löschen;

}

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

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>

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

//| Skriptprogramm Startfunktion |

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

void OnStart(){

//Ihr Dateiname

string Dateiname="Lesen";

string FileType="txt";

string file=Dateiname+". "+DateiTyp;


//Zeiger

CGlobalVarList *list = new CGlobalVarList;

if(list!=NULL){

Print("Pointer Create Error");

}


//Handle

int hFile;

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


if(hFile>=0){

if(!list.Load(hFile)){

Print("Fehler beim Laden einer Datei");

Liste löschen;

FileClose(hFile);

}

//Schließen

FileClose(hFile);

}

//Zeiger wieder freigeben

Liste löschen;

}


### Ich habe versucht

起動 MT 4 aktivieren und beliebige Namen und numerische Werte (in Coco einfach 0.0 oder 1.0) in die globale Variablenliste auf dem Terminal eintragen.

(Die Zeit wird nicht eingestellt, da sie bei der Registrierung automatisch eingestellt wird)


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

Zuerst von der Write GlobalParameters.mq4 Seite ---


① WriteGlobalParameters.mq4 wird auf das Diagramm mit der Einstellung ⓪ angewendet.

→ Wenn es korrekt funktioniert, wird die Datei in dem oben angegebenen Verzeichnis erstellt und die globalen Variableninformationen müssen eingegeben werden.


② Wenn Sie das Verzeichnis (C: \ User \ User - Name \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \) überprüfen,

Die angegebene "Write.txt" wurde erstellt, aber die Dateigröße beträgt 0 Kilobytes.

→ Als ich sie öffnete, wurden der Name und der Wert der globalen Variablen natürlich nicht eingegeben.


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

Weiter zu ReadGlobalParameters.mq 4 Seite ---


③ Ich habe eine "Read.txt"-Datei erstellt, um eine globale Variable mit einem beliebigen Namen und numerischen Wert im gleichen Verzeichnis wie 2

(Wir haben zwei Arten von Namen/Zahlen/Zeitstempeln erstellt und getestet, split (unspezifiziert) und split tab (durch Angabe von "\ t" in FileOpen ())))


④ Ähnlich wie bei ①, auch wenn man ReadGlobalParameters.mq4 auf das Diagramm anwendet, war die Fehlermeldung oben und das Öffnen der Liste der globalen Variablen auf dem Terminal ebenfalls leer.


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

※ Anmerkungen

Als Vorsichtsmaßnahme haben wir das gleiche Experiment mit FILE_CSV, FILE_UNICODE, FILE_BIN und FILE_ANSI durchgeführt, die standardmäßig für die Funktion FileOpen () eingestellt sind, aber das Ergebnis hat sich nicht geändert.

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

Globale Variablen sind jetzt nur noch Doubles.

Wunsch kann CMap Objekt mit Element wie Schlüssel:Wert-Paar verwenden.

Oder Array oder Liste verwenden ..... Oder verwenden Sie Array oder Liste als Globale Variable.


Oder verwenden Sie einen Zeiger auf einen Speicher als Globale Variable.