Lỗi thường gặpLỗi thường gặp
Lỗi thường gặp
Ba cái bẫy làm backtest đẹp hơn thực tế, kèm các lỗi script hay gặp.
1 · Nhìn trước tương lai
Tức là dùng dữ liệu chưa có tại thời điểm ra quyết định. Lõi Lab đã chặn hai đường phổ biến nhất:
- Lệnh khớp ở giá mở phiên sau tín hiệu, không khớp ở nến tạo tín hiệu.
pe(),pb(),fundamental()chỉ dùng số đã công bố tới ngày đó.
Nhưng bạn vẫn có thể tự tạo lỗi:
# Wrong: shift(-1) reads TOMORROW's price
plot(close.shift(-1), "Tomorrow's close")2 · Chỉ có mã sống sót
Rổ hiện tại chỉ còn những mã đã sống sót tới hôm nay. Dùng nó cho quá khứ là bỏ sót các mã đã bị loại, thường là mã làm ăn kém, nên kết quả đẹp hơn thực tế.
- Rổ ngành HODL (
"HX-…") lấy thành phần đúng tại từng kỳ, không bị lỗi này. - VN30 / VN100 trước 11/2026 dùng rổ hiện tại; trang kết quả hiện ⓘ cảnh báo.
3 · Quá khớp dữ liệu
Thử hàng trăm bộ tham số rồi chọn bộ đẹp nhất là học thuộc quá khứ, không phải tìm ra quy luật.
- Giữ ít tham số.
- Kiểm tra trên giai đoạn khác bằng
period("10Y")hoặc một ngày bắt đầu khác. - Luôn so với Giữ nguyên cùng kỳ / VN-Index cùng kỳ.
Lỗi script hay gặp
| Thông báo | Nguyên nhân · cách sửa |
|---|---|
Missing ticker("…") |
Trang /lab chưa biết chạy mã nào → thêm dòng ticker("FPT") |
Missing universe("…") |
Script Danh mục thiếu rổ → thêm universe("HX-BANK") |
Invalid period "…" |
Kỳ sai → dùng "1Y" "3Y" "5Y" "10Y" "max" hoặc ngày đã qua dạng "2021-01-01" |
Cannot import '…' |
Script không cần import; chỉ cho import thư viện tính toán như math, numpy, pandas |
NameError: name '…' is not defined |
Gõ sai tên hàm / biến, hoặc dùng hàm của loại script khác (ví dụ momentum trong Chỉ báo) |
| Không có tín hiệu nào | Điều kiện quá chặt, hoặc dùng highest(...) mà quên .shift(1) |