backtrader: thư viện backtesting Python cho trading
backtrader xứng đáng là một engine backtesting đầy đủ tính năng: engine Cerebro, 122 indicator dựng sẵn, và một broker mô phỏng gánh phần lớn việc mà một trader Python thường phải tự viết. Điểm trừ nằm ở API dùng nhiều metaclass và việc phụ thuộc vào IbPy — một wrapper đã cũ — để giao dịch live qua Interactive Brokers. Đáng dùng để kiểm thử chiến lược offline; phần live trading thì cần thận trọng hơn.
Vì sao cần backtest trước khi rót vốn thật
Một chiến lược trading nhìn đẹp trên bảng tính vẫn có thể lỗ khi tính đến slippage, phí giao dịch, và thời điểm khớp lệnh thực tế. Lợi nhuận trên giấy không sống nổi khi gặp lệnh khớp thật. Backtest trên dữ liệu giá lịch sử là cách phát hiện một chiến lược chỉ hoạt động vì nó được tinh chỉnh đúng trên chính dữ liệu dùng để kiểm thử, hoặc một chiến lược giả định lệnh luôn khớp đúng giá đóng cửa trong khi thực tế không phải vậy. backtrader ra đời để một trader Python có thể gắn chiến lược vào dữ liệu lịch sử, cho chạy qua các loại lệnh và cơ chế phí thực tế, xem kết quả, rồi chuyển cùng đoạn code chiến lược đó sang chạy live trên Interactive Brokers hoặc Oanda.
backtrader là gì?
backtrader là thư viện Python để backtest và live trading các chiến lược giao dịch thuật toán. Nó xoay quanh engine Cerebro, kết nối data feed, một class strategy, 122 indicator dựng sẵn, và một broker mô phỏng để bạn chạy thử chiến lược trên dữ liệu lịch sử trước khi dùng tiền thật. Được viết hoàn toàn bằng Python, backtrader được cài vào project có sẵn qua pip install, không phải một ứng dụng độc lập.
Khả năng chính: data feed, indicator, và loại lệnh
- ✓Engine Cerebro điều phối strategy, data feed, và broker mô phỏng trong cùng một lần chạy
- ✓122 indicator dựng sẵn, cộng thêm hỗ trợ indicator từ TA-Lib khi cài package python ta-lib
- ✓Broker mô phỏng hỗ trợ lệnh Market, Close, Limit, Stop, StopLimit, StopTrail, StopTrailLimit, và OCO, cùng bracket order và slippage
- ✓Data feed từ file CSV, nguồn online, DataFrame của pandas, và blaze
- ✓Chạy nhiều data feed, nhiều strategy, nhiều khung thời gian cùng lúc, kèm resampling và replaying tích hợp
- ✓Data feed live trading cho Interactive Brokers, Visual Chart, và Oanda
- ✓Các analyzer như TimeReturn, Sharpe Ratio, SQN, cùng một tích hợp pyfolio mà README ghi là đã deprecated
- ✓Sizer để tự động tính khối lượng lệnh, trading calendar, và scheduler
Cài đặt backtrader và các dependency
Cài bằng `pip install backtrader`; thư viện lõi không có dependency ngoài. Nếu cần vẽ chart, cài thêm extra plotting: `pip install backtrader[plotting]`, yêu cầu matplotlib từ bản 1.4.1 trở lên. backtrader hỗ trợ Python >= 3.2, và cũng chạy được trên pypy, pypy3 (không có tính năng vẽ chart, vì matplotlib không được hỗ trợ ở đó). Live trading qua Interactive Brokers cần cài IbPy riêng; README ghi rằng IbPy không có trên PyPI, nên phải cài bằng `pip install git+https://github.com/blampe/IbPy.git`. Bạn cũng có thể bỏ qua pip, chỉ cần chép thư mục backtrader từ bản source thẳng vào project.
Viết backtest đầu tiên với backtrader
Một script backtrader tối thiểu có ba phần: một subclass `bt.Strategy` (hoặc `bt.SignalStrategy`) chứa logic chiến lược, một instance `bt.Cerebro` để chạy toàn bộ, và một hoặc nhiều data feed. Ví dụ trong README dựng một chiến lược cắt nhau đường trung bình động đơn giản: khai báo hai indicator `bt.ind.SMA` bên trong strategy, nối chúng qua `bt.ind.CrossOver`, rồi đăng ký bằng `self.signal_add(bt.SIGNAL_LONG, crossover)`. Bên ngoài class strategy, tạo `cerebro = bt.Cerebro()`, thêm strategy bằng `cerebro.addstrategy(...)`, nạp dữ liệu lịch sử bằng `cerebro.adddata(...)`, rồi gọi `cerebro.run()` để chạy backtest và `cerebro.plot()` để vẽ chart nếu đã cài matplotlib. Ví dụ này nằm sẵn trong thư mục examples của project, tên file là `sigsmacross/sigsmacross2.py`.
Điểm mạnh
- ✓Có sẵn 122 indicator, nên phần lớn công cụ phân tích kỹ thuật thông dụng không cần tự viết tay
- ✓Broker mô phỏng hỗ trợ nhiều loại lệnh (Market, Limit, Stop, StopLimit, StopTrail, bracket, OCO) thay vì chỉ khớp ở giá đóng cửa
- ✓Cùng một class strategy chạy được cả ở chế độ backtest lẫn live qua Interactive Brokers hoặc Oanda
- ✓Thư viện lõi tự chứa, không cần dependency ngoài bắt buộc; chỉ tính năng vẽ chart mới cần matplotlib
- ✓Nhận dữ liệu trực tiếp từ file CSV, nguồn online, hoặc DataFrame của pandas
Hạn chế và ràng buộc cần biết
- △API dựa nhiều vào metaclass của Python để tự động đăng ký indicator và strategy, khiến việc debug từng bước với code chưa quen khó hơn một thiết kế tường minh hơn
- △Live trading qua Interactive Brokers phụ thuộc vào IbPy, một wrapper bên thứ ba mà README ghi là không có trên PyPI và phải cài từ một fork trên GitHub
- △Tích hợp phân tích pyfolio đã bị README đánh dấu deprecated, nên không thể dựa vào đó để làm báo cáo tearsheet
- △Tính năng vẽ chart cần matplotlib và không hoạt động trên pypy, nên các môi trường headless hoặc dùng pypy sẽ mất luôn phần vẽ chart
- △Một số ghi chú trong chính README (badge Travis CI, một note năm 2018 về độ tin cậy của Yahoo Finance API) đã cũ, nên vài phần tài liệu có thể chưa phản ánh đúng tình trạng hiện tại của dự án
Lựa chọn thay thế
Câu hỏi thường gặp về backtrader
backtrader được phát hành theo giấy phép GPL-3.0, cho phép dùng miễn phí kể cả cho trading thương mại. GPL-3.0 chỉ yêu cầu rằng nếu bạn phân phối một bản chỉnh sửa của chính backtrader, bản đó phải tiếp tục mở mã nguồn theo cùng giấy phép — việc dùng nội bộ để giao dịch không kích hoạt yêu cầu này.
backtrader có hỗ trợ live trading qua Interactive Brokers, dùng IB làm một trong các nguồn data feed và nơi thực thi lệnh trực tiếp. backtrader cần wrapper bên thứ ba là IbPy cài riêng — README ghi rằng IbPy không có trên PyPI, nên phải cài bằng `pip install git+https://github.com/blampe/IbPy.git`.
README của backtrader có một mục tên 'Python 2/3 Support' liệt kê yêu cầu Python >= 3.2, và backtrader cũng chạy được trên pypy, pypy3 (không có tính năng vẽ chart). README không nêu rõ phiên bản Python 2 tối thiểu, nên hãy kiểm tra môi trường Python 2 của bạn trước khi dựa vào đó.
backtrader liệt kê 'dễ dàng phát triển indicator tùy chỉnh' như một tính năng, nhưng các bước subclass cụ thể không được nêu chi tiết trong phần README đang có ở đây. Tài liệu riêng của dự án và trang tham chiếu indicator trình bày cách làm đầy đủ hơn, và backtrader có sẵn 122 indicator để bắt đầu trước khi bạn cần tự viết.
Broker mô phỏng của backtrader hỗ trợ lệnh Market, Close, Limit, Stop, StopLimit, và StopTrailLimit, cùng lệnh OCO (one-cancels-other) và bracket order. backtrader còn mô phỏng slippage, các chiến lược khớp khối lượng có thể cấu hình, và điều chỉnh dòng tiền liên tục cho các công cụ kiểu future.
Dữ liệu GitHub hiện có ở đây không bao gồm hoạt động commit gần đây, nên tần suất phát hành hiện tại của backtrader không thể xác nhận chỉ từ bài review này. README mang một vài dấu hiệu cũ — badge Travis CI, một note năm 2018 về Yahoo Finance API, và tích hợp pyfolio bị đánh dấu deprecated — nên tự kiểm tra lịch sử commit của repository trước khi dựa vào backtrader cho công việc mới.
Trường hợp sử dụng phù hợp nhất
- •Kiểm thử một chiến lược cắt nhau đường trung bình động (moving-average crossover) hoặc chiến lược theo luật khác trên nhiều năm dữ liệu CSV hoặc pandas trước khi rót vốn thật
- •So sánh giả định khớp lệnh (market với limit với stop) để xem logic khớp lệnh thay đổi kết quả chiến lược ra sao
- •Chạy cùng một đoạn code strategy ở chế độ backtest, sau đó chạy live qua Interactive Brokers hoặc Oanda mà không cần viết lại
- •Viết một indicator riêng khi không có sẵn indicator nào trong 122 indicator đi kèm phù hợp
Ai nên dùng — và ai nên bỏ qua
backtrader phù hợp với lập trình viên Python đã biết code và muốn kiểm soát logic strategy, loại lệnh, cách tính phí, thay vì dùng một UI kéo-thả để backtest. Nó cũng hợp với ai muốn backtest rồi live trading qua Interactive Brokers hoặc Oanda bằng cùng một class strategy. Nên bỏ qua nếu bạn cần một công cụ no-code, cần backtest kiểu vectorized trên số lượng lớn tổ hợp tham số (engine Cerebro chạy từng bước không phù hợp cho việc đó), hoặc không muốn đào sâu vào phần nội bộ dùng nhiều metaclass mỗi khi có lỗi.
Repo liên quan
backtrader có đáng để bạn bỏ thời gian?
ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về backtrader.
