- Introducción a MQL5 y al entorno de desarrollo
- Edición, compilación y ejecución de programas
- Asistente MQL y borrador del programa
- Sentencias, bloques de código y funciones
- Primer programa
- Tipos de datos y valores
- Variables e identificadores
- Asignación e inicialización, expresiones y arrays
- Entrada de datos
- Corrección y depuración de errores
- Salida de datos
- Formato, sangría y espacios
- Miniresumen
- Fundamentos de programación
- Programación orientada a objetos
- API comunes
- Creación de programas de aplicación
- Automatización de trading
- Herramientas lingüísticas avanzadas
- Conclusión
Entrada de datos
La forma básica de transferir datos en un programa MQL es utilizar parámetros de entrada. Son similares a los de las funciones y las variables simples, en muchos aspectos, en concreto en términos de sintaxis de descripción y principios de su uso posterior en el código.
Además, la descripción de los parámetros de entrada presenta algunas diferencias esenciales:
- Se coloca en el texto fuera de todos los bloques (acabamos de descubrir los bloques que constituyen el cuerpo de las funciones, pero más adelante abordaremos los demás) o, en otras palabras, más allá de cualquier par de llaves;
- Comienza con la palabra clave input;
- Se inicializa con un valor predeterminado.
Normalmente se recomienda colocar los parámetros de entrada al principio del código fuente.
Por ejemplo, para definir un parámetro de entrada que permita introducir el número de la hora en nuestro script, deberá añadirse la siguiente cadena inmediatamente después del grupo de tres directivas #property:
input int GreetingHour = 0; |
Este registro significa varias cosas.
- En primer lugar, en el script figura ahora la variable GreetingHour, que está disponible desde cualquier lugar del código fuente, incluso desde dentro de cualquier función. Esta definición se denomina definición de nivel global, lo que se debe a la ejecución del punto 1 de la lista anterior.
- En segundo lugar, el uso de la palabra clave input hace que dicha variable sea visible dentro del programa y en la interfaz de usuario, en el cuadro de diálogo de propiedades del programa MQL5, que se abre al iniciarse. Así, al iniciar el programa, un usuario establece el valor necesario de los parámetros (en nuestro caso, un parámetroGreetingHour), y estos se convierten en los valores de las variables correspondientes durante la ejecución del programa.
Fijémonos de nuevo en que el valor predeterminado que hemos especificado en el código se mostrará al usuario en el cuadro de diálogo. No obstante, el usuario podrá cambiarlo. En tal caso, es ese nuevo valor introducido manualmente el que se incluirá en el programa (no el valor de inicialización).
El valor inicial de los parámetros de entrada se ve afectado tanto por la inicialización en el código y la elección interactiva del usuario al lanzarlos, como por el tipo de programa MQL5 y la forma en que se lanza. La cuestión es que los diferentes tipos de programas MQL5 tienen diferentes ciclos de vida una vez que se lanzan en gráficos. Así, al colocarlos una sola vez en el gráfico, los indicadores y Asesores Expertos quedan «registrados» en él para siempre, hasta que el usuario los elimine explícitamente. Por lo tanto, el terminal recuerda los últimos ajustes seleccionados y los utiliza automáticamente; por ejemplo, al reiniciar el terminal. Sin embargo, los scripts no se guardan en gráficos entre las sesiones de terminal. Por tanto, al lanzar el script, sólo se nos mostrará el valor predeterminado.
Desafortunadamente, por alguna razón, la descripción de un parámetro de entrada no garantiza invocar el cuadro de diálogo de configuración al inicio del script (para scripts como tipo de programa MQL5 independiente). Para que esto suceda es necesario añadir al código una nueva directiva #property específica para el script:
#property script_show_inputs |
Como veremos más adelante, esta directiva no es necesaria para otros tipos de programas MQL5.
Necesitábamos GreetingHour para transferir su valor a la función Greeting. Para ello, basta con introducirlo en la llamada a la función Greeting, en lugar de 0:
void OnStart()
|
Teniendo en cuenta los cambios que hemos realizado para describir el parámetro de entrada, vamos a guardar la nueva versión del script en el archivo GoodTime1.mq5. Si lo compilamos e iniciamos, veremos el cuadro de diálogo de entrada de datos:
Cuadro de diálogo para introducir los parámetros del script GoodTime1.mq5
Por ejemplo, si editamos el valor GreetingHour a 10, el script mostrará el siguiente saludo:
GoodTime1 (EURUSD,H1) Good afternoon, EURUSD |
Se trata de un resultado correcto y esperado.
Sólo por diversión, vamos a ejecutar el script de nuevo e introducir 100. En lugar de una respuesta con sentido, obtendremos:
GoodTime1 (EURUSD,H1) array out of range in 'GoodTime1.mq5' (19,18) |
Acabamos de encontrarnos con un nuevo fenómeno: un error de ejecución. En este caso, el terminal notifica que en la posición 18 de la cadena 19, nuestro script ha intentado leer el valor de un elemento del array que tiene un índice inexistente (más allá del tamaño del array).
Puesto que los errores son compañeros permanentes y necesarios de un programador y tenemos que aprender a solucionarlos, vamos a hablar de ellos con más detalle.