¿Como Conectar Python con Metatrader 5?


Instalación del Paquete MT5 e Inicialización
MetaTrader 5 (MT5) es una plataforma popular para el trading algorítmico, que permite tanto el trading manual como la automatización. Con la flexibilidad y facilidad de uso de Python, los traders ahora pueden conectarse directamente a MT5 usando el paquete MetaTrader 5. En esta primera publicación de nuestra serie sobre la integración de Python y MT5, repasaremos la instalación del paquete MetaTrader 5, su conexión a tu cuenta de MT5 y comprenderemos los conceptos básicos del trading basado en Python.
¿Por qué usar Python con MetaTrader 5?
MetaTrader 5 viene con su lenguaje nativo MQL5 para el trading algorítmico, que es poderoso y está estrechamente integrado con la plataforma MT5. Sin embargo, Python es un lenguaje de programación preferido por muchos traders, ya que ofrece una integración fluida con una amplia gama de bibliotecas de ciencia de datos y finanzas cuantitativas.
Dicho esto, el enfoque de Python tiene algunas limitaciones clave en comparación con MQL5:
- Sin acceso a valores de indicadores: Python no puede obtener datos de indicadores directamente, lo que lo hace menos adecuado para estrategias que dependen en gran medida de indicadores técnicos.
- Sin probador de estrategias: Python no puede aprovechar el probador de estrategias integrado de MT5 para backtesting y optimización, que es una característica central de MQL5.
A pesar de estas restricciones, la versatilidad de Python para análisis avanzados lo convierte en un excelente complemento para MT5.
Instalación del Paquete MetaTrader 5
Antes de comenzar a programar, necesitamos instalar el paquete Python de MetaTrader 5. Sirve como puente entre Python y MT5, permitiéndonos enviar comandos y recuperar datos de la plataforma de trading.
Comando de Instalación
Ejecuta el siguiente comando para instalar el paquete en tu entorno de Python:
pip install MetaTrader5
Después de completar la instalación, podemos intentar establecer una conexión entre nuestro script de trading y el terminal MT5.
Conexión a MetaTrader 5
Una vez que el paquete esté instalado, podemos conectar Python a MT5. Hay tres métodos para establecer una conexión entre tu entorno de Python y MT5:
- Conexión Automática: Si usas la función initialize() sin ningún parámetro, el paquete MT5 intentará localizar tu plataforma MetaTrader 5 y establecer una conexión automáticamente.
- Especificar la Ruta del Terminal: Puedes proporcionar la ruta al archivo EXE del terminal de MetaTrader 5 para indicar explícitamente al script la ubicación de la plataforma.
- Proporcionar Credenciales: Este método implica suministrar tus credenciales de inicio de sesión, incluyendo el número de cuenta, nombre del servidor y contraseña. Usaremos este tercer método ya que asegura que estés conectado a la cuenta demo correcta para fines de prueba. Incluso si la plataforma MT5 no está en ejecución, la función initialize() la iniciará y conectará automáticamente.
Ejemplo:
import MetaTrader5 as mt5
# Mostrar información del paquete MetaTrader 5
print("Autor del paquete MetaTrader5: ", mt5.__author__)
print("Versión del paquete MetaTrader5: ", mt5.__version__)
# Inicializar una conexión al terminal MT5 (usa las credenciales de tu cuenta demo de MT5)
if not mt5.initialize(login=52021XXX, server="XXX-Demo", password="G3wt9SYXXX"):
print("initialize() falló, código de error =", mt5.last_error())
quit()
else:
print("¡Conectado a MT5!")
# mt5.shutdown() # terminar la conexión
Explicación del Código
- Import: Primero, importamos el paquete MetaTrader 5 y le asignamos el alias mt5.
- Información del Paquete: El script primero imprime el autor y la versión del paquete MetaTrader 5 como referencia. Puedes ver que el paquete MT5 está desarrollado por MetaQuotes Ltd.
- Inicialización de la Conexión: La función mt5.initialize() conecta Python al terminal MT5. Necesitarás:
- Login: Tu número de cuenta de trading.
- Server: El nombre del servidor proporcionado por tu broker.
- Password: La contraseña de la cuenta.
- Terminación de la Conexión: Al llamar a mt5.shutdown() se termina la conexión.
Si la conexión no tiene éxito, la función last_error() capturará y mostrará el código de error. Por otro lado, si la conexión se establece exitosamente, será confirmada por la declaración print: “¡Conectado a MT5!“
Comparación entre Python y MQL5 para Trading Algorítmico
Tanto Python como MQL5 tienen fortalezas únicas cuando se usan con MetaTrader 5. Aquí hay una comparación detallada:
Ventajas de Python
- Análisis Avanzado: Python se integra perfectamente con bibliotecas para aprendizaje automático, visualización de datos y análisis estadístico, lo que lo hace ideal para desarrollar sistemas de trading cuantitativo y gestión de carteras.
- Flexibilidad: Python permite flujos de trabajo personalizados e integraciones con fuentes de datos externas, APIs y herramientas de terceros.
- Facilidad de Uso: La sintaxis de Python y su robusto ecosistema lo hacen accesible incluso para principiantes.
Ventajas de MQL5
- Integración Nativa: MQL5 está diseñado específicamente para MT5, ofreciendo acceso directo a todas las características de la plataforma.
- Acceso a Indicadores: MQL5 puede obtener valores de indicadores directamente, lo cual es crucial para muchas estrategias de trading técnico.
- Probador de Estrategias: El probador de estrategias integrado de MQL5 permite un backtesting y optimización robustos, lo cual Python actualmente carece.
- Velocidad de Ejecución: Los scripts de MQL5 se ejecutan directamente dentro de la plataforma MT5, asegurando menor latencia y ejecución más rápida.
En conclusión, aunque Python aporta flexibilidad y análisis avanzados, no puede reemplazar completamente a MQL5 para tareas como el acceso a indicadores y las pruebas de estrategias. Muchos traders encuentran beneficioso un enfoque híbrido: usar MQL5 para la ejecución y Python para el análisis de datos y desarrollo de estrategias. En la próxima publicación, exploraremos cómo intercambiar y procesar datos usando Python y el paquete MetaTrader 5.
A continuación, en este y otros artículos vamos a mostrar cómo conseguir una mayor integración entre la plataforma MT5 y Python a través de una serie de códigos y librerías de Python fáciles de usar que pueden emplearse para desarrollar herramientas de análisis y estrategias más completas. Entre otras cosas, estas guías van a mostrar como:
- Obtener información de la cuenta de MT5
- Acceder a la información de los símbolos en MT5
- Acceder a datos de precios en MT5
- Gestionar órdenes y posiciones en MT5
- Crear un bot de trading
Ahora vamos a mostrar como acceder a la información de la cuenta de trading en MT5 mediante un código de Python.
¿Como obtener información de la cuenta de MT5 usando Python?
MetaTrader 5 (MT5) proporciona información detallada de la cuenta que los traders pueden usar para monitorear y analizar sus actividades de trading. Con Python y el paquete MetaTrader 5, acceder a estos datos se vuelve simple y programático. Acá te explicamos cómo obtener e interpretar la información de la cuenta desde MT5 usando Python.
¿Por qué Acceder a la Información de la Cuenta?
Comprender las métricas de tu cuenta es fundamental para gestionar el riesgo y asegurar un trading exitoso. La información de la cuenta incluye:
- Saldo y capital de la cuenta.
- Uso del margen y margen libre.
- Apalancamiento y ganancia.
- Estado de la cuenta de trading (por ejemplo, moneda de la cuenta, detalles del broker).
Estas métricas ayudan a los traders a:
- Monitorear la salud de la cuenta en tiempo real.
- Evaluar los niveles de margen para evitar llamadas de margen.
- Rastrear ganancias y pérdidas de forma programática.
Acceso a la Información de la Cuenta Usando Python
Para obtener información de la cuenta desde MetaTrader 5, usamos la función account_info() proporcionada por el paquete MetaTrader 5. La función devuelve información en forma de una estructura de tupla nombrada (namedtuple).
Ejemplo de Código
Aquí se muestra cómo conectarse a tu cuenta MT5 y recuperar la información de la cuenta:
import MetaTrader5 as mt5
# Inicializar conexión a MT5 (usa las credenciales de tu cuenta demo)
if not mt5.initialize(login=52021XXX, server="XXX-Demo", password="G3wt9SYXXX"):
print("Falló la conexión a MetaTrader 5, código de error:", mt5.last_error())
quit()
# Obtener información de la cuenta
account_info = mt5.account_info()
if account_info is None:
print("Falló la recuperación de información de la cuenta, código de error:", mt5.last_error())
else:
# Imprimir información de la cuenta
print("Información de la Cuenta:")
print(f"Saldo: {account_info.balance}")
print(f"Capital: {account_info.equity}")
print(f"Margen: {account_info.margin}")
print(f"Margen Libre: {account_info.margin_free}")
print(f"Ganancia: {account_info.profit}")
print(f"Apalancamiento: {account_info.leverage}")
print(f"Moneda: {account_info.currency}")
print(f"Servidor: {account_info.server}")
# guardar toda la información de la cuenta en un diccionario
account_info_dict = account_info._asdict()
# Cerrar conexión MT5
# mt5.shutdown() # terminar conexión
Explicación del Código
- Inicialización de la Conexión:
- El método mt5.initialize() conecta Python a tu terminal MT5.
- Reemplaza los parámetros login, server y password con los detalles de tu cuenta.
- Recuperar Información de la Cuenta:
- mt5.account_info() obtiene todas las métricas relacionadas con la cuenta.
- Devuelve un objeto Account_Info con atributos como balance, equity, margin, etc.
- Manejo de Errores:
- Si la función falla, usa mt5.last_error() para depurar.
- Métricas de la Cuenta:
- Balance: Fondos totales en la cuenta.
- Equity: Saldo actual de la cuenta, incluyendo ganancias/pérdidas no realizadas.
- Margin: Cantidad bloqueada en posiciones abiertas.
- Free Margin: Fondos disponibles para nuevas operaciones.
- Profit: Ganancia o pérdida total de todas las operaciones abiertas.
- Leverage: La relación de apalancamiento establecida por el broker.
- Currency: La moneda base de la cuenta.
- Server: El nombre del servidor.
- Guardar Diccionario con Información de la Cuenta:
- Define una variable account_info_dict para almacenar todos los detalles disponibles de la cuenta como un diccionario usando el método account_info._asdict().
- Cerrar Conexión:
- Siempre termina la conexión con mt5.shutdown() después de completar las operaciones.
Casos de Uso Prácticos
- Gestión de Riesgos: Calcula el margen libre y asegúrate de que sea suficiente antes de realizar nuevas operaciones.
- Seguimiento de Rendimiento: Rastrea cambios en el capital y las ganancias de forma programática.
- Alertas y Automatización: Envía alertas cuando las métricas de la cuenta caigan por debajo de umbrales predefinidos (por ejemplo, margen libre bajo).
Usando Python y el paquete MetaTrader 5, puedes acceder a información detallada de la cuenta para monitorear y gestionar tus actividades de trading de manera efectiva. Usando una estructura de código similar, puedes recuperar información del terminal con la función terminal_info().
¿Cómo acceder a la información de los símbolos en MetaTrader 5 con Python?
Seguidamente profundizaremos en algunas de las funciones más útiles para trabajar con símbolos o instrumentos en el código de integración de Python con MetaTrader 5 (MT5). Estas incluyen symbols_total, symbols_get, symbol_info, symbol_info_tick y symbol_select. Cada una de estas funciones cumple un propósito específico y permiten interactuar y analizar símbolos del mercado de manera efectiva.
En MT5, un símbolo representa un activo negociable, como un par de divisas, una acción o un producto básico (commodity). Los símbolos son esenciales para las operaciones de trading, el análisis y las estrategias algorítmicas. Por medio del paquete MetaTrader5 para Python, podemos interactuar programáticamente con los símbolos para obtener sus propiedades y gestionar su selección.
Símbolos totales disponibles (symbols_total)
La función symbols_total devuelve el número total de símbolos disponibles en la plataforma de trading. Retorna el recuento total de todos los símbolos, incluyendo los símbolos personalizados y aquellos deshabilitados en la Ventana de Mercado, como un valor entero.
Ejemplo:
import MetaTrader5 as mt5
# Inicializar conexión con MT5
if not mt5.initialize(login=52021XXX, server="XXX-Demo", password="G3wt9SY&4wXXXX"):
print("Error al conectar con MetaTrader 5, código de error:", mt5.last_error())
quit()
# Obtener el total de símbolos
total_symbols = mt5.symbols_total()
print(f"Símbolos Totales Disponibles: {total_symbols}")
Para los siguientes ejemplos, asumimos que el paquete mt5 ha sido importado y la conexión se ha establecido exitosamente.
Recuperación de símbolos (symbols_get)
La función symbols_get le permite acceder a símbolos individuales de la lista de todos los instrumentos financieros disponibles en el terminal MetaTrader 5. La función devuelve los símbolos como una tupla. Si ocurre un error, retorna None.
Ejemplo:
# obtener todos los símbolos e imprimir los primeros cinco
symbols = mt5.symbols_get()
print('Símbolos: ', len(symbols))
# mostrar los primeros cinco símbolos
count = 0
for s in symbols:
count += 1
print("{}. {}".format(count, s.name))
if count == 5: break
Puede utilizar el parámetro group de la función symbols_get para filtrar y acceder a instrumentos de trading específicos. Por ejemplo, para extraer símbolos que contengan “EUR” en sus nombres, puede encerrar el parámetro group con asteriscos (*) como se muestra a continuación:
# Obtener símbolos que contengan "EUR" en sus nombres
eur_symbols = mt5.symbols_get("*EUR*")
print('Número de símbolos que contienen "EUR":', len(eur_symbols))
for s in eur_symbols:
print(s.name)
Este ejemplo recupera todos los símbolos que tienen “EUR” en sus nombres e imprime el conteo y los nombres de estos símbolos.
Obtención de información detallada del símbolo (symbol_info)
La función symbol_info recupera propiedades detalladas de un símbolo específico, como dígitos, spread, requisitos de margen o precios bid/ask.
Ejemplo:
# Obtener información detallada de un símbolo
symbol_info = mt5.symbol_info("EURUSD")
if symbol_info:
print("Información del Símbolo para EURUSD:")
print(f"Spread: {symbol_info.spread}")
print(f"Punto: {symbol_info.point}")
print(f"Margen Inicial: {symbol_info.margin_initial}")
print(f"Precio Bid: {symbol_info.bid}")
else:
print("Información del símbolo no encontrada")
symbol_info_dict = symbol_info._asdict() # guardar todas las propiedades en un diccionario
La función symbol_info es crucial para el trading algorítmico, proporcionando acceso rápido a información clave sobre un símbolo específico bajo análisis. Si prefiere trabajar con diccionarios, puede convertir la tupla como se demuestra en el ejemplo.
4. Obtener Datos de Precio Actual (symbol_info_tick)
La función symbol_info_tick recupera los últimos datos de tick para un símbolo, incluyendo su hora, y precios bid y ask. Esto es esencial para estrategias que dependen de actualizaciones de precios en tiempo real.
Ejemplo:
# Obtener los últimos datos de tick para un símbolo
tick_data = mt5.symbol_info_tick("EURUSD")
if tick_data:
print("Últimos Datos de Tick para EURUSD:")
print(f"Precio Bid: {tick_data.bid}")
print(f"Precio Ask: {tick_data.ask}")
else:
print("No hay datos de tick disponibles para EURUSD")
Agregar Símbolo a Market Watch (symbol_select)
La función symbol_select le permite seleccionar o deseleccionar programáticamente un símbolo en la ventana Market Watch. Esto es necesario si desea asegurarse de que un símbolo esté disponible para trading o recuperación de datos.
La función acepta dos parámetros: el nombre del símbolo como cadena y “enable“, que cuando se establece en True agrega el símbolo a Market Watch, o cuando se establece en False, lo elimina.
# Agregar EURCAD a Market Watch
if mt5.symbol_select("EURCAD", True):
print("EURCAD agregado exitosamente a Market Watch")
else:
print("Error al agregar EURCAD a Market Watch")
# Remover EURCAD de Market Watch
if mt5.symbol_select("EURCAD", False):
print("EURCAD removido exitosamente de Market Watch")
else:
print("Error al remover EURCAD de Market Watch")
Puntos Clave
- symbols_total ayuda a determinar el número de símbolos disponibles.
- symbols_get recupera datos de todos los símbolos solicitados.
- symbol_info proporciona detalles profundos sobre las propiedades de un símbolo.
- symbol_info_tick ofrece datos de tick en tiempo real, cruciales para el trading en vivo.
- symbol_select asegura que el símbolo deseado esté disponible en Market Watch.
En conclusión, dominar las funciones clave para gestionar y analizar instrumentos de trading en MetaTrader 5 establece una base sólida para operaciones de trading efectivas. Estas herramientas le permiten acceder dinámicamente a detalles de símbolos, filtrar instrumentos y ajustar eficientemente sus estrategias de trading. Con este conocimiento, estará mejor preparado para manejar las complejidades del trading algorítmico.
En el siguiente artículo vamos a explicar cómo acceder a datos de precios históricos y en tiempo real de MT5 mediante Python.
¿Que broker de MT5 recomendamos para probar este código? Una buena opción es RoboForex, un broker online regulado con años de experiencia en los mercados. Más información en: Reseña de RoboForex









