Docs

Usa la API de MetaTrader 5 en Linux y macOS

Por qué el paquete oficial MetaTrader5 de Python solo funciona en Windows junto a una terminal en marcha, los atajos con Wine, Docker y VPS que se usan en Linux y macOS, y cómo operar cuentas de MT5 por HTTP en su lugar, desde cualquier sistema operativo y cualquier lenguaje.

Si intentaste pip install MetaTrader5 en una Mac o en un servidor Linux, ya conoces el problema del que trata esta página. El paquete oficial está hecho para Windows y se comunica con una terminal de MetaTrader 5 que corre en la misma máquina. Esta guía explica por qué, qué hace la gente al respecto y cómo saltarse el problema por completo operando por HTTP.

Por qué el paquete oficial necesita Windows

La documentación de MetaQuotes describe el paquete como una forma de obtener datos "via interprocessor communication directly from the MetaTrader 5 terminal" (mediante comunicación entre procesos, directamente desde la terminal de MetaTrader 5). No es un cliente de red para el broker: es un puente hacia un proceso de terminal en la misma computadora.

De eso se desprenden dos hechos:

  • Necesita una terminal de MetaTrader 5 en marcha. initialize() "establishes a connection with the MetaTrader 5 terminal" (establece una conexión con la terminal) y recibe la ruta al .exe de la terminal; si hace falta, la terminal se inicia cuando se llama a initialize(). Cada llamada posterior —order_send, positions_get, history_deals_get— pasa por esa terminal.
  • Se publica solo para Windows. En PyPI, los archivos publicados del paquete son wheels de Windows x86-64 (win_amd64); no hay ninguno para Linux ni macOS, así que pip en esos sistemas no encuentra nada que pueda instalar.

Fuentes, revisadas el 30 de septiembre de 2026: MetaTrader5 en PyPI, Python integration, documentación de MQL5, initialize(), documentación de MQL5.

Los atajos que usa la gente

Wine

MetaQuotes publica instrucciones para ejecutar la terminal de MetaTrader 5 en Linux con Wine, con un script de instalación para Ubuntu, Debian, Linux Mint y Fedora, y una página aparte para macOS (MetaTrader 5 on Linux). Eso ejecuta la terminal. Para usar el paquete de Python, además instalas una versión de Python para Windows dentro del mismo prefijo de Wine, instalas MetaTrader5 ahí y ejecutas tu script con ese intérprete.

Un puente entre el Python de Linux y el Python de Wine

Proyectos de código abierto como mt5linux automatizan la segunda mitad: un servidor corre en el Python de Windows dentro de Wine, junto a la terminal, y una biblioteca cliente en tu Python normal de Linux le reenvía cada llamada por RPyC. Tu código importa un módulo que imita la API de MetaTrader5.

Imágenes de Docker

Las imágenes de la comunidad empaquetan Wine, la terminal, un Python de Windows, un puente como el anterior y, a menudo, un servidor VNC para que puedas ver la ventana de la terminal. Hacen que la configuración sea reproducible; no la hacen más pequeña.

Un VPS con Windows

La opción más simple que conserva el paquete oficial: renta una máquina con Windows, instala la terminal, ejecuta tu Python ahí y expón tú mismo lo que necesites al resto de tu sistema.

Lo que todas tienen en común

Cada enfoque ejecuta una terminal de trading de escritorio completa que ahora operas tú:

  • Una terminal por cuenta a la vez. Una terminal tiene la sesión iniciada en una cuenta de trading; operar muchas cuentas a la vez significa ejecutar muchas terminales y llevar la cuenta de cuál es cuál.
  • Una aplicación con interfaz gráfica en un servidor. Espera una pantalla (una virtual con Xvfb o VNC), se actualiza sola y puede detenerse en un diálogo que nadie ve.
  • Mantenerla viva es tu trabajo: reinicios, inicios de sesión después de una desconexión del broker, disco y memoria por terminal, y darte cuenta cuando una se detuvo en silencio.
  • Tu código queda atado a donde corre la terminal, que normalmente no es donde corre el resto de tu aplicación.

Para una cuenta personal en una máquina, eso muchas veces está bien. Para un producto que opera cuentas de otras personas, se convierte en un proyecto de operaciones.

Hacerlo por HTTP en su lugar

fxapis ejecuta las terminales de MetaTrader 5 por ti, en nuestra nube, y te da una API REST. Tu código —en macOS, Linux, Windows, un contenedor, una función serverless, en cualquier lenguaje— hace solicitudes HTTPS:

  • Sin terminal, VPS, Wine ni Expert Advisor de tu lado.
  • Muchas cuentas a la vez, cada una conectada con su login, contraseña y servidor.
  • Una cuenta se pone en línea en unos diez segundos en nuestras pruebas cuando hace falta, y puede desconectarse sola cuando está inactiva.
  • Las órdenes enviadas con un Idempotency-Key se pueden reintentar sin riesgo con la misma clave, y cada orden tiene un resultado registrado; uno que no está claro se confirma con el broker, no se adivina.

La misma operación, de las dos formas

Con el paquete oficial, en Windows, junto a una terminal:

import MetaTrader5 as mt5

mt5.initialize(login=26177561, password="…", server="VantageMarkets-Demo")
tick = mt5.symbol_info_tick("EURUSD")
result = mt5.order_send({
    "action": mt5.TRADE_ACTION_DEAL,
    "symbol": "EURUSD",
    "volume": 0.01,
    "type": mt5.ORDER_TYPE_BUY,
    "price": tick.ask,
    "deviation": 20,
})
print(result.retcode, result.price)
mt5.shutdown()

Con fxapis, desde cualquier lugar:

import os, uuid, requests

API = "https://api.fxapis.com"
s = requests.Session()
s.headers["Authorization"] = f"Bearer {os.environ['FXAPIS_KEY']}"

account = s.post(f"{API}/v1/accounts", json={
    "login": "26177561", "server": "VantageMarkets-Demo",
    "password": os.environ["MT5_PASSWORD"], "mode": "warm_on_demand",
}).json()["data"]                                   # once; keep account["id"]

order = s.post(f"{API}/v1/accounts/{account['id']}/orders/market",
    headers={"Idempotency-Key": str(uuid.uuid4())},
    json={"symbol": "EURUSD", "side": "buy", "volume": "0.01", "deviationPoints": 20},
    timeout=90,
).json()["data"]
print(order["state"], order["filledPrice"], order["retcode"])

La versión de fxapis no necesita precio: una orden de mercado se ejecuta al precio de mercado, y una cuenta en modo warm_on_demand se pone en línea sola para la orden. La cuenta se conecta una sola vez; guarda account["id"]. Para un programa completo con reintentos correctos, consulta la guía de Python, o el mismo programa en Node.js, PHP, C#, Go, Java o Ruby.

Equivalencias de las llamadas del paquete

Paquete MetaTrader5fxapis
initialize(), login()POST /v1/accounts una vez, luego POST /v1/accounts/{id}/warm (o deja que una orden la ponga en línea)
shutdown()POST /v1/accounts/{id}/cool, o nada: las cuentas inactivas se desconectan solas
order_send() con TRADE_ACTION_DEALPOST /v1/accounts/{id}/orders/market
order_send() con TRADE_ACTION_PENDINGPOST /v1/accounts/{id}/orders/pending
order_send() con TRADE_ACTION_SLTPPOST /v1/accounts/{id}/positions/{ticket}/modify
order_send() con TRADE_ACTION_REMOVEPOST /v1/orders/{id}/cancel
Cerrar con un TRADE_ACTION_DEAL opuestoPOST /v1/accounts/{id}/positions/{ticket}/close
positions_get()GET /v1/accounts/{id}/positions
history_deals_get()GET /v1/accounts/{id}/deals
history_orders_get()GET /v1/orders?accountId=…
order_calc_margin(), order_calc_profit()POST /v1/accounts/{id}/calculate
symbol_info_tick(), copy_rates_*(), copy_ticks_*()Sin equivalente; consulta abajo

Algunas diferencias que conviene esperar:

  • Los volúmenes y los precios son strings ("0.01"), no floats, así que ningún tamaño se redondea nunca por un double.
  • Los stops son precios absolutos, como en MT5.
  • Los códigos de retorno se conservan. Cada orden lleva el retcode propio del broker; los errores llevan un code estable como ORDER_REJECTED o SEND_FAILED. Consulta Errores.
  • Las posiciones son una instantánea con marca de tiempo (observedAt), actualizada cada 15 segundos aproximadamente mientras la cuenta está en línea.

Lo que fxapis no reemplaza

fxapis es para operar cuentas y consultar su historial. No transmite precios en streaming ni sirve barras y ticks, así que si tu estrategia calcula señales a partir de datos de mercado de MT5, necesitas una fuente de datos para esa parte. Solo es compatible con MetaTrader 5, no con MetaTrader 4. Para los eventos, usa webhooks en lugar de consultar repetidamente.

Siguientes pasos

En esta página