Skip to main content

3 posts tagged with "trading"

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

Lấy Dữ liệu OHLC từ 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 để lấy dữ liệu OHLC từ nền tảng MetaTrader 5 (MT5) bằng thư viện MetaTrader5.

Mã nguồn

import MetaTrader5 as mt5
from datetime import datetime
import pandas as pd

# Kết nối tới MetaTrader 5
if not mt5.initialize():
print("Khởi tạo MT5 không thành công")
mt5.shutdown()

symbol = 'EURUSD.sml'
from_date_str = datetime.strptime('2025-03-01', '%Y-%m-%d')
to_date_str = datetime.strptime('2025-03-05', '%Y-%m-%d')
timeframe = mt5.TIMEFRAME_M1

# Lấy dữ liệu OHLC cho cặp tiền symbol trong khoảng thời gian đã xác định
ohlc_data = mt5.copy_rates_range(symbol, timeframe, from_date_str, to_date_str)
print('OHLC_Data')
print(ohlc_data)

Giải thích

  1. Khởi tạo kết nối MT5

    • mt5.initialize(): Kết nối với nền tảng MetaTrader 5.
    • Nếu không thành công, chương trình sẽ thoát.
  2. Xác định tham số

    • symbol: Cặp tiền tệ cần lấy dữ liệu (EURUSD.sml).
    • from_date_strto_date_str: Khoảng thời gian cần lấy dữ liệu.
    • timeframe: Khung thời gian (M1 - 1 phút).
  3. Lấy dữ liệu OHLC

    • mt5.copy_rates_range(symbol, timeframe, from_date_str, to_date_str): Truy vấn dữ liệu giá.
    • In dữ liệu nhận được.

Cải tiến

Chuyển đổi dữ liệu sang Pandas DataFrame

if ohlc_data is not None and len(ohlc_data) > 0:
df = pd.DataFrame(ohlc_data)
print(df.head())
else:
print("Không có dữ liệu OHLC")

Xử lý lỗi khi lấy dữ liệu

if ohlc_data is None:
print("Lỗi: Không thể lấy dữ liệu OHLC từ MT5")

Lưu dữ liệu vào CSV để phân tích sau

df.to_csv("ohlc_data.csv", index=False)
print("Dữ liệu đã được lưu vào ohlc_data.csv")

📌 Tham khảo thêm: Tài liệu MetaTrader5 Python API

So sánh các thuật toán Machine Learning trong dự đoán giá cổ phiếu

· 5 min read
AI & Data Science

1. Giới thiệu

Dự đoán giá cổ phiếu là một bài toán phức tạp do thị trường tài chính có tính chất phi tuyến và biến động cao. Việc áp dụng Machine Learning giúp cải thiện độ chính xác so với các phương pháp truyền thống. Trong bài viết này, chúng ta sẽ so sánh các thuật toán phổ biến, gồm:

  • Hồi quy tuyến tính (Linear Regression)
  • Mô hình ARIMA
  • Random Forest
  • Support Vector Machine (SVM)
  • Mạng nơ-ron nhân tạo (Neural Networks)
  • LSTM (Long Short-Term Memory)

2. Các thuật toán Machine Learning phổ biến

2.1. Hồi quy tuyến tính (Linear Regression)

🔹 Đặc điểm:

  • Dễ triển khai và hiểu rõ.
  • Hiệu quả khi dữ liệu có xu hướng tuyến tính.
  • Nhạy cảm với dữ liệu nhiễu.

🔹 Khi nào nên dùng?

  • Khi dữ liệu có quan hệ tuyến tính giữa giá cổ phiếu và các yếu tố đầu vào như khối lượng giao dịch, chỉ báo kỹ thuật.

2.2. Mô hình ARIMA

🔹 Đặc điểm:

  • Tốt trong việc mô hình hóa chuỗi thời gian.
  • Phụ thuộc nhiều vào tính dừng (stationarity) của dữ liệu.
  • Không tận dụng tốt các đặc trưng phi tuyến.

🔹 Khi nào nên dùng?

  • Khi dữ liệu có tính chất chuỗi thời gian rõ ràng, đặc biệt là trong phân tích kỹ thuật.

2.3. Random Forest

🔹 Đặc điểm:

  • Kết hợp nhiều cây quyết định giúp giảm overfitting.
  • Không yêu cầu giả định tuyến tính như hồi quy tuyến tính.
  • Tốc độ dự đoán nhanh nhưng có thể chậm khi huấn luyện.

🔹 Khi nào nên dùng?

  • Khi có nhiều biến đầu vào và muốn giảm thiểu hiện tượng overfitting.

2.4. Support Vector Machine (SVM)

🔹 Đặc điểm:

  • Tốt trong việc phân tách dữ liệu phi tuyến tính.
  • Hoạt động hiệu quả với dữ liệu có kích thước nhỏ.
  • Không phù hợp với tập dữ liệu lớn do tính toán phức tạp.

🔹 Khi nào nên dùng?

  • Khi dữ liệu có cấu trúc phức tạp nhưng số lượng không quá lớn.

2.5. Mạng nơ-ron nhân tạo (Neural Networks)

🔹 Đặc điểm:

  • Khả năng học phi tuyến tốt.
  • Cần nhiều dữ liệu để tránh overfitting.
  • Quá trình huấn luyện tốn tài nguyên tính toán.

🔹 Khi nào nên dùng?

  • Khi muốn tìm mối quan hệ phi tuyến giữa các yếu tố tác động đến giá cổ phiếu.

2.6. LSTM (Long Short-Term Memory)

🔹 Đặc điểm:

  • Tốt trong việc học các mẫu chuỗi thời gian dài hạn.
  • Giảm thiểu vấn đề vanishing gradient.
  • Tốn tài nguyên tính toán và cần nhiều dữ liệu để tối ưu hóa.

🔹 Khi nào nên dùng?

  • Khi cần dự đoán giá cổ phiếu dựa trên dữ liệu lịch sử dài hạn.

3. So sánh các thuật toán

Thuật toánMô hình hóa tuyến tínhKhả năng học phi tuyếnTốt với chuỗi thời gianKhả năng overfittingHiệu quả với dữ liệu lớn
Hồi quy tuyến tínhThấpCao
ARIMAThấpTrung bình
Random ForestTrung bìnhTrung bình
SVMCaoThấp
Neural NetworksCaoTrung bình
LSTMCaoThấp

4. Kết luận

Không có thuật toán nào là tối ưu nhất cho tất cả các trường hợp. Dưới đây là một số gợi ý:

  • Nếu dữ liệu có tính chất tuyến tính → Dùng Hồi quy tuyến tính.
  • Nếu dữ liệu có tính chất chuỗi thời gian rõ ràng → Dùng ARIMA.
  • Nếu muốn một mô hình mạnh mẽ, giảm overfitting → Dùng Random Forest.
  • Nếu dữ liệu phi tuyến tính và có tập dữ liệu nhỏ → Dùng SVM.
  • Nếu có dữ liệu lớn và muốn khai thác phi tuyến → Dùng Neural Networks.
  • Nếu muốn tận dụng lịch sử giá cổ phiếu → Dùng LSTM.

Để đạt hiệu quả tối ưu, bạn có thể kết hợp nhiều mô hình với nhau hoặc thử nghiệm để tìm thuật toán phù hợp nhất. 🚀

📌 Bạn quan tâm đến việc xây dựng mô hình AI giao dịch tự động? Đừng bỏ lỡ Webinar 24: AI + Giao dịch định lượng do Tiến sĩ Đặng Anh Tuấn hướng dẫn!


📝 Xem thêm các bài viết khác: