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