- Lokale Variablen
- Formale Parameter
- Statische Parameter
- Globale Variablen
- Input Variablen
- Extern Variablen
- Initialisierung der Variablen
- Sichtbereich und Lebensdauer der Variablen
- Erzeugung und Entfernung der Objekte
Eingabevariablen
Speicherklasse input bestimmt die externen Variablen. Modifikator input wird vor dem Datentyp angegeben. Den Wert von Variable mit dem Modifikator input innerhalb mql5-Programm können nicht verändert werden, diese Variable sind nur lesbar. Den Wert von input-Variablen kann der Benutzer im Fenster der Programmeigenschaften ändern. Externe Variablen werden vor dem OnInit() Aufruf immer neu initialisiert.
Die maximale Länge der Namen von Eingabevariablen beträgt 63 Zeichen. Für den Eingabeparameter vom Typ string kann die maximale Länge (Länge der Zeichenkette) von 191 bis 253 Zeichen betragen (siehe Bemerkung). Die minimale Länge ist 0 Zeichen (der Wert wird nicht gesetzt).
Bespiel:
//--- Eingabeparameter
|
Input Variablen bestimmen die Eingabeparameter des Programms, sie sind im Fenster der Programmeigenschaften zugänglich.
In der Registerkarte "Inputs" kann eine andere Art der Anzeige der Namen der Eingangsparameter eingestellt werden. Verwenden Sie dazu einen Zeilenkommentar, der nach der Beschreibung des Eingabeparameters in derselben Zeile stehen soll. Damit können den Eingabeparameter benutzerfreundliche Namen zugeordnet werden.
Beispiel:
//--- Eingabeparameter
|
Bemerkung: Felder und Variablen zusammengesetzter Typen können nicht als input-Variablen auftreten.
Bemerkung: Die Länge eines Kommentartextes für eine Eingabevariable darf 63 Zeichen nicht überschreiten.
Bemerkung: Für Eingabevariablen vom Typ string wird die Begrenzung der Wertlänge (Länge der Zeichenkette) durch folgende Bedingungen festgelegt:
- der Parameterwert wird durch die Zeichenkette "parameter_name=parameter_wert" dargestellt ('=' wird berücksichtigt),
- maximale Darstellungslänge von 255 Zeichen (total_length_max=255 oder 254 Zeichen ohne '='),
- Maximale Länge des String-Parameters parameter_name_length = 63 Zeichen.
Die maximale Stringgröße für einen String-Parameter wird also nach folgender Gleichung berechnet:
parameter_value_length=total_length_max-parameter_name_length=254-parameter_name_length |
Damit liegt die maximale Länge der Zeichenkette zwischen 191 (parameter_name_length=63) und 253 Zeichen (parameter_name_length=1).
Parameterübergabe beim Aufruf der Benutzerindikatoren aus mql5-Programmen #
Benutzerindikatoren werden mittels der Funktion iCustom()aufgerufen. Dabei müssen nach dem Namen des Nutzerindikators die Parameter folgen, in strenger Übereinstimmung mit Deklaration der input-Variablen des vorgegebenen Nutzerindikators. Wenn die Anzahl der angegebener Parameter kleiner ist als die Anzahl der erklärten input-Variablen im aufgerufenen Benutzerindikator, werden die fehlenden Parameter von Werten ausgefüllt, die bei der Variablendeklaration angegeben wurden.
Wenn im Nutzerindikator die Funktion OnCalculate erster Art (d.h. der Indikator ist auf einem Datenfeld) verwendet wird, muss als letzter Parameter beim Aufruf solches Nutzerindikators einer der Wete ENUM_APPLIED_PRICE oder das Handle eines anderen Indikators auftreten. Gleichzeitig müssen alle Parameter, die den input-Variablen entsprechen, explizit angegeben werden.
Enumerationen als input-Parameter
Als input-Variablen (Eingabeparameter für mql5-Programme) können nicht nur die von der Sprache MQL5 vorausgesehene eingebettete Enumerationen verwendet werden, sondern auch die vom Nutzer vorbestimmten Enumerationen. ZB. können wir die Enumeration dayOfWeek erzeugen, die Wochentage beschreibt und input-Variable für Angeben konkretes Wochentages nicht als Ziffer, sondern in der dem Nutzer gewöhnten Art verwenden.
Beispiel:
#property script_show_inputs
|
Damit der Nutzer beim Scriptstart den nötigen Wert aus Eigenschaftsfenster wählen kann, verwenden wir Preprozessorbefehl #property script_show_inputs. Dann aktivieren wir Script und können aus der Liste einen der Enumerationswerte dayOfWeek wählen. Dann aktivieren wir Script EnumInInput und übergehen der Registerkarte "Parameter". Ein Standardwert des Parameters swapday ist Mittwoch (W=3), aber wir können einen anderen Wert zuordnen und diesen Wert für Änderung der Programmarbeit verwenden.
Die Anzahl der möglichen Enumerationswerte ist begrenzt. Darum wird Auswahl des Eingabewertes Auswahlliste verwendet. Als Werte gezeigt in der Liste werden mnemonische Namen der Enumerationsglieder verwendet. Wenn dem mnemonischen Namen Kommentar gegenübergestellt wird, wie es in unserem Beispiel gezeigt ist, wird anstatt des mnemonischen Namens Kommentarinhalt verwendet.
Jeder Wert der Enumeration dayOfWeek hat seinen eigenen Wert von 0 bis 6, aber die Liste der Parameter zeigt den Kommentar für jeden Wert. Dies gibt zusätzliche Flexibilität beim Schreiben von Programmen mit klaren Beschreibungen der Eingabeparameter.
Variablen mit dem Modifikator sinput #
Variablen mit dem Modifikator input erlauben nicht nur die Werte der externen Parameter bei dem Start der Programme anzugeben, sondern auch eine grosse Rolle bei der Optimierung der Handelsstrategien im Tester spielen. Jede im Expert Advisor erklärte input-Variable, mit Ausnahme des Typs string, kann an der Optimierung teilnehmen.
In einigen Fällen ist es notwendig, einige externe Parameter des Programms von der Erstellung des Bereichs von allen möglichen Durchgängen im Tester auszuschließen. Speziell für solche Fälle gibt es einen Modifikator von Speicher sinput. sInput ist eine Kurzform der Erklärung von statischer globaler Variable: sInput = static input. Es bedeutet die folgende Erklärung im Code des Expert-Advisors
sinput int layers=6; // Number of layers |
wird gleichbedeutend mit der vollständigen Erklärung sein
static input int layers=6; // Number of layers |
Die mit dem Modifikator sinput erklärte Variable ist ein Eingabeparameter des MQL5-programms, der Wert dieses Parameters kann bei seinem Start geändert werden. Dabei nimmt diese Variable nicht an dem Optimierungsprozess der Eingabeparameter teil, das heißt werden ihre Werte bei der Suche des besten Satzes der Parameter nach dem angegebenen Kriterium nicht durchgesucht.
Die Abbildung zeigt, dass der Expert-Advisor fünf externe Parameter hat. Der Parameter "Anzahl von Ebenen" wird als sinput erklärt und ist gleich 6. Dieser Parameter kann nicht während einer Optimierung der Handelsstrategie geändert werden. Man kann für ihn den notwendigen Wert angeben, der weiter verwendet wird. Felder für Start, Stop und Schritt für diese Variable sind für die Einstellung der Werte nicht verfügbar.
Nachdem wir den Modifikator sinput für Variable angegeben haben, verbieten wir dem Benutzer diesen Parameter zu optimisieren. Es bedeutet, dass der Terminal Benutzer für sie die Anfangs-und Endwerte für automatisches Durchsuchen in einem bestimmten Bereich bei der Optimierung im Strategie-Tester nicht angeben kann.
Aber dabei gibt es eine Ausnahme von dieser Regel – sinput-Variablen kann man in Optimierungsaufgaben mit Hilfe der Funktion ParameterSetRange() variieren. Diese Funktion wurde für die Programmsteuerung des Raums der verfügbaren Werte für jede input-Variable speziell erstellt, einschließlich jener, die für static input (sinput) erklärt sind. Eine weitere Funktion ParameterGetRange() erlaubt es Ihnen (im Handler OnTesterInit ()) die Werte der input-Variablen zu erhalten, wenn Optimierung gestartet wird, und falls notwendig, den Schritt der Veränderung und den Bereich neu anzugeben, innerhalb dessen der Wert des optimisierten Parameters durchgesucht wird.
Daher erlaubt die Kombination von sinput Modifikator mit zwei Funktionen für die Arbeit mit input-Parametern die flexiblen Regeln für die Einstellung der Optimierungsintervallen von einigen input-Variablen je nach der Werten der anderen input-Variablen zu schaffen.
Gruppieren der Eingabeparameter #
Um das Arbeiten mit MQL5-Programmen zu erleichtern, können die Eingabeparameter mit dem Schlüsselwort group in benannte Blöcke unterteilt werden. Dies ermöglicht eine visuelle Trennung einiger Parameter von anderen, basierend auf der in ihnen zugehörigen Logik.
input group "Group name"
|
Nach einer solchen Deklaration werden alle Eingabeparameter visuell zu einer benannten Gruppe zusammengefasst, die die Parameterkonfiguration für MQL5-Nutzer beim Start in einem Chart oder im Strategietester vereinfacht. Die Spezifikation jeder Gruppe ist gültig, bis eine neue Gruppendeklaration erscheint:
input group "Group name #1"
|
Ein Beispiel EA mit dem Block von Eingabeparameter, die nach ihrem Zweck getrennt sind:
input group "Signal"
|
Wenn Sie einen solchen EA im Strategietester starten, können Sie mit einem Doppelklick auf einen Gruppennamen den Eingabeblock ein/ausblenden und mit einem Klick auf das Gruppenkästchen alle Parameter für die Optimierung ab-/auswählen.
Siehe auch