Skip to main content

Tự Động Hóa Chiến Lược Giao Dịch với Python: schedule vs while True

· 4 min read
ChatGPT

🔥 Giới thiệu

Tự động hóa là một yếu tố quan trọng trong giao dịch định lượng (quantitative trading). Việc lên lịch trình thực hiện các lệnh giao dịch hoặc thu thập dữ liệu tài chính một cách tự động giúp giảm thiểu sai sót, tiết kiệm thời gian và tối ưu chiến lược.

Trong Python, có hai phương pháp phổ biến để tự động hóa chiến lược giao dịch theo khung thời gian (timeframe):

  1. Sử dụng thư viện schedule - Thích hợp để chạy nhiệm vụ theo lịch trình cố định.
  2. Sử dụng vòng lặp while True + time.sleep() - Phù hợp khi cần linh hoạt kiểm soát thời gian chạy.

📌 1. Tự động hóa với schedule

Thư viện schedule giúp lập lịch chạy các tác vụ mà không cần vòng lặp vô hạn, giúp tiết kiệm tài nguyên.

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

pip install schedule

✅ Ví dụ: Lấy dữ liệu giá cổ phiếu mỗi 5 phút

import schedule
import time
import yfinance as yf

def fetch_stock_data():
stock = yf.Ticker("AAPL")
price = stock.history(period="1m")["Close"].iloc[-1]
print(f"[{time.strftime('%H:%M:%S')}] Giá AAPL: {price:.2f} USD")

# Lên lịch chạy mỗi 5 phút
schedule.every(5).minutes.do(fetch_stock_data)

while True:
schedule.run_pending()
time.sleep(1)

👉 Ưu điểm: Code dễ đọc, không chiếm CPU nhiều.
👉 Nhược điểm: Không phù hợp nếu cần kiểm soát thời gian thực.


📌 2. Tự động hóa với while True + time.sleep()

Dùng vòng lặp while True giúp linh hoạt hơn, nhưng cần tối ưu để tránh quá tải CPU.

✅ Ví dụ: Lấy dữ liệu giá cổ phiếu mỗi 30 giây

import time
import yfinance as yf

def fetch_stock_data():
stock = yf.Ticker("AAPL")
price = stock.history(period="1m")["Close"].iloc[-1]
print(f"[{time.strftime('%H:%M:%S')}] Giá AAPL: {price:.2f} USD")

while True:
fetch_stock_data()
time.sleep(30)

👉 Ưu điểm: Kiểm soát linh hoạt thời gian chạy.
👉 Nhược điểm: Có thể gây tải CPU nếu không tối ưu.


📊 3. So sánh schedule vs while True

Tiêu chíschedulewhile True
Dễ sử dụng✅ Dễ⚠️ Cần kiểm soát
Hiệu suất✅ Tốt⚠️ Có thể tiêu tốn CPU
Linh hoạt⚠️ Hạn chế✅ Cao
Đa nhiệm⚠️ Hạn chế✅ Dễ kết hợp với threading

📌 4. Khi nào dùng schedule? Khi nào dùng while True?

🔹 Dùng schedule khi:
✔️ Chạy tác vụ theo lịch trình cố định (mỗi ngày, mỗi giờ, mỗi phút).
✔️ Không cần chạy liên tục theo thời gian thực.

🔹 Dùng while True khi:
✔️ Cần chạy liên tục để xử lý dữ liệu theo thời gian thực.
✔️ Muốn linh hoạt kiểm soát thời gian chạy của bot giao dịch.


🚀 5. Kết hợp schedule & while True trong bot giao dịch

Dưới đây là cách kết hợp cả hai phương pháp để tạo bot giao dịch tự động theo timeframe.

✅ Ví dụ: Bot giao dịch chỉ chạy trong khung giờ thị trường mở

import schedule
import time
import yfinance as yf

def trade_bot():
stock = yf.Ticker("AAPL")
price = stock.history(period="1m")["Close"].iloc[-1]
print(f"[{time.strftime('%H:%M:%S')}] Giá AAPL: {price:.2f} USD")

if 9 <= time.localtime().tm_hour < 16:
print("=> Đang phân tích tín hiệu giao dịch...")

schedule.every(1).minutes.do(trade_bot)

while True:
schedule.run_pending()
time.sleep(1)

Ưu điểm: Tối ưu tài nguyên, chỉ chạy bot trong giờ giao dịch.


📌 6. Tổng kết

  • Dùng schedule khi muốn tự động hóa theo lịch trình cố định.
  • Dùng while True khi cần kiểm soát thời gian thực.
  • Kết hợp cả hai để tối ưu hóa bot giao dịch.

Bạn đang xây dựng bot giao dịch tự động nào? 🚀 Hãy chia sẻ ý tưởng của bạn! 🎯