Primer programa

Intentemos añadir al script algo sencillo pero ilustrativo para demostrar su funcionamiento. Vamos a renombrar el script modificado como HelloChart.mq5.

En muchos libros de texto de programación, el ejemplo inicial imprime el solemne «Hola, mundo». En MQL5, un saludo similar podría tener el siguiente aspecto:

void OnStart()
{
  Print("Hello, world");
}

Pero vamos a hacerlo más informativo:

void OnStart()
{
  Print("Hello, "Symbol());
}

Así, hemos añadido sólo una cadena con algunas estructuras lingüísticas.

Aquí, Print es el nombre de la función integrada en el terminal y destinada a mostrar mensajes en el registro Asesores Expertos (pestaña Expert Advisors de la ventana Herramientas; a pesar de llamarse Expert Advisors, la pestaña recoge mensajes de programas MQL de todo tipo). A diferencia de la función OnStart que definimos de forma independiente, la función Print ha sido definida para nosotros de antemano y para siempre. Print es una de las muchas funciones integradas que constituyen la API (interfaz de programación de aplicaciones) de MQL5.

La nueva línea en nuestro código denota la sentencia para llamar a la función Print enviándole la lista de argumentos (entre paréntesis) que se imprimirán en el registro. Los argumentos de la lista están separados por comas. En este caso, hay dos argumentos: la línea «Hola» y la llamada a otra función integrada, Symbol, que devuelve el nombre del instrumento activo del gráfico actual (el valor obtenido de ella pasará inmediatamente a la lista de argumentos de la función Print, en la ubicación desde la que se ha llamado a la función Symbol).

La función Symbol no tiene parámetros y, por lo tanto, no se le envía nada dentro de los paréntesis.

Por ejemplo, si el script se encuentra en el gráfico «EURUSD», la llamada a la función Symbol() devolverá «EURUSD» y, en cuanto al programa que se ejecuta, la sentencia relativa a la llamada a la función Print tendrá un nuevo aspecto: Print("Hello, ", "EURUSD"). Desde el punto de vista del usuario, por supuesto, todas estas llamadas a funciones y la sustitución dinámica de los resultados intermedios son fluidas e inmediatas. Sin embargo, para un programador es importante darse cuenta de cómo se ejecuta el programa paso a paso para evitar errores lógicos y lograr un cumplimiento estricto del plan concebido.

La línea «Hola» entre comillas dobles se denomina literal, es decir, una secuencia fija de caracteres que el ordenador percibe como un texto, tal y como está (tal como se introduce en el código fuente del programa).

Por lo tanto, la sentencia de impresión anterior debe imprimir los dos argumentos uno por uno en el registro, lo que debería dar como resultado de hecho la unión de las dos líneas y la obtención de «Hola, EURUSD».

Es importante destacar que la coma dentro de las comillas se imprimirá en el registro como parte de la línea y no se procesará de ninguna manera especial. A diferencia de ello, la coma que se coloca después de las comillas de cierre y antes de llamar a Symbol() es el carácter separador en la lista de argumentos, es decir, que afecta al comportamiento del programa. Si se omite la primera coma, el programa no perderá su corrección, aunque imprimirá la palabra «Hola» sin una coma después. Sin embargo, si se omite la segunda coma, el programa dejará de compilarse, ya que se romperá la sintaxis de la lista de argumentos de la función: todos los valores que contenga (en nuestro caso, son las dos líneas) deben estar separados por comas.

El error del compilador aparecerá de la siguiente manera:

'Symbol' - some operator expected        HelloChart.mq5        16        19

El compilador se «queja» de la falta de algo antes de mencionar Symbol. Esto interrumpirá la compilación y el archivo ejecutable del programa no se creará. Por lo tanto, volveremos a poner la coma en su sitio.

Este ejemplo nos muestra lo importante que es seguir estrictamente la sintaxis del lenguaje. Los mismos caracteres pueden trabajar de forma diferente en distintas partes del programa. Así, incluso una pequeña omisión puede ser decisiva. Por ejemplo, observe el punto y coma al final de la línea que llama a Print. El punto y coma significa aquí el final de la sentencia. Si nos olvidamos de ponerlo, pueden producirse extraños errores de compilación.

Para comprobarlo, intentaremos eliminar este punto y coma y volver a compilar el script. Esto da lugar a la obtención de nuevos errores con la descripción del problema y su lugar en el código fuente.

Errores de compilación en el registro del MetaEditor

Errores de compilación en el registro del MetaEditor

 

'}' - semicolon expected        HelloChart.mq5        17        1
'}' - unexpected end of program        HelloChart.mq5        17        1

El primer error especifica explícitamente la ausencia del punto y coma esperado por el compilador. Se propaga el segundo error: la llave de cierre que señalaba el final del programa se había detectado antes de que terminara la sentencia actual. En opinión del compilador, continúa, porque aún no se ha encontrado con el punto y coma. Es obvio cómo solucionar los errores: el punto y coma debe volver a colocarse en la posición correcta en la sentencia.

Vamos a compilar y lanzar el script arreglado. Aunque se ejecuta muy rápidamente y se elimina del gráfico prácticamente de inmediato, y aparece un registro que confirma la operación del script en el registro de Experts.

HelloChart (EURUSD,H1)        Hello, EURUSD