Descargar MetaTrader 5

Variables Input

La clase de memoria input define una variable externa. El  modificador input  se indica antes del tipo de datos. No se puede cambiar el valor de una variable con el modificador input dentro del programa mql5, estas variables son exclusivamente para la lectura. Sólo el usuario puede modificar los valores de las variables input desde la ventana de propiedades de su programa. Las variables externas siempre se reinicializan inmediatamente antes de invocar OnInit().

Ejemplo:

//--- input parameters
input int            MA_Period=13;
input int            MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMMA;

Las variables Input determinan los parámetros de entrada del programa, están disponibles desde la ventana Propiedades de la aplicación.

Determinamos el valor para el parámetro input

 

Es posible establecer otro modo de mostrar los nombres de parámetros de entrada en la pestaña "Inputs". Para eso se utiliza un comentario de cadena, el que tiene que ir después de la descripción del parámetro de entrada en la misma cadena. De esa manera, se puede asignar a los parámetros de entrada los nombres más comprensibles para el usuario.

Ejemplo:

//--- input parameters
input int            InpMAPeriod=13;         // Smoothing period
input int            InpMAShift=0;           // Line horizontal shift
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // Smoothing method

Modo humano de vusualizar los parámetros de entrada

Nota: Los arrays y variables de tipos compuestos no pueden actuar como las variables input.
 

Traspaso de parámetros al llamar a los indicadores personalizados desde los programas mql5

Los indicadores personalizados se invocan con ayuda de la función iCustom(). Allí, después del nombre del indicador personalizado, deben ir los parámetros de acuerdo estricto con la declaración de variables input de este indicador de usuario. Si se indican menos parámetros que las variables input declaradas en el indicador personalizado invocado, entonces los parámetros que faltan se llenan con los valores especificados durante la declaración de variables.

Si en indicador personalizado se usa la función OnCalculate del primer tipo (es decir, el indicador se calcula en el mismo array de datos), entonces uno de los valores ENUM_APPLIED_PRICE o manejador (handle) del otro indicador debe actuar como el último parámetro durante la llamada de este indicador de usuario. Entonces, todos los parámetros correspondientes a las variables input tienen que ser claramente indicados.

Enumeraciones como parámetro input

No sólo las enumeraciones "built-in", previstas en el lenguaje MQL5, pueden ser utilizadas como las variables input (parámetros de entrada para los programas mql5), sino las enumeraciones definidas por el usuario. Por ejemplo, podemos crear la enumeración dayOfWeek que describe los días de la semana, y usar la variable input para indicar un día concreto de la semana no como un número, sino en forma más común para el usuario.

Ejemplo:

#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
  };
//--- input parameters
input dayOfWeek swapday=W;

Para que el usuario pueda eligir el valor necesario de la ventana de Propiedades durante el inicio del script, usamos el comando de preprocesador #property script_show_inputs. Iniciamos el script y podemos eligir de la lista uno de los valores de la enumeración dayOfWeek. Iniciamos el script EnumInInput y pasamos a la pestaña "Parámetros. Por defecto, el valor del parámetro swapday (día de cómputo del triple swap) es miércoles (W=3), pero nosotros podemos especificar cualquier otro valor y utilizar este valor para cambiar la operación del programa.

Ejemplo de enumeración de usuario como un parámetro input

La cantidad de posibles valores de enumeración está limitada. Por eso para eligir un valor de entrada se utiliza una lista desplegable. Los nombres mnemotécnicos de los elementos de enumeración se usan en calidad de los valores mostrados dentro de la lista. Pero si un nombre mnemotécnico está asociado con un comentario, como se muestra en el ejemplo, entonces en vez del nombre mnemotécnico se usa el contenido del comentario.

Cada valor de la enumeración dayOfWeek tiene su propio valor de 0 a 6, pero en la lista de parámetros se mostrarán los comentarios indicados para cada valor. Eso da una flexibilidad adicional para escribir los programas con las descripciones claras de los parámetros de entrada.

Cada valor de la enumeración dayOfWeek tiene su valor de 0 a 6, pero en la lista de parámetros serán mostrados los cometarios especificados para cada valor. Esto oporta la flexibilidad adicional para escribir un programa con las descripciones claras de los parámetros de entrada.

 

Variables con modificador sinput

Las variables con modificador input no sólo permiten establecer los valores de parámetros externos al iniciar los programas, sino también juegan un papel muy importante durante la optimización de estrategias comerciales en el probador. Cada variable input declarada en el EA, salvo el tipo string, puede participar en la optimización.

En algunas ocasiones resulta necesario excluir algunos parámetros externos del programa de la formación de las áreas de posibles pasos en el probador. Precisamente para estas ocasiones existe el modificador de memoria sinput. sinput es la sigla de declaración de una variable estática externa: sinput = static input. Es decir, esta declaración en el código del EA

sinput       int layers=6;   // Number of layers

equivale a la declaración completa

static input int layers=6;   // Number of layers

Una variable declarada con el modificador sinput es un parámetro de entrada del programa MQL5, y el valor de este parámetro se puede cambiar durante el arranque. Pero esta variable no participa en el proceso de optimización de los parámetros de entrada, es decir, no se efectúa el repaso de sus valores durante la búsqueda del mejor conjunto de parámetros según el criterio establecido.

Parámetro sinput en el Probador de Estrategias

En la imagen se muestra que el EA tiene 5 parámetros externos, de los cuales el parámetro "Número de capas" ha sido declarado como sinput y es igual a 6. Este parámetro no puede cambiarse durante el proceso de optimización de la estrategia de trading. Sólo se puede establecer para él un valor necesario que va a utilizarse. Los campos Inicio, Paso y Stop para esta variable no están disponibles para poner sus valores.

De esta manera, si establecemos el modificador sinput para una variable, el usuario tiene prohibido optimizar este parámetro. Eso significa que en el Probador de Estrategias el usuario no podrá establecer el valor inicial y final para esta variable con el fin del repaso automático dentro del rango establecido durante el proceso de optimización.

Pero hay una excepción en esta regla: las variables sinput se puede variar en las tareas de optimización utilizando la función ParameterSetRange(). Esta función ha sido creada especialmente para el control programado del área de valores disponibles para cualquier variable input, incluyendo las que han sido declaradas como static input (sinput). Otra función ParameterGetRange() permite obtener los valores de las variables input cuando se inicia la optimización (en el manejador OnTesterInit()), y en caso de necesidad redefinir el paso de cambio y el rango dentro del cual va a repasarse el valor del parámetro a optimizar.

De esta manera, la combinación del modificador sinput con otras dos funciones para el trabajo con los parámetros input permite crear unas reglas sumamente flexibles para establecer los intervalos de optimización de unas variables input dependiendo del valor de otras variables input.

Véase también

iCustom, Enumeraciones, Propiedades de programas