2026-07-08 06:59:21 +00:00
2026-07-08 06:42:57 +00:00
2026-07-08 06:39:49 +00:00
2026-07-08 06:44:30 +00:00
2026-07-08 06:39:49 +00:00
2026-07-08 06:40:13 +00:00

mt5bridge-ccxt

Python 3.8+ License: MIT Code style: black

CCXT-compatible wrapper for the MT5Bridge HTTP API. Use MetaTrader 5 with any CCXT-aware framework — Freqtrade, Jesse, Hummingbot, backtrader, 30+ others.

Why?

Most quant frameworks ship with native broker support (Binance, OKX, Alpaca, IB, …) but not MetaTrader 5. This wrapper exposes MT5 through the standard CCXT interface so that:

  • Freqtrade can backtest and live-trade MT5 with zero changes to your strategy
  • Jesse can connect to MT5
  • Backtrader can use MT5 as a live broker
  • Hummingbot can arbitrage via MT5
  • Your own scripts can use the standard CCXT API

Installation

pip install mt5bridge-ccxt

Or from source:

git clone https://code.aifunny.ltd/gavindiaz/mt5bridge-ccxt.git
cd mt5bridge-ccxt
pip install -e .

Quick Start

import mt5bridge_ccxt

exchange = mt5bridge_ccxt.mt5bridge({
    "apiKey": "your-mt5bridge-api-key",
    "host": "http://localhost:8080",
    "symbols": {
        "XAU/USD": "XAUUSDc",
        "EUR/USD": "EURUSDc",
    },
})

# Check status
print(exchange.fetch_status())

# Fetch ticker
ticker = exchange.fetch_ticker("XAU/USD")
print(f"XAU/USD bid={ticker['bid']} ask={ticker['ask']}")

# Fetch OHLCV
bars = exchange.fetch_ohlcv("XAU/USD", "1h", limit=100)

# Place a market order
order = exchange.create_order(
    "XAU/USD", "market", "buy", 0.01,
    params={"sl": 4170.0, "tp": 4190.0, "magic": 12345}
)

# Read MQL5 indicator signal (e.g. Alpha Trend)
signal = exchange.mql5.alpha_trend_signal("XAUUSDc", "H1")

Features

CCXT method Status MT5Bridge endpoint
fetch_status GET /health
fetch_markets derived from symbols config
fetch_ticker GET /symbols/{s}/tick
fetch_ohlcv GET /rates/from-pos / from-date
fetch_balance GET /account
fetch_positions GET /positions
fetch_open_orders GET /orders
fetch_my_trades GET /history/deals
create_order POST /order/send
cancel_order ⚠️ async via GlobalVariable + helper EA
fetch_order not exposed by MT5Bridge
fetch_order_book not applicable
fetch_trades (realtime) not exposed
set_leverage MT5 manages this

Supported Timeframes

1m, 5m, 15m, 30m, 1h, 4h, 1d

Configuration

Key Type Default Description
apiKey str (required) Your MT5Bridge API key (X-API-Key header)
secret str (unused) Placeholder for CCXT compatibility
host str http://localhost:8080 Base URL of your MT5Bridge service
timeout int 30000 Request timeout in milliseconds
symbols dict {} Map of CCXT symbol → MT5 symbol
default_volume_step float 0.01 Default lot rounding step

Async Cancel / Modify / Close

MT5Bridge does not expose synchronous cancel/modify/close endpoints. To support these, the wrapper writes GlobalVariable commands that the included MQL5 helper EA reads and executes on the MT5 side.

Setup the MQL5 helper EA:

  1. Copy mql5/Mt5BridgeHelper.mq5 to your MT5 MQL5/Experts/ directory.
  2. Compile in MetaEditor (F7).
  3. Drag Mt5BridgeHelper onto any chart in MT5.
  4. Enable Algo Trading.

See mql5/README.md for details.

# Async cancel
exchange.cancel_order("12345")

# Async close
exchange.mql5.send_close_command(ticket=67890, volume=0.01)

Reading MQL5 Indicator Signals

If you have the Alpha Trend indicator loaded on a chart, you can read its signals via the /gvar endpoint:

# Read the indicator's GlobalVariables
signal = exchange.mql5.alpha_trend_signal(
    symbol="XAUUSDc",
    timeframe="H1",
    length=14,
    atr_mult=1.0,
)
# {'alpha': 4180.0, 'offset': 4178.0, 'trend': 1.0, 'buy': 1.0, 'sell': 0.0}

# Read a custom signal key
rsi = exchange.mql5.get("MY_RSI_XAUUSDc_PERIOD_H1")

# List all GlobalVariables
for gv in exchange.mql5.list():
    print(gv["name"], "=", gv["value"])

Examples

Using with Freqtrade

  1. pip install mt5bridge-ccxt
  2. Copy examples/03_freqtrade_config.json to user_data/config.json
  3. Edit API key, host, and symbols
  4. freqtrade trade --config user_data/config.json --strategy YourStrategy

Note

: Freqtrade uses ccxt internally. The wrapper is auto-discovered once the package is installed in the same Python environment.

Running Tests

pip install -e ".[test]"
pytest

Architecture

Freqtrade / Jesse / Your strategy
        |
        v  standard CCXT methods
mt5bridge (this package)
        |
        v  HTTP (X-API-Key)
MT5Bridge (C# .NET 8, your existing project)
        |
        v  MtApi5 client (port 8228)
MtApi5 EA on MT5 chart
        |
        v
MetaTrader 5

Limitations & Caveats

  • Not a real exchange — MT5 is OTC/CFD. exchange.type == "swap".
  • No WebSocket — all data is pulled via polling. Use fetch_ticker / fetch_ohlcv in a loop.
  • No order book / Level 2 — MT5 doesn't expose this via MtApi5.
  • Cancel/modify/close are async — see above.
  • Single account — MT5Bridge exposes one account at a time. The wrapper does not implement fetchAccounts.
  • Markets are not auto-discovered — provide them via the symbols config.

License

MIT — see LICENSE.

  • my-Mt5Bridge — the C# HTTP service this wraps
  • CCXT — the standard library this implements
  • MtApi5 — C# library used by MT5Bridge
S
Description
CCXT-compatible wrapper for MT5Bridge HTTP API. Use MetaTrader 5 with any CCXT-aware framework.
Readme MIT 90 KiB
Languages
Python 89%
MQL5 11%