ParameterGetRange

Empfängt die Information über den Bereich der Werte und den Schritt der Veränderung für input-Variable bei der Optimierung eines Expert Advisors in Strategie-Tester. Es gibt zwei Varianten der Funktion.

1. Empfang von Information für den input-Parameter des Integer-Typs

bool  ParameterGetRange(
   const string  name,          // Name des (input-Variable) Parameters
   bool&         enable,        // Optimierung des Parameters ist erlaubt
   long&         value,         // Wert des Parameters
   long&         start,         // Anfangswert
   long&         step,          // Schritt der Veränderung
   long&         stop           // Endwert
   );

2. Empfang von Information für den input-Parameter des tatsächlichen Typs

bool  ParameterGetRange(
   const string  name,          // Name des (input-Variable) Parameters
   bool&         enable,        // Optimierung des Parameters ist erlaubt
   double&       value,         // Wert des Parameters
   double&       start,         // Anfangswert
   double&       step,          // Schritt der Veränderung
   double&       stop           // Endwert
   );

Parameter

name

[in]  Identifikator der input-Variable. Diese Variablen sind externe Parameter des Programms, deren Werte man beim Start auf einem Chart oder während eines einzelnen Testens angeben kann.

enable

[out] Merkmal, dass dieser Parameter für Durchsuchen der Werte bei der Optimierung in Strategie-Tester verwendet werden kann.

value

[out]  Wert des Parameters.

start

[out]  Anfangswert des Parameters bei der Optimierung.

step

[out]  Schritt der Veränderung des Parameters beim Durchsuchen seiner Werte.

stop

[out]  Endwert des Parameters bei der Optimierung.

Rückgabewert

Gibt bei Erfolg true zurück, ansonsten false. Um Informationen über den Fehler zu erhalten, verwenden Sie die Funktion GetLastError().

Hinweis

Die Funktion kann nur aus den Handlern OnTesterInit(), OnTesterPass() und OnTesterDeinit() aufgerufen werden. Sie ist für den Erhalt von Wert und Veränderungsbereich der Eingabeparameter des Expert Advisors bei der Optimierung in Strategie-Tester bestimmt.

Beim Aufruf in OnTesterInit() kann die erhaltene Information für Neudefinierung der Regeln für Durchsuchen jeder input-Variable mit Hilfe der Funktion ParameterSetRange() verwendet werden. So kann man die neuen Werte Start, Stop, Schritt einstellen und sogar diesen Parameter von der Optimierung unabhängig von den Einstellungen in Strategie-Tester völlig ausschließen. Dies ermöglicht es Ihnen eigene Skripten zu erstellen, um den Raum von Eingabeparametern bei der Optimierung zu verwalten, das heißt von der Optimierung einige Parameter je nach den Werten der wichtigsten Parameter des Expert Advisors auszuschließen.

Beispiel:

#property description "Expert Advisor demonstriert die Funktion ParameterGetRange()."
#property description "Man muss in Strategie-Tester im Optimierung-Modus starten"
//--- input parameters
input int                 Input1=1;
input double              Input2=2.0;
input bool                Input3=false;
input ENUM_DAY_OF_WEEK    Input4=SUNDAY;
 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Expert Advisor ist nur für die Arbeit in Strategie-Tester bestimmt
   if(!MQL5InfoInteger(MQL5_OPTIMIZATION))
     {
      MessageBox("Man muss in Strategie-Tester im Optimierung-Modus starten!");
      //--- beenden wir die Arbeit des Expert Advisors vorfristig und entfernen wir aus dem Chart
      return(INIT_FAILED);
     }
//--- erfolgreicher Abschluss der Initialisierung
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| TesterInit function                                              |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- Beispiel für den input-Parameter des Typs long
   string name="Input1";
   bool enable;
   long par1,par1_start,par1_step,par1_stop;
   ParameterGetRange(name,enable,par1,par1_start,par1_step,par1_stop);
   Print("Der erste Parameter");
   PrintFormat("%s=%d  enable=%s  from %d to %d with step=%d",
               name,par1,(string)enable,par1_start,par1_stop,par1_step);
//--- Beispiel für den input-Parameter des Typs double
   name="Input2";
   double par2,par2_start,par2_step,par2_stop;
   ParameterGetRange(name,enable,par2,par2_start,par2_step,par2_stop);
   Print("Der zweite Parameter");
   PrintFormat("%s=%G  enable=%s  from %G to %G with step=%G",
               name,par2,(string)enable,par2_start,par2_stop,par2_step);
 
//--- Beispiel für den input-Parameter des Typs bool
   name="Input3";
   long par3,par3_start,par3_step,par3_stop;
   ParameterGetRange(name,enable,par3,par3_start,par3_step,par3_stop);
   Print("Der dritte Parameter");
   PrintFormat("%s=%s  enable=%s  from %s to %s",
               name,(string)par3,(string)enable,
               (string)par3_start,(string)par3_stop);
//--- Beispiel für den input-Parameter des Enumerationstyps
   name="Input4";
   long par4,par4_start,par4_step,par4_stop;
   ParameterGetRange(name,enable,par4,par4_start,par4_step,par4_stop);
   Print("Der vierte Parameter");
   PrintFormat("%s=%s  enable=%s  from %s to %s",
               name,EnumToString((ENUM_DAY_OF_WEEK)par4),(string)enable,
               EnumToString((ENUM_DAY_OF_WEEK)par4_start),
               EnumToString((ENUM_DAY_OF_WEEK)par4_stop));
  }
//+------------------------------------------------------------------+
//| TesterDeinit function                                            |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- diese Meldung wird nach dem Abschluss der Optimierung ausgegeben
   Print(__FUNCTION__," Optimisation completed");
  }