Diskussion zum Artikel "Grundlagen der Programmierung in MQL5: Globale Variablen des Terminals" - Seite 3
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Es kann durch Präfixe von globalen Variablen gelöst werden.
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?
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.
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.
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.
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;
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
Neuer Artikel MQL5 Programmiergrundlagen: Globale Variablen des Terminals ist veröffentlicht worden:
Autor: Dmitry Fedoseev