Metatrader 5 & Python

20 de diciembre de 2024

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. 🚀💰