Hướng dẫn chi tiết dùng thư viện MetaTrader5 trong Python: kết nối terminal, lấy giá, đặt lệnh, quản lý SL/TP tự động.
Thư viện chính thức để kết nối Python với MT5 được cài qua pip:
pip install MetaTrader5Yêu cầu: terminal MT5 đã được cài đặt trên cùng máy (hoặc VPS) và đã đăng nhập vào một tài khoản (demo hoặc thật).
Bước đầu tiên trong mọi bot là khởi tạo kết nối tới terminal đang chạy:
import MetaTrader5 as mt5
if not mt5.initialize():
print('Kết nối thất bại:', mt5.last_error())
quit()Hàm initialize() tự động tìm terminal MT5 đang mở trên máy. Nếu có nhiều terminal, có thể chỉ định đường dẫn cụ thể qua tham số path.
Lấy giá hiện tại (bid/ask):
tick = mt5.symbol_info_tick('XAUUSD')
print(tick.bid, tick.ask)Lấy dữ liệu nến lịch sử (OHLC) — nền tảng cho mọi phân tích kỹ thuật:
rates = mt5.copy_rates_from_pos('XAUUSD', mt5.TIMEFRAME_M15, 0, 100)Lệnh trên lấy 100 cây nến M15 gần nhất, trả về mảng numpy với các trường time, open, high, low, close, tick_volume.
Gửi lệnh market order cơ bản:
request = {
'action': mt5.TRADE_ACTION_DEAL,
'symbol': 'XAUUSD',
'volume': 0.01,
'type': mt5.ORDER_TYPE_BUY,
'price': mt5.symbol_info_tick('XAUUSD').ask,
'sl': entry_price - stop_distance,
'tp': entry_price + tp_distance,
'magic': 123456,
'comment': 'python bot'
}
result = mt5.order_send(request)result.retcode == mt5.TRADE_RETCODE_DONE để xác nhận lệnh thành công trước khi tiếp tục xử lý logic.mt5.positions_get() — lấy danh sách lệnh đang mởmt5.orders_get() — lấy danh sách lệnh chờ (pending)mt5.history_deals_get() — lấy lịch sử giao dịch đã đóngmt5.symbol_info() — lấy thông tin symbol (tick_value, tick_size, digits) — quan trọng cho tính lot size chính xác, xem Position Sizing qua MT5 API