MT5 & Python
BÀI VIẾT · MT5 & PYTHON

MT5 Python API: Cách Kết Nối và Đặt Lệnh Tự Động

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.

Cài đặt thư viện MetaTrader5

Thư viện chính thức để kết nối Python với MT5 được cài qua pip:

pip install MetaTrader5

Yê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).

Khởi tạo kết nối

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 dữ liệu giá

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.

Đặt lệnh giao dịch

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)
⚠️ Luôn kiểm tra: 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.

Các hàm quan trọng khác

  • 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 đã đóng
  • mt5.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

Câu hỏi thường gặp

❓ MT5 Python API có hoạt động 24/7 không cần mở terminal thủ công?
Terminal MT5 cần đang chạy (có thể minimize) để API hoạt động. Trên VPS, terminal chạy liên tục nên bot hoạt động 24/7 miễn VPS không tắt.
❓ Có giới hạn số lệnh gọi API mỗi giây không?
MetaTrader5 Python API không công bố rate limit cụ thể, nhưng nên tránh gọi liên tục trong vòng lặp quá nhanh (dưới 1 giây) để tránh quá tải terminal.

🤖 Muốn AI tự động áp dụng kiến thức này?

Bot SWING-AI và SCALP-AI của chúng tôi áp dụng các nguyên tắc trên để giao dịch vàng tự động 24/7.

Xem Bot Tín Hiệu →