ParameterGetRange

Recibe para la variable input la información sobre la banda de valores y el paso de cambios durante la optimización del EA en el Probador de Estrategias. Hay 2 variantes de esta función.

1. Obtención de la información para el parámetro input del tipo entero

bool  ParameterGetRange(
   const string  name,          // nombre del parámetro (variable input)
   bool&         enable,        // permitida la optimización del parámetro
   long&         value,         // valor del parámetro
   long&         start,         // valor inicial
   long&         step,          // paso de cambio
   long&         stop           // valor final
   );

2. Obtención de la información para el parámetro input del tipo real

bool  ParameterGetRange(
   const string  name,          // nombre del parámetro (variable input)
   bool&         enable,        // permitida la optimización del parámetro
   double&       value,         // valor del parámetro
   double&       start,         // valor inicial
   double&       step,          // paso de cambio
   double&       stop           // valor final
   );

Parámetros

name

[in]  Identificador de la variable input. Estas variables son parámetros externos del programa cuyos valores pueden ser establecidos durante el arranque en el gráfico o bien durante la simulación.

enable

[out]  Quiere decir que este parámetro se puede utilizar para el repaso de valores en el proceso de optimización en el Probador de Estrategias.

value

[out]  Valor del parámetro.

start

[out]  Valor inicial del parámetro durante la optimización.

step

[out]  Paso de cambio del parámetro durante el repaso de sus valores.

stop

[out]  Valor final del parámetro durante la optimización.

Valor devuelto

Devuelve true en caso de la ejecución con éxito, de lo contrario - false. Para obtener la información sobre el error, hay que llamar a la función GetLastError().

Nota

Esta función puede ser invocada sólo desde los manejadores OnTesterInit(), OnTesterPass() y OnTesterDeinit(). Sirve para obtener el valor y el rango de cambio de los parámetros de entrada del EA durante el proceso de optimización en el Probador de Estrategias.

Cuando se llama en OnTesterInit(), la información obtenida se puede utilizar para redefinir las reglas de repaso de cualquier variable input a través de la función ParameterSetRange(). De esta manera, se puede establecer nuevos valores Start, Stop, Step, e incluso excluir completamente este parámetro de la optimización a pesar de los ajustes en el probador. Esto permite crear sus propios guiones de manejo del área de parámetros de entrada durante la optimización. Es decir, excluir de la optimización unos parámetros en función de los valores de los parámetros claves del EA.

Ejemplo:

#property description "Asesor Experto para demostrar la función ParameterGetRange()."
#property description "Hay que iniciar en el Probador de Estrategias en el modo de optimización"
//--- 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()
  {
//--- EA sirve sólo para trabajar en el probador
   if(!MQL5InfoInteger(MQL5_OPTIMIZATION))
     {
      MessageBox("¡Hay que iniciar en el Probador de Estrategias en el modo de optimización!");
      //--- finalizamos anticipadamente el trabajo del EA y lo quitamos del gráfico
      return(INIT_FAILED);
     }
//--- inicialización finalizada con éxito
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| TesterInit function                                              |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- ejemplo para el parámetro input del tipo 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("El primer parámetro");
   PrintFormat("%s=%d  enable=%s  from %d to %d with step=%d",
               name,par1,(string)enable,par1_start,par1_stop,par1_step);
//--- ejemplo para el parámetro input del tipo double
   name="Input2";
   double par2,par2_start,par2_step,par2_stop;
   ParameterGetRange(name,enable,par2,par2_start,par2_step,par2_stop);
   Print("El segundo parámetro");
   PrintFormat("%s=%G  enable=%s  from %G to %G with step=%G",
               name,par2,(string)enable,par2_start,par2_stop,par2_step);
 
//--- ejemplo para el parámetro input del tipo bool
   name="Input3";
   long par3,par3_start,par3_step,par3_stop;
   ParameterGetRange(name,enable,par3,par3_start,par3_step,par3_stop);
   Print("El tercer parámetro");
   PrintFormat("%s=%s  enable=%s  from %s to %s",
               name,(string)par3,(string)enable,
               (string)par3_start,(string)par3_stop);
//--- ejemplo para el parámetro input del tipo enumeración
   name="Input4";
   long par4,par4_start,par4_step,par4_stop;
   ParameterGetRange(name,enable,par4,par4_start,par4_step,par4_stop);
   Print("El cuarto parámetro");
   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()
  {
//--- este mensaje se mostrará una vez finalizada la optimización
   Print(__FUNCTION__," Optimisation completed");
  }