Skip to main content

One post tagged with "order"

View All Tags

Đặt Lệnh Mua trên MetaTrader 5 bằng Python

· 2 min read

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

  1. 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.
  2. 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.
  3. 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