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().

O comprimento máximo de um nome de variável input é 63 caracteres. Além disso, para um parâmetro de entrada do tipo string o comprimento do valor máximo (comprimento da string) pode variar de 191 a 253 caracteres (veja a Observação) O comprimento mínimo é de 0 caracteres (nenhum valor especificado).

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.

Nota: la longitud del comentario de línea para las variables Input no debe superar los 63 caracteres.

Nota: Para las variables input del tipo string, la limitación en la longitud del valor (longitud de la línea) se establece de la forma siguiente:

  • el valor del parámetro se representa como línea "nombre_del_parámetro=valor_del_parámetro"(el símbolo '=' se cuenta),
  • la longitud máxima de la representación es de 255 caracteres (total_length_max=255 o 254 caracteres sin tener en cuenta '='),
  • la longitud máxima del nombre del parámetro de línea parameter_name_length = 63 caracteres.

Por consiguiente, el tamaño máximo de cadena para un parámetro string se puede calcular mediante la fórmula:

parameter_value_length=total_length_max-parameter_name_length=254-parameter_name_length

Esto ofrece un tamaño máximo de línea de 191 (parameter_name_length=63) a 253 caracteres (parameter_name_length=1).

 

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.

 

Grupo de parámetros de entrada #

Para que resulte cómodo trabajar con los programas de MQL5, podemos dividir los parámetros de entrada en bloques con nombre propio con la ayuda de la palabra clave group. Esto permitirá separar visualmente unos parámetros de otros usando como base la lógica implementada en ellos.

input group           "Nombre del grupo"
input int             variable1 = ...
input double          variable2 = ...
input double          variable3= ...

Después de dicha declaración, todos los parámetros de entrada se combinan visualmente en el grupo indicado, lo que permite simplificar para el usuario de un programa MQL5 la configuración de los parámtros al iniciar en un gráfico o el simulador de estrategias.  La indicación de cada grupo será válida hasta que se declare un nuevo grupo:

input group           "Nombre del grupo #1"
input int             group1_var1 = ...
input double          group1_var2 = ...
input double          group1_var3 = ...
 
input group           "Nombre del grupo #2
input int             group2_var1 = ...
input double          group2_var2 = ...
input double          group2_var3 = ...

Ejemplo de asesor cuyo bloque de parámetros de entrada está dividido según su cometido:

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

Al iniciar un asesor de este tipo, en el simulador de estrategias aparece la posibilidad de minimizar y desplegar el bloque de parámetros de entrada de un grupo haciendo doble clic sobre el nombre del mismo, y también de seleccionar todos parámetros de un grupo para la optimización clicando sobre la casilla de verificación de este.

Grupo de parámetros de entrada de un asesor en el simulador de estrategias

Véase también

iCustom, Enumeraciones, Propiedades de programas