Chạy thử chiến lược
Mục lục
Nội dung trang này giữ nguyên từ bản v0.5.0, chưa viết riêng cho free: ví dụ chạy được nếu tên hàm không đổi. Bản gốc: /docs/vnstock_quant/backtest/gioi-thieu.
Tính năng trên trang này đang trong giai đoạn phát triển thử nghiệm và chưa ổn định. Bạn dùng được để tìm hiểu và chạy thử, nhưng tên hàm hay công cụ, tham số và cấu trúc kết quả có thể còn đổi giữa các bản phát hành, cách tính và cách xử lý cũng có thể còn được hiệu chỉnh.
Hãy đối chiếu kết quả với một cách tính độc lập trước khi đưa vào quy trình nghiên cứu, và ghim phiên bản thư viện trong dự án để mã đang chạy không tự đổi theo bản mới.
Tổng quan
vnstock_quant.backtest giúp bạn kiểm thử một ý tưởng nghiên cứu trên dữ liệu giá bạn tự truy xuất, ví dụ bằng vnstock. Bạn mô tả khi nào vào và khi nào thoát vị thế. Thư viện mô phỏng lại quá trình khớp lệnh từng phiên rồi trả về lịch sử lệnh, đường vốn và các thước đo rủi ro.
Các phép tính backtest chạy trên máy của bạn. Bảng quy tắc hỗ trợ 56 chỉ báo được liệt kê ở trang Dữ liệu và tín hiệu; báo cáo kết quả dùng các thước đo rủi ro của vnstock_quant.
Thư viện khác các công cụ backtest phổ biến ở bốn điểm:
- Không phải viết vòng lặp hay lớp chiến lược. Bạn đưa vào một mảng tín hiệu
[-1, 0, 1], một cặpentries/exits, hoặc một bảng quy tắc dạngdict(rule_dsl) dùng các chỉ báo củavnstock_quant: 10 chỉ báo ở bản Cộng đồng, 56 chỉ báo từ cấp Bronze. Bảng quy tắc cũng có thể được trợ lý AI tạo từ mô tả bằng lời để bạn kiểm tra và điều chỉnh. - Luật thị trường Việt Nam là mặc định:
- lô 100 cổ phiếu;
- bước giá theo từng sàn;
- biên độ ±7%, ±10%, ±15%;
- phiên khóa sàn không bán được;
- cổ phiếu mua ngày T bán được từ phiên chiều T+2;
- thuế bán 0,1% tính riêng, ngoài phí giao dịch.
- Kiểm tra thiên lệch nhìn trước tương lai (lookahead bias). Thư viện chạy lại tín hiệu trên dữ liệu đã cắt bớt phần sau. Phiên nào có tín hiệu đổi khi bỏ dữ liệu tương lai thì được báo ra.
- Đối chứng được với thư viện khác. Các chế độ
backtesting_py,backtrader,vectorbtvàziplinecho phép so sánh theo cùng giả định khớp lệnh. Kết quả của 11 kịch bản kiểm thử và điều kiện đối chứng được ghi tại trang Chế độ khớp lệnh.
Mô-đun còn có:
- Nhiều lô trong một vị thế (pyramiding) và tái cân bằng danh mục theo tỷ trọng mục tiêu, cả hai đều tính đúng chu kỳ thanh toán T+2.5 cho từng lô.
- Lệnh giới hạn, lệnh dừng theo từng phiên, nhiều mức chốt lời từng phần, dừng lỗ về hoà vốn, cắt lỗ đuổi có mức kích hoạt.
- Quyền mua cổ phiếu (
rights_issue) bên cạnh cổ tức tiền và cổ phiếu thưởng; giá tham chiếu ngày giao dịch không hưởng quyền tính đúng công thức của sở, không bị hiểu nhầm thành phiên khóa sàn. - Chặn rủi ro cấp tài khoản: ngừng mở vị thế mới khi sụt giảm hoặc chuỗi lệnh lỗ vượt ngưỡng bạn đặt.
Chi tiết từng tính năng ở các trang tương ứng; mốc thời gian ở Lịch sử phiên bản.
Kết quả backtest chỉ phản ánh dữ liệu và giả định bạn đã dùng: biểu phí, cách khớp lệnh, cách tính khối lượng. Nó không phải lợi nhuận kỳ vọng, và thư viện không đưa ra khuyến nghị đầu tư.
Bắt đầu trong ba bước
1. Cài đặt. vnstock_quant từ bản 0.5.0 đã có sẵn mô-đun này; xem Cài đặt và thiết lập.
pip install -U --extra-index-url https://vnstocks.com/api/packages "vnstock-quant[vnstock]"2. Kiểm tra cấp quyền. Lệnh này không trừ lượt dùng thử:
import vnstock_quant as vq
print(vq.entitlement()["tier"], vq.entitlement()["backtest"])3. Chạy một backtest. Ví dụ: vào khi RSI(14) cắt lên 30 và giá đóng cửa trên SMA(200); thoát khi RSI(14) vượt 70; cắt lỗ 7%.
from vnstock import Market
from vnstock_quant import backtest as bt
df = Market().equity("FPT").ohlcv(start="2021-01-01", end="2026-09-30")
res = bt.run(
df,
rule_dsl={
"entry_rules": [
{"left": {"ind": "rsi", "params": {"length": 14}}, "op": "cross_above", "right": 30},
{"left": "close", "op": "gt", "right": {"ind": "sma", "params": {"length": 200}}},
],
"exit_rules": [{"left": {"ind": "rsi", "params": {"length": 14}}, "op": "gt", "right": 70}],
},
symbol="FPT",
profile="vn_hose",
broker="ssi",
stop_loss_pct=0.07,
)
print(res.summary()["total_return_pct"], res.summary()["max_drawdown_pct"])
print(res.trades_df())vnstock báo giá cổ phiếu theo nghìn đồng. Thư viện tự nhận ra và quy về đồng trước khi áp bước giá, biên độ. Việc quy đổi này được ghi trong res.warnings.
Đọc theo thứ tự này
| Trang | Bạn sẽ làm được |
|---|---|
| Dữ liệu và tín hiệu | Đưa dữ liệu vào, viết tín hiệu bằng mảng hoặc bảng quy tắc, kiểm tra nhìn trước tương lai |
| Chạy backtest và đọc kết quả | Gọi run, chọn cách tính khối lượng và điểm dừng, đọc tear sheet, vẽ biểu đồ |
| Luật thị trường, phí và sự kiện | Chọn hồ sơ thị trường, biểu phí, đơn vị giá; khai cổ tức và kịch bản sốc |
| Chế độ khớp lệnh và đối chứng | Hiểu khác biệt giữa các thư viện backtest, so kết quả với thư viện bạn đang dùng |
| Danh mục, tối ưu và chống quá khớp | Chạy nhiều mã chung một tài khoản, tái cân bằng theo tỷ trọng, dò tham số, walk-forward, Monte Carlo, Deflated Sharpe |
| Cấp quyền và xử lý lỗi | Biết mỗi cấp chạy được bao nhiêu, đọc mã lỗi và cách xử lý |
| Lịch sử phiên bản | Các mốc cập nhật của vnstock_quant, gồm phần backtest |
Thư viện không làm gì
- Không truy xuất dữ liệu. Bạn tự lấy dữ liệu giá (ví dụ bằng
vnstock) rồi đưa vào. Thư viện chỉ tính toán trên dữ liệu đó. - Không kết nối tài khoản, không gửi lệnh tới bất kỳ đâu. Mọi lệnh trong backtest là lệnh giả lập trên dữ liệu lịch sử.
- Không mô phỏng giao dịch ký quỹ cổ phiếu (margin) ở bản này. Phái sinh và bán khống crypto vẫn tính ký quỹ ban đầu như tiền đặt cọc hợp đồng.
- Không kèm kịch bản sự kiện nào của doanh nghiệp thật. Kịch bản sốc do bạn tự khai và chỉ áp khi bạn truyền vào.
- Không cam kết biểu phí. Biểu phí của các công ty chứng khoán chỉ để tham khảo, mỗi mục ghi rõ đã xác minh hay chưa và mốc thời gian. Mức phí thực tế của bạn có thể khác.
- Không đưa ra khuyến nghị đầu tư. Kết quả chạy thử không phải dự báo.
