Kiến Trúc Hệ Thống LEAN Engine
LEAN Engine là động cơ backtest mã nguồn mở của QuantConnect, được viết bằng C# và có binding cho Python. Hiểu kiến trúc của nó giúp bạn viết thuật toán đúng ngay từ đầu.
Event-Driven Architecture
LEAN là event-driven engine, KHÔNG phải vòng lặp truyền thống. Thuật toán của bạn được gọi qua các sự kiện (events) thay vì chạy trong một loop:
Initialize() — Chạy một lần khi bắt đầu: setup securities, indicators, warm-up.
OnData(Slice) — Gọi mỗi khi có dữ liệu mới (mỗi bar). Đây là nơi đặt logic giao dịch.
OnOrderEvent(OrderEvent) — Gọi mỗi khi lệnh được fill, reject, hoặc update.
OnEndOfDay() — Gọi cuối mỗi ngày giao dịch.
OnEndOfAlgorithm() — Gọi khi backtest kết thúc.
5 Module Framework
| Module | Class | Chức năng |
|---|---|---|
| 1. Universe Selection | Universe | Chọn tài sản nào tham gia thuật toán |
| 2. Alpha | AlphaModel | Sinh tín hiệu giao dịch (insights) |
| 3. Portfolio | PortfolioModel | Phân bổ vốn dựa trên insights |
| 4. Risk | RiskModel | Quản lý rủi ro (stop-loss, trailing stop, v.v.) |
| 5. Execution | ExecutionModel | Khớp lệnh thực tế |
Data Pipeline
Data Feed — Đọc dữ liệu từ disk (local) hoặc API (cloud)
Subscription Manager — Quản lý các luồng dữ liệu đã đăng ký
Consolidator — Gộp tick → second → minute → daily bars
Indicator — Tính toán chỉ báo từ dữ liệu
Slice — Đóng gói dữ liệu gửi đến OnData()
Key Concepts
Securities — Đối tượng đại diện cho tài sản (Equity, Crypto, Future, Option, Forex). Chứa price, holdings, fundamentals.
Symbol — Mã định danh duy nhất (vd: "AAPL", "BTCUSDT", "ES1!").
Resolution — Phân giải dữ liệu: Tick, Second, Minute, Hour, Daily.
SetWarmUp() — Pre-load dữ liệu cho indicators trước khi bắt đầu backtest.
ObjectStore — Lưu/tải ML models, parameters, cache dữ liệu.
📘 Lưu ý
LEAN không hỗ trợ VN30F làm dataset mặc định. Bạn cần dùng Custom Data (AddData) để import dữ liệu VN30F. Xem hướng dẫn tại Custom Data cho VN30F.