Skip to main content

One post tagged with "ta-lib"

View All Tags

Xây Dựng Bot Giao Dịch Margin Tự Động với Binance, EMA, MACD, ATR và OCO

· 5 min read

1. Giới thiệu

Bài viết này hướng dẫn cách xây dựng một bot giao dịch margin tự động trên sàn Binance sử dụng Python. Bot sử dụng các chỉ báo kỹ thuật phổ biến như EMA, MACD, ATR để xác định điểm vào/ra lệnh, quản lý lệnh với OCO (One Cancels the Other), và ghi log giao dịch lên Google Sheets.


2. Các thành phần chính

  • Binance API: Giao tiếp với sàn để lấy dữ liệu và đặt lệnh.
  • TA-Lib: Tính toán các chỉ báo kỹ thuật (EMA, MACD, ATR).
  • WebSocket: Nhận dữ liệu nến (kline) thời gian thực.
  • Google Sheets: Lưu lại lịch sử giao dịch.
  • Quản lý lệnh OCO: Đặt đồng thời Take Profit và Stop Loss.
  • Margin Trading: Hỗ trợ cả LONG và SHORT với vay tài sản tự động.

3. Hướng dẫn cài đặt môi trường và thư viện

3.1. Cài đặt Python và các thư viện cần thiết

# Cài Python >= 3.8
# Cài pip nếu chưa có

# Cài các thư viện cần thiết
pip install python-binance websocket-client ta-lib numpy gspread oauth2client

Lưu ý:

  • TA-Lib có thể cần cài đặt thêm thư viện hệ thống (trên Windows: download binary, trên Ubuntu: sudo apt install ta-lib).
  • Tạo file binanceconfig.py chứa API_KEY và API_SECRET của bạn.

3.2. Ví dụ file cấu hình binanceconfig.py

API_KEY = "YOUR_BINANCE_API_KEY"
API_SECRET = "YOUR_BINANCE_API_SECRET"

4. Luồng hoạt động tổng quát

  1. Kết nối WebSocket để nhận dữ liệu nến mới nhất.
  2. Tính toán EMA, MACD, ATR trên dữ liệu lịch sử.
  3. Xác định tín hiệu vào lệnh dựa trên giao cắt MACD và xu hướng EMA.
  4. Tự động đặt lệnh margin (LONG/SHORT) khi có tín hiệu.
  5. Đặt lệnh OCO để quản lý Take Profit và Stop Loss.
  6. Theo dõi và cập nhật lệnh: Dời Stop Loss theo ATR, kiểm tra trạng thái lệnh.
  7. Ghi log giao dịch lên Google Sheets.
  8. Tự động trả nợ khi đóng lệnh SHORT.

5. Sơ đồ luồng hoạt động

Sơ đồ luồng hoạt động bot giao dịch margin Binance

flowchart TD
A[Kết nối WebSocket] --> B{Nhận nến mới}
B -->|Nến đóng| C[Tính EMA, MACD, ATR]
C --> D{Tín hiệu vào lệnh?}
D -->|Có| E[Đặt lệnh Margin + OCO]
D -->|Không| B
E --> F[Theo dõi lệnh, dời SL]
F --> G{TP/SL khớp?}
G -->|Có| H[Ghi log, trả nợ (nếu SHORT)]
G -->|Không| F
H --> B

6. Giải thích chi tiết từng hàm trong code

6.1. Hàm on_open, on_close

  • on_open(ws): In ra thông báo khi kết nối WebSocket được mở.
  • on_close(ws, status, message): In ra thông báo khi kết nối WebSocket đóng.

6.2. Hàm round_decimals_upmin_LOT_SIZE

  • round_decimals_up(number, decimals): Làm tròn số lên với số chữ số thập phân xác định.
  • min_LOT_SIZE(symbol, quantity): Lấy bước khối lượng tối thiểu cho từng cặp giao dịch, đảm bảo lệnh hợp lệ với sàn.

6.3. Hàm on_message

  • Nhận dữ liệu nến mới từ WebSocket.
  • Khi nến đóng, cập nhật dữ liệu, tính toán EMA, MACD, ATR.
  • Kiểm tra tín hiệu giao cắt MACD và xu hướng EMA để xác định vào lệnh LONG/SHORT.
  • Đặt lệnh margin và lệnh OCO (TP/SL) tương ứng.
  • Dời Stop Loss động theo ATR nếu giá đi đúng hướng.
  • Kiểm tra trạng thái lệnh, tự động trả nợ khi đóng lệnh SHORT.
  • Ghi log giao dịch lên Google Sheets.

6.4. Các hàm liên quan đến Binance API

  • client.klines: Lấy dữ liệu nến lịch sử.
  • client.new_margin_order: Đặt lệnh margin (BUY/SELL).
  • client.new_margin_oco_order: Đặt lệnh OCO (TP/SL).
  • client.margin_borrow: Vay coin để SHORT.
  • client.margin_repay: Trả nợ coin khi đóng lệnh SHORT.
  • client.cancel_margin_oco_order: Hủy lệnh OCO cũ khi dời SL.
  • client.margin_order: Kiểm tra trạng thái lệnh TP/SL.

6.5. Ghi log Google Sheets

  • gsheets_append_trade: Ghi thông tin giao dịch lên Google Sheets để theo dõi lịch sử.

7. Best Practices & Lưu ý khi vận hành bot

  • Bảo mật API: Không commit file API lên Git, dùng biến môi trường.
  • Quản lý vốn: Chỉ giao dịch với số vốn nhỏ, kiểm soát rủi ro.
  • Kiểm tra kỹ thuật: Test kỹ trên tài khoản demo trước khi chạy thật.
  • Xử lý lỗi mạng/API: Bổ sung try/except, log lỗi để bot không dừng đột ngột.
  • Theo dõi log: Luôn kiểm tra log giao dịch để phát hiện bất thường.
  • Cập nhật thư viện: Đảm bảo các thư viện luôn ở phiên bản ổn định.

8. Kết luận

Bot này là ví dụ thực tế về tự động hóa giao dịch margin với Python, Binance API và các chỉ báo kỹ thuật. Bạn có thể mở rộng thêm các chiến lược, quản lý vốn, hoặc tích hợp thêm cảnh báo Telegram, Discord...


Lưu ý:

  • Đoạn mã chỉ mang tính chất tham khảo, không phải lời khuyên đầu tư.
  • Hãy kiểm tra kỹ và thử nghiệm trên tài khoản demo trước khi áp dụng thực tế.

Nếu bạn cần giải thích chi tiết hơn hoặc muốn mở rộng thêm chức năng nào, hãy để lại bình luận nhé!