⬡ API · ADA KODE · BACA 14 MENIT

API MetaTrader 5 dengan Python: otomatiskan B3 Brasil dan Forex.

Jembatan yang menghubungkan fleksibilitas Python dengan terminal MT5. Tarik data dari B3, hitung sinyal pakai library favorit Anda, dan kirim order — semuanya lewat kode. Lengkap dengan contoh.

Oleh Tim RoboTraderIA· diperbarui Mei 2026· level menengah ke atas

MQL5 (bahasa native MetaTrader) memang powerful, tapi ekosistem Python tak tertandingi: pandas, numpy, scikit-learn, library indikator siap pakai. Library resmi MetaTrader5 menyatukan yang terbaik dari keduanya — Python untuk berpikir, MT5 untuk mengeksekusi. Dan yang paling penting buat Anda: ini cara paling terjangkau untuk mengotomatiskan B3 Brasil (mini indeks dan mini dolar) dengan Python.

Cara kerja jembatannya: library MetaTrader5 bukan API web yang berdiri sendiri. Dia menghubungkan script Python Anda ke terminal MT5 yang terinstal dan terbuka di Windows. Python mengirim perintah, MT5 mengeksekusi di broker. Anggap MT5 sebagai "mesin" dan Python sebagai "otak".

01Instalasi dan prasyarat

Yang Anda butuhkan: Windows, terminal MT5 dari broker Anda yang sudah terinstal dan login, serta Python 3.11+. Lalu:

pip install MetaTrader5 pandas

Soal sistem operasi: library ini resmi hanya untuk Windows, karena bergantung pada terminal MT5. Bisa dijalankan lewat Wine di Linux atau (yang paling umum untuk bot 24/5) di VPS Windows. Di Mac, lewat virtual machine. Untuk otomasi yang serius, VPS Windows adalah jalannya.

02Koneksi ke terminal

Dengan MT5 terbuka dan sudah login ke akun Anda (pakai akun demo!), inisialisasi koneksinya:

# conectar.py
import MetaTrader5 as mt5

# inisialisasi koneksi ke terminal MT5 yang sedang terbuka
if not mt5.initialize():
    print("Falha ao conectar:", mt5.last_error())
    quit()

# info akun (pastikan ini akun DEMO)
conta = mt5.account_info()
print(f"Conta: {conta.login} | Saldo: {conta.balance} | Servidor: {conta.server}")

# selalu tutup koneksi setelah selesai
# mt5.shutdown()

Kalau Anda perlu login lewat kode (bukan manual di terminal), kirim kredensial ke initialize:

mt5.initialize(login=12345678, password="sua_senha", server="NomeDoServidor-Demo")

03Menarik candle (termasuk dari B3)

Di sinilah semuanya nyambung dengan indikator Anda. Tarik candle dari aset apa pun yang ditawarkan broker Anda — termasuk WIN dan WDO kalau broker itu memberi akses ke B3 Brasil:

# dados.py
import MetaTrader5 as mt5
import pandas as pd
from datetime import datetime

mt5.initialize()

# simbol: mis. "WIN$N" (mini indeks), "WDO$N" (mini dolar) atau "EURUSD"
# nama simbol persisnya beda-beda tiap broker — cek di Market Watch
simbolo = "WIN$N"
timeframe = mt5.TIMEFRAME_M5   # M1, M5, M15, H1, dst.

# ambil 500 candle terakhir
rates = mt5.copy_rates_from_pos(simbolo, timeframe, 0, 500)
df = pd.DataFrame(rates)
df["time"] = pd.to_datetime(df["time"], unit="s")
print(df[["time","open","high","low","close","tick_volume"]].tail())

Tips soal simbol B3: nama persisnya (misal: WIN$N, WINFUT, WDO$N) berbeda-beda antar broker. Buka Market Watch di MT5, klik kanan → "Show all", lalu salin nama persis yang muncul. Pakai mt5.symbol_select(simbolo, True) untuk memastikan simbolnya aktif.

04Menghitung sinyal dengan indikator Anda

Di sini Python bersinar — pakai fungsi indikator yang sudah Anda pelajari di panduan-panduan kami. DataFrame dari MT5 langsung bisa dipakai:

# pakai ulang fungsi dari panduan indikator
from indicadores import calcular_rsi, calcular_macd   # modul kamu

df["rsi"] = calcular_rsi(df["close"])
macd, sinal, hist = calcular_macd(df["close"])

# contoh sinyal gabungan
u = df.iloc[-1]
sinal_compra = (u["rsi"] < 70) and (macd.iloc[-1] > sinal.iloc[-1])

Terhubung dengan semua yang sudah Anda pelajari: fungsi RSI, MACD, ATR dari panduan kami langsung jalan di DataFrame ini. Itulah enaknya pakai Python: seluruh ekosistemnya tersedia untuk B3.

05Mengirim order

Mengirim order di MT5 lebih bertele-tele dibanding di Binance, karena Anda harus menyusun "request" yang detail. Contoh beli di market dengan stop dan target:

# executar.py
def comprar(simbolo, lote, stop_pts, alvo_pts):
    info = mt5.symbol_info_tick(simbolo)
    preco = info.ask
    point = mt5.symbol_info(simbolo).point

    request = {
        "action": mt5.TRADE_ACTION_DEAL,
        "symbol": simbolo,
        "volume": lote,
        "type": mt5.ORDER_TYPE_BUY,
        "price": preco,
        "sl": preco - stop_pts * point,   # stop loss
        "tp": preco + alvo_pts * point,   # take profit
        "deviation": 20,                   # slippage yang ditoleransi
        "magic": 123456,                  # id bot kamu
        "type_filling": mt5.ORDER_FILLING_FOK,
    }
    resultado = mt5.order_send(request)
    if resultado.retcode != mt5.TRADE_RETCODE_DONE:
        print("Erro na ordem:", resultado.retcode, resultado.comment)
    return resultado

Detail yang sering bikin pemula mentok: soal type_filling (mode eksekusi) harus cocok dengan yang diterima aset tersebut — FOK, IOC, atau RETURN. Kalau order gagal dengan error "filling", coba mode yang lain. magic number menandai order milik bot Anda (berguna supaya Anda hanya mengelola order sendiri).

Sudah paham struktur sebuah bot?

Lihat panduan lengkap arsitektur bot — logika yang sama dari tutorial Binance kami juga berlaku di MT5.

Lihat arsitektur →

06Mengelola posisi

Untuk bot yang lengkap, Anda perlu bisa mengecek dan menutup posisi:

# cek posisi terbuka milik bot kamu (lewat magic)
posicoes = mt5.positions_get(symbol="WIN$N")
for p in posicoes:
    if p.magic == 123456:
        print(f"Posição {p.ticket}: lucro {p.profit}")

# menutup satu posisi
def fechar(posicao):
    tick = mt5.symbol_info_tick(posicao.symbol)
    request = {
        "action": mt5.TRADE_ACTION_DEAL,
        "symbol": posicao.symbol,
        "volume": posicao.volume,
        "type": mt5.ORDER_TYPE_SELL if posicao.type == 0 else mt5.ORDER_TYPE_BUY,
        "position": posicao.ticket,
        "price": tick.bid if posicao.type == 0 else tick.ask,
        "deviation": 20,
        "type_filling": mt5.ORDER_FILLING_FOK,
    }
    return mt5.order_send(request)

07Loop utama bot

Digabungkan semuanya, ini kerangka bot MT5:

import time

mt5.initialize()
try:
    while True:
        df = puxar_candles("WIN$N", mt5.TIMEFRAME_M5)
        sinal = calcular_sinal(df)              # strategi kamu
        atr = calcular_atr(df).iloc[-1]        # stop dinamis

        if sinal == "COMPRA" and not tem_posicao():
            lote = dimensionar(atr)             # manajemen risiko
            comprar("WIN$N", lote, stop_pts=2*atr, alvo_pts=4*atr)

        time.sleep(60)                       # cek tiap menit
except Exception as e:
    print("Erro:", e)
finally:
    mt5.shutdown()

Sebelum pakai uang sungguhan: jalankan di akun demo selama berminggu-minggu. Pastikan simbol, type_filling , dan perhitungan lot sudah benar untuk aset Anda. Salah volume atau salah point bisa mengirim order dengan ukuran yang keliru. Tes, tes, tes — baru setelah itu akun real, dengan lot minimum.

08Pertanyaan yang sering diajukan

Bisakah B3 diotomatiskan dengan Python?

Bisa. Library resmi MetaTrader5 terhubung ke terminal MT5, dan kalau broker Anda menyediakan MT5 dengan akses ke B3 (WIN, WDO), Anda bisa menarik data dan mengirim order lewat Python. Ini cara paling terjangkau untuk mengotomatiskan pasar Brasil dengan Python.

Apakah MT5 harus terinstal?

Ya. Library ini bukan API web — dia jembatan ke terminal MT5 yang terinstal dan terbuka di Windows. Python mengirim perintah, MT5 mengeksekusi di broker.

Apakah jalan di Linux atau Mac?

Resminya hanya Windows. Bisa dijalankan lewat Wine di Linux atau di VPS Windows (paling umum untuk bot 24/5). Di Mac, lewat virtual machine. Untuk operasi yang serius, VPS Windows.

Apa bedanya dengan langsung pakai MQL5?

MQL5 berjalan di dalam MT5 dan lebih terintegrasi untuk eksekusi murni. Python lewat API unggul di ekosistemnya (pandas, ML, berbagai library). Banyak orang pakai Python untuk riset/sinyal dan MQL5 untuk eksekusi yang kritis. Untuk memulai, Python lebih mudah.

Kenapa nama simbol WIN tidak berfungsi?

Nama persisnya berbeda-beda per broker (WIN$N, WINFUT, WIN$, dll.). Buka Market Watch di MT5, tampilkan semua simbol, lalu salin nama persisnya. Pakai mt5.symbol_select(nama, True) untuk mengaktifkannya.

Baca juga

🎁 Dapatkan bot trading gratis (dengan API Quotex, Deriv, dan IQ Option)

Bot open source + kode API siap pakai. Anda tinggal mengeditnya sambil mengobrol dengan ChatGPT/Claude — tanpa perlu coding. Gratis, tanpa spam.

👉 Sudah mau bot yang siap pakai? Kunjungi botbinaryoptions.com →