Phần lớn backtest tự làm tại nhà đều bị thổi phồng — không phải vì trader gian dối, mà vì quy trình có lỗ hổng mà họ không nhận ra. Kết quả backtest đẹp trên giấy rồi vào live thì win rate rơi từ 58% xuống 34% là chuyện xảy ra hàng ngày, và gần như luôn xuất phát từ một trong vài lỗi lặp lại ở các bước dưới đây. Đây là quy trình từng bước để tránh việc đó.
Bước 1: Viết quy tắc vào lệnh thành văn bản, không mơ hồ
Trước khi mở bất kỳ phần mềm backtest nào, viết quy tắc setup ra thành câu lệnh có thể kiểm tra được — không phải mô tả cảm tính. “Vào long khi giá breakout khỏi kháng cự với volume cao” chưa đủ cụ thể để test. Cần trả lời: kháng cự xác định thế nào (đỉnh gần nhất 20 nến? vùng tích lũy?), “volume cao” là bao nhiêu so với trung bình 20 phiên, breakout được xác nhận bằng nến đóng cửa hay chỉ chạm giá. Nếu hai người đọc quy tắc của bạn và có thể vào lệnh khác nhau ở cùng một biểu đồ, quy tắc chưa đủ chặt để backtest.
Quy tắc thoát lệnh (stop loss, take profit, trailing) cũng phải viết rõ như vậy — hầu hết backtest thất bại vì chỉ định nghĩa entry kỹ, còn exit thì tùy hứng.
Bước 2: Chọn dữ liệu và khung thời gian đủ dài
Test trên một giai đoạn quá ngắn (ví dụ 3 tháng) hoặc chỉ một loại thị trường (chỉ trending, không có sideway) cho kết quả không đáng tin. Tối thiểu nên có đủ mẫu để trải qua ít nhất một giai đoạn trending mạnh, một giai đoạn sideway, và một giai đoạn biến động cao (như tin tức lớn hoặc sự kiện thanh khoản mỏng). Với giao dịch ngắn hạn (intraday, scalp), cần ít nhất vài trăm lệnh để số liệu win rate và expectancy có ý nghĩa thống kê — dưới 30 lệnh, mọi kết luận đều có thể là nhiễu ngẫu nhiên.
Bước 3: Tránh lookahead bias
Đây là lỗi phổ biến và nguy hiểm nhất. Lookahead bias xảy ra khi backtest vô tình sử dụng thông tin mà tại thời điểm vào lệnh thực tế bạn chưa thể biết — ví dụ dùng giá đóng cửa của nến hiện tại để quyết định vào lệnh trong chính nến đó, hoặc dùng chỉ báo tính lại toàn bộ dữ liệu (repaint) mà giá trị tại thời điểm quá khứ khác với giá trị hiển thị bây giờ. Kết quả là backtest cho thấy hệ thống “nhìn thấy tương lai” một chút, và con số đẹp hơn thực tế nhiều. Cách kiểm tra đơn giản: tại mỗi điểm vào lệnh trong backtest, tự hỏi “nếu tôi đang đứng ở đúng thời điểm này trong quá khứ, tôi có đủ dữ liệu để ra quyết định này không?”
Bước 4: Cẩn thận với overfitting
Overfitting là khi bạn tinh chỉnh quá nhiều tham số (stop loss %, ngưỡng RSI, số nến MA…) để khớp hoàn hảo với đúng đoạn dữ liệu lịch sử đang test, đến mức chiến lược không còn khái quát hóa được cho dữ liệu mới. Dấu hiệu nhận biết: bạn đã thử hơn 5-10 tổ hợp tham số khác nhau và chọn tổ hợp cho kết quả tốt nhất. Cách phòng: chia dữ liệu thành hai phần — tối ưu tham số trên phần đầu (in-sample), rồi kiểm tra lại trên phần sau chưa từng dùng để tối ưu (out-of-sample). Nếu hiệu suất out-of-sample giảm mạnh so với in-sample, chiến lược đang bị overfit, không phải đang hoạt động tốt.
Bước 5: Cộng phí giao dịch và slippage thực tế
Nhiều backtest bỏ qua phí sàn, spread, và slippage — sai lệch này với chiến lược giao dịch tần suất cao có thể ăn hết toàn bộ lợi nhuận trên giấy. Cộng thêm phí giao dịch thực tế của sàn bạn dùng và ước tính slippage bảo thủ (0.05-0.1% mỗi lệnh với coin thanh khoản trung bình, hơn nữa với coin thanh khoản thấp). Một chiến lược có expectancy dương 0.3R trước phí có thể thành âm sau khi trừ phí nếu tần suất giao dịch cao — đây là lý do nhiều hệ thống scalping “thắng” trên backtest nhưng thua khi chạy live.
Bước 6: Forward test trước khi vào tiền thật
Backtest cho biết chiến lược có logic hợp lý trong quá khứ. Nó không chứng minh được điều kiện thị trường sẽ giữ nguyên. Sau khi backtest đạt kỳ vọng, chạy forward test — giao dịch demo hoặc size rất nhỏ trong điều kiện thị trường thực, tối thiểu 4-6 tuần hoặc đủ số lệnh có ý nghĩa thống kê — trước khi tăng size lên mức thật. Đây là bước hầu hết trader bỏ qua vì sốt ruột, và cũng là bước phân biệt trader có kỷ luật với trader chạy theo con số đẹp trên biểu đồ backtest.
Xem thêm các bài cùng chủ đề tại chuyên mục Hiệu suất giao dịch.