Files
XauBot/docs/arsitektur-ai/16-MT5-Connector.md
T
GifariKemalandClaude Opus 4.6 a240d974f6 docs: add architecture documentation for remaining 8 components (16-23)
New documentation files:
- 16-MT5-Connector: Broker bridge with auto-reconnect & Polars native
- 17-Configuration: 6 sub-configs with capital mode auto-adjustment
- 18-Trade-Logger: Dual storage (PostgreSQL + CSV), thread-safe
- 19-Position-Manager: 7 action conditions, trailing SL, market close handler
- 20-Risk-Engine: Kelly Criterion sizing, circuit breaker, order validation
- 21-Database: PostgreSQL integration with 6 repositories
- 22-Train-Models: Initial training script (HMM + XGBoost)
- 23-Main-Live-Orchestrator: Main loop coordinating 15+ components

Updated README.md with complete index of all 23 components.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 09:17:20 +07:00

4.8 KiB

MT5 Connector — Jembatan ke MetaTrader 5

File: src/mt5_connector.py Class: MT5Connector, MT5SimulationConnector Library: MetaTrader5 (Python API)


Apa Itu MT5 Connector?

MT5 Connector adalah jembatan komunikasi antara bot AI dan terminal MetaTrader 5. Semua interaksi dengan broker — ambil data harga, kirim order, cek posisi — dilakukan melalui modul ini.

Analogi: MT5 Connector seperti penerjemah di bandara — menerjemahkan perintah bot (Python) ke bahasa yang dipahami broker (MT5 API), dan sebaliknya.


Fungsi Utama

Method Fungsi Return
connect() Koneksi ke MT5 terminal bool
disconnect() Putus koneksi -
reconnect() Reconnect otomatis bool
ensure_connected() Cek & auto-reconnect bool
get_market_data() Ambil data OHLCV pl.DataFrame
get_tick() Ambil harga real-time TickData
send_order() Kirim order BUY/SELL OrderResult
close_position() Tutup posisi OrderResult
get_open_positions() Cek posisi terbuka pl.DataFrame
get_symbol_info() Info simbol (spread, dll) Dict

Koneksi & Auto-Reconnect

connect(max_retries=3)
    |
    v
Shutdown koneksi lama (jika ada)
    |
    v
mt5.initialize(login, password, server)
    |
    v
Tunggu 2 detik (stabilisasi terminal)
    |
    v
Verifikasi: terminal_info() != None?
    |
    ├── Ya → Cek terminal.connected?
    │         ├── Ya → ✅ Connected!
    │         └── Tidak → Tunggu 3 detik → Retry
    │
    └── Tidak → Exponential backoff (2s, 4s, 8s) → Retry

Auto-Reconnect

ensure_connected():
    """
    Dipanggil sebelum setiap operasi penting.

    1. Cek flag _connected
    2. Coba mt5.account_info()
    3. Gagal? → reconnect()
    4. Max 5 attempts, lalu cooldown 60 detik
    """

Data Fetching (Polars Native)

get_market_data(symbol="XAUUSD", timeframe="M15", count=200)

Proses:

MT5 Terminal
    |
    v
mt5.copy_rates_from_pos() → numpy structured array
    |
    v
LANGSUNG ke Polars DataFrame (TANPA Pandas)
    |
    v
Cast types:
├── time: Unix timestamp → Datetime
├── open/high/low/close: Float64
├── tick_volume → volume (Int64)
└── spread, real_volume: Int64
    |
    v
Return pl.DataFrame

Kolom output:

Kolom Tipe Keterangan
time Datetime Waktu candle
open Float64 Harga buka
high Float64 Harga tertinggi
low Float64 Harga terendah
close Float64 Harga tutup
volume Int64 Tick volume
spread Int64 Spread
real_volume Int64 Real volume

Order Execution

send_order(
    symbol="XAUUSD",
    order_type="BUY",     # atau "SELL"
    volume=0.01,          # Lot size
    sl=4937.00,           # Stop Loss
    tp=4976.00,           # Take Profit
    deviation=20,         # Max slippage (points)
    magic=123456,         # Bot ID
    comment="AI Bot",
    max_retries=3,
)

Retry Logic:

Kirim order
    |
    ├── RETCODE 10009 (DONE) → ✅ Success
    |
    ├── RETCODE 10013-10016 (INVALID) → ❌ Non-retryable
    |
    ├── RETCODE 10027 (TRADE DISABLED) → ❌ Raise error
    |
    └── RETCODE lain (requote/reject) → 🔄 Retry (max 3x)

Timeframe Mapping

String MT5 Constant Penggunaan
M1 TIMEFRAME_M1 1 menit
M5 TIMEFRAME_M5 5 menit
M15 TIMEFRAME_M15 Utama (execution)
M30 TIMEFRAME_M30 30 menit
H1 TIMEFRAME_H1 1 jam
H4 TIMEFRAME_H4 Trend analysis
D1 TIMEFRAME_D1 1 hari

Error Codes

Code Nama Aksi
10009 DONE Order berhasil
10004 REQUOTE Retry
10006 REJECT Retry
10013 INVALID Stop, order salah
10014 INVALID_VOLUME Stop, lot salah
10015 INVALID_PRICE Stop, harga salah
10016 INVALID_STOPS Stop, SL/TP salah
10027 TRADE_DISABLED AutoTrading off
-10003 NO_CONNECTION Reconnect
-10004 NO_IPC Reconnect

Simulation Mode

class MT5SimulationConnector(MT5Connector):
    """
    Untuk testing tanpa MT5 terminal.

    - connect() selalu berhasil
    - get_market_data() generate data sintetis (random walk)
    - Base price XAUUSD: $2000
    """

Konfigurasi Koneksi

MT5Connector(
    login=12345678,                    # Dari .env MT5_LOGIN
    password="password123",            # Dari .env MT5_PASSWORD
    server="BrokerServer-Live",        # Dari .env MT5_SERVER
    path="C:/Program Files/MT5/...",   # Dari .env MT5_PATH (opsional)
    timeout=60000,                     # 60 detik timeout
)