Chọn một thư viện backtesting về cơ bản là một canh bạc về tình trạng bảo trì. Đoạn code định giá chiến lược của bạn cần phải còn sống khi một sàn giao dịch thay đổi API, khi một bản phát hành pandas làm hỏng một câu lệnh import, hoặc khi bạn tìm thấy một lỗi lúc 2 giờ sáng. Vì vậy bài đánh giá này mở đầu bằng tín hiệu kém hào nhoáng nhất nhưng mang tính quyết định nhất — dự án có thực sự được bảo trì hay không? — rồi mới đi vào kiến trúc, tốc độ và tính năng.
Mọi con số GitHub bên dưới đều được lấy trực tiếp từ GitHub API vào 2026-06-22, và những tuyên bố khó hơn đã được đối chiếu chéo với các nguồn gốc (repo dự án, tài liệu chính thức) và kiểm chứng theo hướng phản biện. Ở những chỗ một con số là kịch bản tốt nhất do nhà cung cấp tự công bố, điều đó được đánh dấu rõ.
Kiểm tra thực tế về tình trạng bảo trì
Đây là toàn bộ hệ sinh thái được xếp hạng theo số sao GitHub, tô màu theo việc nó có thực sự đang được phát triển hay không:

Sự thật khó chịu: hai trong số những cái tên nhiều sao nhất, được viết blog nhiều nhất, thực chất đã là di sản cũ.
- Backtrader (22.1k ⭐) là cái tên nổi tiếng mà ai cũng khuyên dùng — nhưng commit cuối cùng vào nhánh mặc định của nó là tháng 4 năm 2023, và chưa bao giờ phát hành một bản release nào trên GitHub. Nó chưa bị bỏ rơi (các issue thỉnh thoảng vẫn được để ý đến), nhưng đang ngủ đông. Các danh mục được tuyển chọn gắn nhãn nó là
INACTIVE. - Zipline (19.9k ⭐), engine cũ của Quantopian, đã bị bỏ rơi vào năm 2020 khi Quantopian đóng cửa. Danh sách các lựa chọn thay thế của chính kernc xếp nó vào mục "Lỗi thời / Không được bảo trì." Phiên bản kế nhiệm được bảo trì là một bản fork riêng biệt,
zipline-reloaded(1.8k ⭐), của Stefan Jansen. - PyAlgoTrade (4.7k ⭐) đã bị lưu trữ (archived) — chính thức ở chế độ chỉ đọc. QSTrader (3.4k ⭐) cùng các framework crypto cũ
blanklyvàqtpylibđều bị đánh dấu là không còn được bảo trì.
Trong khi đó, các dự án đang phát hành release thực sự trong năm 2026 là Freqtrade (51.7k ⭐), NautilusTrader (24.1k ⭐), LEAN (20k ⭐), backtesting.py (8.5k ⭐), Jesse (8.1k ⭐), vectorbt (8.0k ⭐), PyBroker (3.4k ⭐), bt (2.9k ⭐), và Lumibot (1.7k ⭐). Số sao đo lường lịch sử; ngày commit đo lường việc liệu có ai sẽ sửa lỗi của bạn hay không.
Hai kiến trúc: event-driven và vectorized
Nhánh phân chia còn lại quyết định mọi thứ là cách engine chạy chiến lược của bạn.
- Các engine event-driven (hướng sự kiện) lặp từng nến một, gọi chiến lược của bạn trên mỗi cây nến mới. Chúng mô phỏng việc khớp lệnh, trượt giá (slippage) và rủi ro trong nến một cách thực tế, và — quan trọng nhất — cùng một đoạn code có thể chạy live. Backtrader, NautilusTrader, backtesting.py, Freqtrade, Lumibot và Zipline đều là event-driven.
- Các engine vectorized (vector hóa) (nổi bật nhất là vectorbt) bỏ qua hoàn toàn vòng lặp: chúng đóng gói hàng nghìn cấu hình chiến lược vào các mảng NumPy và tính toán tất cả cùng một lúc. Cách này nhanh đến kinh ngạc cho việc tìm kiếm tham số, nhưng nó giả định khớp lệnh ở nến tiếp theo và bỏ qua trượt giá trong nến, khớp lệnh một phần, cùng các kiểm tra rủi ro giữa nến.
Không cái nào thắng tuyệt đối. Bạn nghiên cứu với cái nhanh và kiểm chứng với cái thực tế. Sẽ nói thêm về sự đánh đổi này bên dưới.
Những cái dẫn đầu được bảo trì tích cực
NautilusTrader — cấp độ production, event-driven, lõi Rust
NautilusTrader (24.1k ⭐, LGPL-3.0) tự mô tả là một "trading engine Rust-native cấp production với kiến trúc event-driven mang tính tất định (deterministic)" — codebase khoảng 70% là Rust với các binding Python. Nó backtest trên nhiều sàn và nhiều công cụ ở độ phân giải nanosecond bằng dữ liệu tick và order-book, đồng thời tích hợp khoảng 20 kết nối live (Binance, Coinbase, Kraken, OKX, Bybit, Interactive Brokers, Betfair, và nhiều hơn nữa). Lời hứa nổi bật của nó: cùng một đoạn code chiến lược từ nghiên cứu đến triển khai live. Đây là lựa chọn mạnh nhất cho đối tượng crypto+chứng khoán cần độ thực tế ở cấp tick và một con đường thực sự dẫn đến production. Cái giá phải trả: đường cong học tập dốc hơn và kiến trúc nặng nề hơn so với các thư viện đơn giản.
vectorbt — nghiên cứu vectorized ở quy mô lớn
vectorbt (8.0k ⭐, Apache-2.0 + Commons Clause) là engine vectorized. README của nó viết: "thay vì lặp qua từng nến với một chiến lược tại một thời điểm, nó đóng gói hàng nghìn cấu hình vào các mảng NumPy, tăng tốc đoạn code nóng bằng Numba và Rust, rồi chạy tất cả cùng một lúc, biến nhiều giờ grid search thành vài giây." Việc kiểm thử 10.000 tổ hợp cửa sổ dual-SMA trong vài giây là ví dụ kinh điển; bên thứ ba báo cáo mức tăng tốc khoảng 1000× so với Backtrader trên một số khối lượng công việc (con số do nhà cung cấp/bên thứ ba đưa ra, không phải benchmark độc lập). Quá trình quét tham số bên dưới — 25 backtest trên các cửa sổ SMA — chính xác là điều mà vectorbt công nghiệp hóa:

Hai điểm lưu ý đáng biết: Commons Clause hạn chế việc bán lại thương mại (có liên quan nếu bạn đang xây dựng một sản phẩm), và phiên bản trả phí, được trau chuốt vectorbt PRO là một sản phẩm riêng biệt so với bản mã nguồn mở. vectorbt chỉ dùng để backtest — không có giao dịch live.
backtesting.py — lựa chọn yêu thích nhẹ nhàng
backtesting.py (8.5k ⭐, AGPL-3.0) là cái để bạn dùng đến khi muốn một backtest sạch sẽ, nhanh, dễ đọc mà không cần đến đống thủ tục rườm rà của cả một framework. Định nghĩa init() và next(), chạy, nhận về một đối tượng thống kê và một biểu đồ Bokeh tương tác. Giấy phép AGPL-3.0 rất quan trọng: đó là copyleft mạnh với điều khoản về sử dụng qua mạng, nên nó khá gượng gạo khi nằm trong một SaaS mã nguồn đóng. Nó chỉ dùng để backtest. Đường cong vốn (equity curve) trên trang này (ảnh bìa) và phần thống kê bên dưới đến từ một lần chạy backtesting.py thực tế — một chiến lược cắt nhau SMA(20/50) đơn giản trên một chuỗi dữ liệu tổng hợp:

Hãy chú ý đến kết quả trung thực: chiến lược cắt nhau ngây thơ mang lại +1.6% so với +46% của buy & hold, với mức sụt giảm tàn nhẫn −38%. Đó là kết quả đầu tiên bình thường của một backtest thực tế, và chính là lý do bạn cần quét tham số và kiểm chứng các giả định trước khi tin vào bất cứ điều gì.
Freqtrade — lựa chọn mặc định cho crypto
Freqtrade (51.7k ⭐, GPL-3.0) là dự án nhiều sao nhất trong danh sách này và là bot giao dịch crypto mã nguồn mở mặc định trên thực tế. Nó làm backtesting, giao dịch dry-run (giấy), và giao dịch live trên các sàn lớn, điều khiển qua Telegram hoặc một giao diện web tích hợp sẵn, và phát hành release hằng tháng. Nó chỉ dành cho crypto — không có chứng khoán — nhưng với crypto thì đây là chuẩn mực được bảo trì và được cộng đồng hậu thuẫn.
Lumibot, bt, PyBroker, Jesse, LEAN, zipline-reloaded
- Lumibot (1.7k ⭐, GPL-3.0) — đa tài sản (chứng khoán, quyền chọn, crypto, hợp đồng tương lai, forex) với cùng một đoạn code cho backtest, giấy và live trên Alpaca, Interactive Brokers, Tradier, Schwab, Tradovate và CCXT. Việc thiết lập broker thân thiện với người mới; nhưng hãy để ý đến những điểm cần lưu ý đã được ghi chép về sự khác biệt giữa backtest và live (múi giờ, thời điểm vào lệnh, margin).
- bt (2.9k ⭐, MIT) — một framework linh hoạt theo dạng cây thuật toán (tree-of-algos), nhắm tới các chiến lược phân bổ danh mục và dựa trên trọng số hơn là khớp lệnh từng tick. Giấy phép thoáng, được bảo trì tích cực, chỉ dùng để backtest.
- PyBroker (3.4k ⭐) — xây dựng cho các chiến lược học máy (machine-learning), tích hợp sẵn tăng tốc Numba và kiểm chứng walk-forward. Chỉ dùng để backtest.
- Jesse (8.1k ⭐, MIT) — một framework crypto với API chiến lược sạch sẽ và giao dịch live; giấy phép thoáng.
- LEAN / QuantConnect (20k ⭐, Apache-2.0) — engine hạng nặng, đa tài sản đứng sau nền tảng đám mây của QuantConnect. Lõi C#/.NET với một API Python; backtest và live. Mạnh mẽ nhưng là cam kết lớn nhất ở đây.
- zipline-reloaded (1.8k ⭐, Apache-2.0) — bản fork được bảo trì tích cực của Zipline (Quantopian), phổ biến trong giới học thuật và trong cuốn sách Machine Learning for Trading. Chỉ dùng để backtest; hãy dùng cái này, không phải bản gốc
quantopian/zipline.
Nghĩa địa — tránh dùng cho dự án mới
Những cái này vẫn xuất hiện trong kết quả tìm kiếm và các bài blog cũ, nhưng đừng bắt đầu từ đây vào năm 2026:
- Zipline (bản gốc,
quantopian/zipline) — bị bỏ rơi năm 2020. Hãy dùngzipline-reloaded. - PyAlgoTrade — repo đã bị lưu trữ (chỉ đọc).
- QSTrader — bị đánh dấu không được bảo trì; lần push cuối giữa năm 2024.
- blankly — nền tảng đã đóng cửa; qtpylib — bị lưu trữ từ năm 2021.
- fastquant (1.8k ⭐) — một lớp bọc mỏng nhắm tới backtest một dòng, nhưng đã cũ kỹ từ năm 2023.
Kiến trúc quan trọng: sự đánh đổi về tính thực tế
Sự phân chia vectorized và event-driven không phải chuyện hàn lâm. Tốc độ của vectorbt đến từ việc giả định mọi lệnh khớp tại giá của nến tiếp theo mà không có trượt giá. Với một bộ lọc momentum trên 500 tài sản thì điều đó ổn. Nhưng với một chiến lược mà lợi thế nằm ở việc khớp lệnh trong nến — đặt stop, khớp lệnh một phần, vị trí trong hàng đợi — một backtest vectorized sẽ lặng lẽ nói dối bạn, và bạn cần một engine event-driven (NautilusTrader, Backtrader) hoặc một lần dry-run live (Freqtrade, Lumibot) để có được con số trung thực. Quy trình chuyên nghiệp dùng cả hai: vectorbt để khám phá không gian tham số, một engine event-driven để kiểm chứng những cái sống sót.
Giấy phép — đọc cái này trước khi bạn xây sản phẩm
Các thư viện backtesting nặng về giấy phép một cách bất thường, và một số cái là copyleft:
| Giấy phép | Thư viện | Điều cần biết |
|---|---|---|
| AGPL-3.0 | backtesting.py | Copyleft mạnh nhất; sử dụng qua mạng/SaaS có thể kích hoạt yêu cầu công khai mã nguồn |
| Apache-2.0 + Commons Clause | vectorbt (bản OSS) | Thoáng ngoại trừ việc bạn không được bán nó như một sản phẩm |
| GPL-3.0 | Backtrader, Freqtrade, Lumibot | Copyleft; phân phối một sản phẩm phái sinh nghĩa là phải mã nguồn mở nó |
| LGPL-3.0 | NautilusTrader | Copyleft yếu hơn; việc liên kết (linking) thường là ổn |
| MIT | bt, Jesse, QSTrader, fastquant | Thoáng — gần như làm được mọi thứ |
| Apache-2.0 | LEAN, zipline-reloaded, finmarketpy | Thoáng, kèm theo cấp quyền sáng chế (patent grant) |
Nếu bạn đang xây dựng một thứ gì đó thương mại và mã nguồn đóng, các công cụ MIT/Apache là lựa chọn không vướng mắc; AGPL và Commons Clause thì cần một luật sư đọc qua.
So sánh tổng quan
| Công cụ | ⭐ Sao | Kiến trúc | Giấy phép | Bảo trì | Giao dịch live | Phù hợp nhất cho |
|---|---|---|---|---|---|---|
| NautilusTrader | 24.1k | Event-driven (Rust) | LGPL-3.0 | 🟢 Tích cực | Có | Production, độ thực tế tick/order-book |
| vectorbt | 8.0k | Vectorized | Apache+CC | 🟢 Tích cực | Không | Tìm kiếm tham số hàng loạt |
| backtesting.py | 8.5k | Event-driven | AGPL-3.0 | 🟢 Tích cực | Không | Backtest đơn lẻ nhanh, sạch sẽ |
| Freqtrade | 51.7k | Event-driven | GPL-3.0 | 🟢 Tích cực | Có (crypto) | Bot crypto được bảo trì |
| Backtrader | 22.1k | Event-driven | GPL-3.0 | 🟡 Ngủ đông | Có | Dự án di sản (lưu ý độ cũ kỹ) |
| Lumibot | 1.7k | Event-driven | GPL-3.0 | 🟢 Tích cực | Có | Đa tài sản, backtest/live hợp nhất |
| LEAN | 20k | Event-driven | Apache-2.0 | 🟢 Tích cực | Có | Nền tảng đa tài sản hạng nặng |
| bt | 2.9k | Vectorized/trọng số | MIT | 🟢 Tích cực | Không | Chiến lược phân bổ danh mục |
| PyBroker | 3.4k | Event-driven | OSS | 🟢 Tích cực | Không | Chiến lược ML + walk-forward |
| zipline-reloaded | 1.8k | Event-driven | Apache-2.0 | 🟢 Tích cực | Không | Học thuật, sách ML4T |
| Zipline (bản gốc) | 19.9k | Event-driven | Apache-2.0 | 🔴 Bị bỏ rơi | — | Không gì cả — hãy dùng reloaded |
| PyAlgoTrade | 4.7k | Event-driven | — | 🔴 Bị lưu trữ | — | Không gì mới |
Số sao và trạng thái là ảnh chụp tại thời điểm 2026-06-22 và sẽ thay đổi; tình trạng bảo trì là chiều biến động nhất, vì vậy hãy kiểm tra lại hoạt động commit trước khi bạn cam kết.
Cách chọn, gói gọn trong một hơi thở
- Nghiên cứu một chiến lược trên hàng nghìn tham số → vectorbt.
- Một backtest đơn lẻ nhanh, sạch sẽ trong notebook → backtesting.py (lưu ý AGPL).
- Production crypto+chứng khoán với tính nhất quán nghiên cứu→live và độ thực tế ở cấp tick → NautilusTrader.
- Một bot crypto được bảo trì với backtest/dry-run/live → Freqtrade.
- Giao dịch thuật toán đa tài sản cho nhà đầu tư cá nhân, thân thiện với người mới → Lumibot.
- Chiến lược phân bổ danh mục / dựa trên trọng số → bt.
- Chiến lược học máy với walk-forward → PyBroker.
- Học thuật / bài tập môn ML-for-Trading → zipline-reloaded.
- Bạn thừa kế một codebase Backtrader → ổn thôi, nhưng hãy biết rằng nó đang ngủ đông; dự án mới nên tìm chỗ khác.
Một quy tắc duy nhất tồn tại qua mọi chế độ thị trường: kiểm tra ngày commit cuối cùng trước khi kiểm tra số sao. Một thư viện 22k sao chưa phát hành gì kể từ năm 2023 là con đường đến production chậm hơn so với một thư viện 8k sao đã phát hành tuần trước.
Phương pháp luận: Các chỉ số GitHub được lấy trực tiếp từ GitHub API vào 2026-06-22; các tuyên bố về kiến trúc, bảo trì, giấy phép và giao dịch live đã được đối chiếu chéo với các repo dự án và tài liệu chính thức cũng như kiểm chứng theo hướng phản biện, dựa trên các danh mục được tuyển chọn (PyTrade.org, awesome-systematic-trading) và danh sách các lựa chọn thay thế của kernc. Đường cong vốn, các thống kê và heatmap tham số là kết quả thực tế từ một lần chạy backtesting.py trên một chuỗi giá tổng hợp có thể tái lập — mang tính minh họa, không phải khuyến nghị chiến lược. Các con số hiệu suất được gán cho nhà cung cấp (mức tăng tốc của vectorbt, độ phân giải nanosecond của NautilusTrader) là do họ tự công bố, không phải benchmark độc lập.