El trading automatizado con MetaTrader 5 (MT5) y Python es una excelente manera de ejecutar estrategias sin intervención manual. En este artículo, exploraremos cómo conectar Python con MT5, obtener datos de mercado y ejecutar un bot de trading para operar en pares de divisas (Forex) y criptomonedas como BTC/USD.
🔹 Instalación y Configuración Inicial
Antes de comenzar, necesitamos instalar la librería oficial de MetaTrader 5 para Python:
pip install MetaTrader5
Luego, importamos la librería en nuestro código y realizamos la conexión con MT5:
import MetaTrader5 as mt5
# Conectar con MT5
if not mt5.initialize():
print("❌ Error al conectar con MetaTrader 5")
mt5.shutdown()
exit()
# Obtener información de la cuenta
account_info = mt5.account_info()
if account_info:
print(f'✅ Conectado a MetaTrader 5. Balance: {account_info.balance}, Margen libre: {account_info.equity}')
else:
print("⚠️ No se pudo obtener la información de la cuenta.")
🔹 Configuración de la Cuenta de Trading
Si necesitas iniciar sesión con una cuenta específica (por ejemplo, una cuenta demo de MetaQuotes), usa:
mt5.login(login=12345678, password='tu_password', server='MetaQuotes-Demo')
Para eliminar cuentas antiguas en la aplicación de escritorio de MT5, puedes ir a:
- “Archivo” → “Abrir una cuenta” y eliminar las cuentas innecesarias.
- Verifica en la pestaña “Navegador” si tienes múltiples cuentas abiertas.
🔹 Obtener Datos de Mercado
Una vez conectados, podemos obtener datos históricos del mercado. Para solicitar datos de EUR/USD o BTC/USD, hacemos:
symbol = "BTCUSD" # Cambiar a "EURUSD" si operas Forex
rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_M1, 0, 100)
import pandas as pd
df = pd.DataFrame(rates)
df['time'] = pd.to_datetime(df['time'], unit='s')
print(df.tail())
Si no obtenemos datos para BTCUSD, es posible que nuestro bróker use un nombre diferente para el activo. Para verificarlo:
symbols = mt5.symbols_get()
print("🔍 Algunos símbolos disponibles en tu bróker:")
print([s.name for s in symbols[:10]]) # Mostrar algunos símbolos
Esto nos ayudará a encontrar el nombre exacto del instrumento financiero.
🔹 Lógica del Bot de Trading
Nuestro bot verificará la media móvil de los últimos 14 minutos y tomará decisiones de compra o venta según el precio de cierre:
import time
import numpy as np
symbol = "BTCUSD"
timeframe = mt5.TIMEFRAME_M1 # 1 minuto
while True:
rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, 14)
if rates is None or len(rates) < 14:
print("⚠️ No se pudo obtener suficientes datos.")
continue
df = pd.DataFrame(rates)
df['time'] = pd.to_datetime(df['time'], unit='s')
df['ma'] = df['close'].rolling(window=14).mean()
last_close = df['close'].iloc[-1]
last_ma = df['ma'].iloc[-1]
print(f"Último cierre: {last_close}, Última media móvil: {last_ma}")
if last_close > last_ma:
print("📈 Señal de compra detectada.")
# Aquí iría el código para abrir una orden de compra
elif last_close < last_ma:
print("📉 Señal de venta detectada.")
# Aquí iría el código para abrir una orden de venta
else:
print("⚠️ No hay señales en esta iteración.")
time.sleep(60) # Esperar 1 minuto antes de la siguiente iteración
Este bot básico permite conectarse a MetaTrader 5, obtener datos y evaluar señales de trading usando una media móvil. Para mejorarlo, podrías:
- Añadir estrategias avanzadas (RSI, MACD, Bollinger Bands, etc.).
- Ejecutar órdenes de compra/venta automáticamente con
mt5.order_send()
. - Manejar múltiples activos y timeframes.
Con esta base, puedes empezar a automatizar tus estrategias de trading en MT5 con Python. 🚀💰