Tự Động Hóa Chiến Lược Giao Dịch với Python: schedule vs while True
🔥 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):
- Sử dụng thư viện
schedule
- Thích hợp để chạy nhiệm vụ theo lịch trình cố định. - 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í | schedule | while 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! 🎯