Instalar Python y el paquete MetaTrader5

Para estudiar los materiales de este capítulo, Python debe estar instalado en su ordenador. Si aún no lo ha instalado, descargue la última versión de Python (por ejemplo, la 3.10 en el momento de escribir estas líneas) de https://www.python.org/downloads/windows.

Al instalar Python, se recomienda marcar la bandera «Add Python to PATH» para poder ejecutar scripts de Python desde la línea de comandos desde cualquier carpeta.

Una vez descargado y ejecutado Python, instale el módulo MetaTrader5 desde la línea de comandos (aquí pip es un programa estándar de administración de paquetes de Python):

pip install MetaTrader5

Posteriormente, puede comprobar la actualización del paquete con la siguiente línea de comandos:

pip install --upgrade MetaTrader5

La sintaxis para añadir otros paquetes de uso común es similar. En concreto, muchos scripts requieren paquetes de análisis y visualización de datos: pandas y matplotlib, respectivamente.

pip install matplotlib
pip install pandas

Puede crear un nuevo script de Python directamente desde el Asistente MQL5 en MetaEditor. Además del nombre del script, el usuario puede seleccionar opciones para importar varios paquetes, como TensorFlow, NumPy o Datetime.

Por defecto, se sugiere colocar los scripts en la carpeta MQL5/Scripts. Los scripts de Python recién creados y los ya existentes se muestran en el navegador de MetaTrader 5, marcados con un icono especial, y se pueden lanzar desde el navegador de la forma habitual. Los scripts de Python pueden ejecutarse en el gráfico en paralelo con otros Asesores Expertos y scripts de MQL5. Para detener un script si su ejecución está en bucle, basta con eliminarlo del gráfico.

Ejecución de un script de Python en el terminal

Ejecución de un script de Python en el terminal

El script de Python lanzado desde el terminal recibe el nombre del símbolo y el marco temporal del gráfico a través de parámetros de línea de comandos. Por ejemplo, podemos ejecutar el siguiente script en el gráfico EURUSD, H1, en el que los argumentos están disponibles como el array sys.argv:

import sys
   
print('The command line arguments are:')
for i in sys.argv:
   print(i)

Se enviará al registro del experto:

The command line arguments are:
C:\Program Files\MetaTrader 5\MQL5\Scripts\MQL5Book\Python\python-args.py
EURUSD
60

Además, se puede ejecutar un script de Python directamente desde MetaEditor especificando la ubicación de instalación de Python en el cuadro de diálogo del editor Ajustes, pestaña Compiladores: a continuación, el comando de compilación para archivos con la extensión *.py se convierte en un comando de ejecución.

Por último, los scripts de Python también pueden ejecutarse en su entorno nativo pasándolos como parámetros en llamadas a python.exe desde la línea de comandos o desde otro IDE (Entorno de Desarrollo Integrado) adaptado para Python, como Jupyter Notebook.

Si el trading algorítmico está activado en el terminal, el trading desde Python también está activado por defecto. Para proteger aún más las cuentas cuando se utilizan bibliotecas Python de terceros, la configuración de la plataforma ofrece la opción «Desactivar el trading automático a través de la API de Python externa». Así, los scripts Python pueden bloquear selectivamente el trading, dejándolo disponible para los programas MQL. Cuando esta opción está activada, las llamadas a funciones de trading en un script Python devolverán el error 10027 (TRADE_RETCODE_CLIENT_DISABLES_AT), que indica que el trading algorítmico ha sido desactivado por el terminal de cliente.

MQL5 frente a Python
 
Python es un lenguaje interpretado, a diferencia de MQL5, que es compilado. Para nosotros, como desarrolladores, esto nos facilita la vida porque no necesitamos una fase de compilación separada para obtener un programa que funcione. No obstante, la velocidad de ejecución de los scripts en Python es notablemente inferior a la de los compilados en MQL5.
 
Python es un lenguaje de tipado dinámico: el tipo de una variable viene determinado por el valor que pongamos en ella. Por un lado, esto otorga flexibilidad, pero también exige cautela para evitar errores imprevistos. MQL5 utiliza tipado estático, es decir, a la hora de describir variables, debemos especificar de forma explícita su tipo, y el compilador controla la compatibilidad de tipos.
 
El propio Python «limpia la basura», es decir, libera la memoria asignada por el programa de aplicación para los objetos. En MQL5 tenemos que seguir la llamada oportuna de delete para objetos dinámicos.
 
En la sintaxis de Python, la separación o sangría del código fuente desempeña un importante papel. Si necesita escribir una sentencia compuesta (por ejemplo, un bucle o condicional) con un bloque de varias sentencias anidadas, entonces Python utiliza espacios o tabuladores para este propósito (deben ser del mismo tamaño dentro del bloque). No está permitido mezclar tabuladores y espacios. Una sangría incorrecta provocará un error. En MQL5, formamos bloques de sentencias compuestas encerrándolas entre llaves {... }, pero el formato no desempeña ningún papel, y puede aplicar el estilo que quiera sin romper el rendimiento del programa.
 
Las funciones de Python admiten dos tipos de parámetros: con nombre y posicionales. El segundo tipo corresponde a lo que estamos acostumbrados en MQL5: el valor de cada parámetro debe pasarse estrictamente en su orden en la lista de argumentos (según el prototipo de la función). Por el contrario, los parámetros con nombre se pasan como una combinación de nombre y valor (con '=' entre ellos), y por tanto pueden especificarse en cualquier orden, por ejemplo, func(param2 = value2, param1 = value1).