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

 
Dmitry Fedoseev:
Es kann durch Präfixe von globalen Variablen gelöst werden.
Es kann durch Präfixe gelöst werden, aber es ist keine schöne Lösung :-( es ist eine Frage der Generierung von eindeutigen Präfixen und in der Überprüfung von Variablen durch F3 ist es ein Durcheinander... wirklich Variablen fehlt Namensraum. Wenn wir ein Präfix aus DC, Konto, Konto, Diagramm... generieren müssen und daran denken, dass die Länge des Namens begrenzt ist, können wir nicht viel mit Präfixen machen :-)
 

Gute Artikel für Anfänger.

The GlobalVariableTemp() function creates a temporary global variable (that exists till the terminal is stopped). In a few years that I develop EAs on MQL5, I have never faced the need for such a variable. Moreover, the very concept of a temporary global variable contradicts the basic principle of their application — long-term data storage not affected by the terminal relaunches.

Das ist nicht die einzige Verwendung der globalen Variablen des Terminals. Sie können auch verwendet werden, um Informationen zwischen verschiedenen EAs oder Indikatoren auszutauschen. In einem solchen Fall könnte es also eine Funktion sein, die Daten nur im Speicher zu haben und nicht beim Neustart des Terminals zu behalten.

Der Mutex-Teil ist sehr interessant, ich habe eine Frage und eine Bemerkung.

Es kann vorkommen, dass ein EA während der Ausführung der OnTick()-Funktion aus einem Chart entfernt wird, aber die Mutex_Release()-Funktion nicht ausgeführt wird.

Wie kann es sein, dass ein EA entfernt wird und die Funktion Mutex_Release() nicht ausgeführt wird? Wenn Sie einen EA auf normale Weise aus einem Chart entfernen (Chart schließen, EA entfernen oder Terminal schließen), wird der Ausführungsfluss nicht unterbrochen. Übersehe ich etwas?

Die einzige Möglichkeit, dass Mutex_Release() nicht ausgeführt werden kann, ist ein "harter" Stopp, ein Strom- oder Hardwareausfall usw. Das macht Ihre globalen Mutex-Variablen zu einem perfekten Kandidaten, der mit GlobalVariableTemp() als temporäres Element erstellt werden kann.

 

Funktionieren globale Variablen während des Strategietests?

Wenn z.B. ein Indikator Werte in einer GV speichert und ein EA sie ausliest, wird der Strategy Tester die Werte während der Simulation rechtzeitig abrufen?

 
Admiral Thrawn:

Funktionieren globale Variablen bei Strategietests?

Wenn z.B. ein Indikator Werte in einer GV speichert und ein EA sie ausliest, wird der Strategy Tester die Werte während der Simulation rechtzeitig abrufen?

Ja

 
"Es ist möglich, dass globale Variablen verschwinden, wenn der Computer abrupt ausgeschaltet wird.

Ich habe globale Variablen verschwunden nach dem Schließen mt5 terminal bild 2361. GlobalVariablesFlush() ist auf 2 verschiedenen MT5 Terminals ausgeführt. Das ist Unsinn. Die Terminals werden mit der Taste /portable gestartet, vielleicht ist das der Grund?

Ich habe versucht, von Hand zu erstellen, das Terminal geöffnet und geschlossen, es scheint gespeichert zu werden. Ich habe die Ergebnisse der automatischen Optimierung in die Globals geschrieben, und das ist ein sehr langer Prozess. Es ist also keine so zuverlässige Speicherung. Ich werde ein Verfahren hinzufügen müssen, um globale Variablen über Strukturen in die Datei zu schreiben.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Konstantin Efremov:

Ich habe globale Variablen verschwunden nach dem Schließen mt5 terminal bild 2361. GlobalVariablesFlush() ist auf 2 verschiedenen MT5 Terminals ausgeführt. Das ist Unsinn. Die Terminals werden mit der Taste /portable gestartet, vielleicht ist das der Grund?

Ich habe versucht, von Hand zu erstellen, das Terminal geöffnet und geschlossen, es scheint gespeichert zu werden. Ich habe die Ergebnisse der automatischen Optimierung in die Globals geschrieben, und das ist ein sehr langer Prozess. Es ist also keine so zuverlässige Speicherung. Ich werde ein Verfahren hinzufügen müssen, um globale Variablen über Strukturen in die Datei zu schreiben.

Im Terminal oder im Testgerät? Es gibt einen Unterschied im MT5.

 
Dmitry Fedoseev:

Im Terminal oder im Testgerät? Es gibt einen Unterschied in MT5.

Im Terminal.

Im Allgemeinen habe ich das Problem auf folgende Weise gelöst. In der Klasse, die sich mit der Auto-Optimierung für den Expert Advisor befasst, habe ich neben der Erstellung von globalen Variablen auch identische Daten in Dateien für jedes Währungspaar geschrieben (die vorläufigen Dateien werden jedes Mal beim Start der Klasse gelöscht, da die Klasse nur zur Neuberechnung aufgerufen wird, so dass die Daten auf jeden Fall aktualisiert werden müssen). Die Dateien sind gewöhnliche Textdateien, deren Namen für eine bestimmte Instanz des Expert Advisors kodiert sind. Während der Initialisierung ruft der EA die Funktion zum Lesen der Optimierungsdaten aus den Dateien und zum Erstellen oder Aktualisieren der globalen Variablen auf.

Dies ist auch deshalb praktisch, weil die Dateien gesichert und bei der Ausführung im Strategietester verwendet werden können (die Dateien befinden sich natürlich in einem gemeinsamen Ordner der Terminals), da der Tester seine eigenen Instanzen globaler Variablen erstellt und die automatische Optimierung selbst ein langwieriger Prozess ist und das Laden fertiger Daten aus den Dateien die Testzeit erheblich verkürzt.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Ich habe alles gelesen, es ist ein großer Vorteil, aber der letzte Teil ist ein bisschen kompliziert, temporäre Variablen sind immer noch nützlich, ich habe ein Trading-Panel in der EA, das Panel enthält eine Schaltfläche, um die Trailing-Stop-Funktion zu öffnen, die temporäre Variable kann den Wert der Variablen zu erinnern und dann wechseln Sie Zyklen kann ich den Status der ursprünglichen Schaltfläche zu erhalten und neu zu zeichnen Es Vielen Dank für Ihren Artikel!
 

Hallo Dmitry,

ich weiß, dass dein Artikel schon ein paar Jahre alt ist, aber ich dachte, ich könnte etwas mitteilen und hoffentlich auch eine Frage stellen!

Sie erwähnen, dass Sie keine Verwendung für die Temp Global Var gefunden haben. Ich entwickle etwas, das genau das erfordert. Ich habe mir den Kopf zerbrochen, um einen Weg zu finden, die gemeinsame Nutzung von IO Completion Ports durch Globale Variablen zu implementieren, insbesondere bei einem Absturz oder einem normalen Neustart. Ich entwerfe ein System zur Auftragsabwicklung mit Windows IO Completion Ports. Da wir Win32-Threads von MQL5 aus erstellen können, kann ich keinen Thread-Pool erstellen, während ich den IOCP-Server erstelle, also ist mein Workaround mit Services;

  1. Ich erstelle einen IOCP Server, anstatt Threads zu erstellen (was wir nicht können), speichere ich den IOCP Handle in einer Global Var
  2. Ich öffne dann mindestens 2 andere Dienste, die als Worker-Threads fungieren, und sie lesen den IOCP-Handle aus der Global Var und registrieren sich beim IOCP

Für den Fall, dass das Terminal neu startet, sei es abnormal oder anderweitig, möchte ich, dass das IOCP-Handle beim Start des Terminals verschwunden ist, damit ich ein neues IOCP-Handle für einen Neustart erstellen kann. Das sorgt für eine viel sauberere Implementierung.

Ich habe mich auch gefragt, wie schnell globale Variablen sind und wie zuverlässig sie sind.

Vielen Dank für den großartigen Artikel, es war eine tolle Lektüre,

Shep


 
MetaQuotes:

Neuer Artikel MQL5 Programmiergrundlagen: Globale Variablen des Terminals ist veröffentlicht worden:

Autor: Dmitry Fedoseev

Das braucht die Python-Integration, um Daten von und zu Python an MLQ EA's zu senden. Dann könnte ein in Python entwickelter EA im Strategy Tester getestet werden, es sei denn, es gibt eine Unmöglichkeit, die ich nicht kenne.