Đặt Lệnh Mua trên MetaTrader 5 bằng Python
Giới thiệu
Bài viết này hướng dẫn cách sử dụng Python để đặt lệnh mua (BUY) trên MetaTrader 5 (MT5) bằng thư viện MetaTrader5
.
Mã nguồn
# Hàm để đặt một lệnh mua
import MetaTrader5 as mt5
import math
# Kết nối tới MetaTrader 5
if not mt5.initialize(login=login, password=password, server=server):
print("Initialize() failed, error code =", mt5.last_error())
quit()
else:
symbol = 'EURUSD.sml'
lot = 0.01 # Số lượng lô mua
if not mt5.symbol_select(symbol, True):
print(f"Failed to select {symbol}, error code =", mt5.last_error())
quit()
symbol_info = mt5.symbol_info(symbol)
if symbol_info is None:
print(f"{symbol} not found")
point = symbol_info.point
price = mt5.symbol_info_tick(symbol).ask
deviation = 20 # Độ lệch giá cho phép
request = {
"action": mt5.TRADE_ACTION_DEAL,
"symbol": symbol,
"volume": lot,
"type": mt5.ORDER_TYPE_BUY,
"price": price,
"sl": price - 0.01, # Dừng lỗ (Stop Loss)
"tp": price + 0.02, # Chốt lời (Take Profit)
"deviation": deviation,
"magic": 234000,
"comment": "Autotrading K10",
"type_time": mt5.ORDER_TIME_GTC,
"type_filling": mt5.ORDER_FILLING_FOK,
}
result = mt5.order_send(request)
if result.retcode != mt5.TRADE_RETCODE_DONE:
print("Failed to send order :", result.retcode, result._asdict())
else:
print("Order placed BUY successfully!")
print(result)
# Đóng kết nối với MT5
mt5.shutdown()
Giải thích
-
Khởi tạo kết nối với MT5
mt5.initialize(login, password, server)
: Kết nối với tài khoản giao dịch.- Nếu kết nối thất bại, chương trình thoát.
-
Xác định tham số giao dịch
symbol
: Cặp tiền tệ (EURUSD.sml
).lot
: Khối lượng lệnh mua (0.01
).price
: Giá mua theo giá ask.sl
,tp
: Thiết lập dừng lỗ (Stop Loss) và chốt lời (Take Profit).deviation
: Độ lệch giá cho phép.
-
Gửi lệnh mua
mt5.order_send(request)
: Gửi lệnh đến MT5.- Kiểm tra kết quả trả về.
- Nếu lệnh được thực hiện thành công, in thông tin giao dịch.
Cải tiến
✅ Xử lý lỗi khi không có dữ liệu giá
if price is None:
print("Không thể lấy giá hiện tại của", symbol)
mt5.shutdown()
quit()
✅ Thêm tính năng kiểm tra số dư trước khi đặt lệnh
account_info = mt5.account_info()
if account_info is not None and account_info.balance < lot * price:
print("Số dư không đủ để đặt lệnh")
mt5.shutdown()
quit()
✅ Ghi log giao dịch vào file CSV để theo dõi
import csv
with open("trade_log.csv", "a", newline="") as file:
writer = csv.writer(file)
writer.writerow([symbol, lot, price, "BUY", result.retcode])
📌 Tham khảo thêm: Tài liệu MetaTrader5 Python API