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 int            MA_Period=13;
input int            MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMMA;

Input Variablen bestimmen die Eingabeparameter des Programms, sie sind im Fenster der Programmeigenschaften zugänglich.

Werteinstellung fuer input-Parameter

 

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
input int            InpMAPeriod=13;         // Glättungslänge
input int            InpMAShift=0;           // horizontaler Versatz der Linie
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // Glättungsverfahren

Nutzerfreundliche Methode der Darstellung der 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
//--- day of week
enum dayOfWeek 
  {
   S=0,     // Sunday
   M=1,     // Monday
   T=2,     // Tuesday
   W=3,     // Wednesday
   Th=4,    // Thursday
   Fr=5,    // Friday,
   St=6,    // Saturday
  };
//--- Eingabeparameter
input dayOfWeek swapday=W;

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.  

Beispiel einer Nutzer-Enumeration als input-Parameter

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.

sinput-Parameter im Strategie-Tester

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"
input int             variable1 = ...
input double          variable2 = ...
input double          variable3= ...

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"
input int             group1_var1 = ...
input double          group1_var2 = ...
input double          group1_var3 = ...
 
input group           "Group name #2
input int             group2_var1 = ...
input double          group2_var2 = ...
input double          group2_var3 = ...

Ein Beispiel EA mit dem Block von Eingabeparameter, die nach ihrem Zweck getrennt sind:

input group           "Signal"
input int             ExtBBPeriod   = 20;       // Bollinger Bands period
input double          ExtBBDeviation2.0;      // deviation
input ENUM_TIMEFRAMES ExtSignalTF=PERIOD_M15;   // BB timeframe
 
input group           "Trend"
input int             ExtMAPeriod   = 13;       // Moving Average period
input ENUM_TIMEFRAMES ExtTrendTF=PERIOD_M15;    // MA timeframe
 
input group           "ExitRules"
input bool            ExtUseSL      = true;     // use StopLoss
input int             Ext_SL_Points = 50;       // StopLoss in points
input bool            ExtUseTP      = false;    // use TakeProfit
input int             Ext_TP_Points = 100;      // TakeProfit in points
input bool            ExtUseTS      = true;     // use Trailing Stop
input int             Ext_TS_Points = 30;       // Trailing Stop in points
 
input group           "MoneyManagement"
sinput double         ExtInitialLot = 0.1;      // initial lot value
input bool            ExtUseAutoLot = true;     // automatic lot calculation
 
input group           "Auxiliary"
sinput int            ExtMagicNumber = 123456;  // EA Magic Number
sinput bool           ExtDebugMessagetrue;    // print debug messages

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.

Anordnung der EA-Eingangsparameter im Strategie-Tester

 

Siehe auch

iCustom, Enumerationen, Programmeigenschaften