Key Concepts
Trang này giới thiệu các khái niệm cốt lõi bạn cần hiểu trước khi viết thuật toán QuantConnect đầu tiên.
Initialize() — Điểm Khởi Đầu
Phương thức chạy một lần duy nhất khi thuật toán bắt đầu. Đây là nơi bạn cấu hình:
python
def Initialize(self):
self.SetStartDate(2023, 1, 1) # Ngày bắt đầu
self.SetEndDate(2024, 1, 1) # Ngày kết thúc (bỏ qua = đến hiện tại)
self.SetCash(100000) # Vốn ban đầu
self.SetWarmUp(100) # Pre-load dữ liệu cho indicators
# Thêm tài sản
self.AddEquity("SPY", Resolution.Minute)
self.AddCrypto("BTCUSDT", Resolution.Minute)OnData(Slice) — Xử Lý Dữ Liệu
Được gọi mỗi khi có dữ liệu mới (mỗi bar mới). Slice chứa tất cả dữ liệu tại thời điểm đó:
python
def OnData(self, data: Slice):
if data.ContainsKey("SPY"):
price = data["SPY"].Close
# Logic giao dịch tại đâySymbol
Symbol là mã định danh duy nhất cho mỗi tài sản. QuantConnect tự động tạo Symbol khi bạn gọi AddEquity, AddCrypto, v.v.
Resolution (Phân Giải Dữ Liệu)
| Resolution | Mô tả | Dùng khi |
|---|---|---|
| Tick | Từng giao dịch riêng lẻ | High-frequency, market microstructure |
| Second | Bar 1 giây | Cần độ chính xác cao |
| Minute | Bar 1 phút | Intraday (phổ biến nhất) |
| Hour | Bar 1 giờ | Swing trading |
| Daily | Bar 1 ngày | Position trading |
SetWarmUp()
Trước khi backtest bắt đầu, indicators cần dữ liệu để "làm nóng". SetWarmUp chỉ định bao nhiêu bars dữ liệu cần pre-load:
python
# Warm-up 100 bars cho SMA 50 và SMA 200
self.SetWarmUp(200) # Số bars tối đa indicator cần
# Hoặc dùng timedelta
self.SetWarmUp(timedelta(days=365))Luôn kiểm tra self.IsWarmingUp trong OnData để tránh giao dịch trong giai đoạn warm-up.