Backtest Chiến Lược Giao Dịch: Từ Lý Thuyết Đến Thực Chiến
Backtest mô phỏng một bộ quy tắc trên dữ liệu lịch sử với các giả định về khớp lệnh và chi phí. Kết quả cho biết mô hình đã hoạt động thế nào trong mẫu đã chọn; nó không chứng minh chiến lược sẽ có lãi trong tương lai. Một bài kiểm thử có thể tái lập cần lưu cả quy tắc, dữ liệu, thông số và từng giao dịch.
1. Viết quy tắc trước khi xem kết quả
Xác định mã giao dịch và nguồn dữ liệu, khung thời gian, điều kiện vào/thoát, khối lượng, phí và thời điểm đánh giá tín hiệu. Phân biệt điều kiện duy trì nhiều nến, như RSI dưới 30, với sự kiện cắt qua một mức. Ghi rõ tín hiệu dùng nến đang chạy hay nến đã đóng.
Ví dụ minh họa: mua khi MA20 cắt lên MA50 và đóng vị thế khi cắt xuống. Đây mới là ý tưởng kiểm thử; vẫn cần quy định giá khớp, cách tính khối lượng và xử lý vị thế còn mở khi hết mẫu.
2. Kiểm tra dữ liệu và thông tin sẵn có
Chọn lịch sử phù hợp với tần suất giao dịch và các trạng thái thị trường cần đánh giá. Không có số năm hoặc số lệnh tối thiểu nào tự động bảo đảm ý nghĩa thống kê. Kiểm tra nến thiếu, múi giờ, điều chỉnh chia tách/cổ tức và thay đổi thành phần danh mục nếu có.
Tránh dùng thông tin chỉ xuất hiện sau thời điểm ra quyết định. Giá đóng cửa có thể dùng để phát tín hiệu sau khi nến đóng; vấn đề là giả định được khớp trước khi giá đó được biết. Pivot được xác nhận muộn cũng không thể coi là tín hiệu đã tồn tại tại nến pivot.
3. Chọn cách kiểm thử và kiểm tra lệnh mẫu
| Cách làm | Công dụng | Điều cần kiểm tra |
|---|---|---|
| Thủ công với Bar Replay | Quan sát quy tắc từng bước | Không nhìn trước kết quả, ghi mọi tín hiệu đủ điều kiện |
| Pine strategy trên TradingView | Mô phỏng lệnh bằng Strategy Tester | Quy tắc bộ mô phỏng, phí, trượt giá và dữ liệu |
| EA trên MT5 | Kiểm thử chương trình MQL5 | Chế độ mô hình hóa, đặc tả hợp đồng và dữ liệu máy chủ |
Một indicator chỉ vẽ tín hiệu không tự tạo báo cáo giao dịch. TradingView mô tả các giả định khớp lệnh trong tài liệu strategy. Với cấu hình mặc định, lệnh thị trường được tạo khi nến đóng thường khớp ở tick tiếp theo, không tự động tại giá đóng cửa phát tín hiệu.
Kiểm tra một số giao dịch bằng tay trước khi đọc tổng lợi nhuận. Lưu thời gian tín hiệu, thời gian khớp, giá, khối lượng, phí, lý do thoát và phiên bản mã. Lệnh bị từ chối hoặc tín hiệu không đủ điều kiện cũng có thể cần ghi lại để giải thích kết quả.
4. Đọc các chỉ số cùng nhau
Win rate là tỷ lệ lệnh thắng trong các lệnh được tính. Profit factor so sánh tổng lãi gộp với trị tuyệt đối tổng lỗ gộp. Maximum drawdown là mức giảm từ đỉnh vốn xuống đáy sau đó, không chỉ là tổng lỗ của một chuỗi lệnh liên tiếp.
Không áp dụng máy móc các ngưỡng “win rate trên 50%” hoặc “drawdown dưới 20%” như giấy chứng nhận chất lượng. Với ví dụ giả định thắng 40% và mỗi lệnh thắng đúng 3R, thua đúng 1R, kỳ vọng trước chi phí là 0,4 × 3R − 0,6 × 1R = 0,6R. Kết quả thực tế có thể khác nếu khớp lệnh, chi phí hoặc phân phối lời/lỗ khác giả định.
5. Tách tối ưu khỏi đánh giá
Giữ một phần dữ liệu chưa dùng để chọn thông số. Ghi lại mọi biến thể đã thử, kể cả kết quả xấu. Chỉ thay một tham số mỗi lần giúp giải thích tác động nhưng không tự loại bỏ overfitting.
Walk-forward lặp lại quá trình chọn thông số trên một cửa sổ quá khứ rồi đánh giá trên cửa sổ tiếp theo. Một lần chia train/test không phải toàn bộ quy trình này. Không dùng kết quả của cửa sổ đánh giá để chọn lại quy tắc rồi vẫn gọi nó là dữ liệu chưa thấy.
Pineify có thể hỗ trợ viết quy tắc thành Pine Script và phân tích kết quả. Mã được tạo vẫn cần kiểm tra cú pháp, logic và giả định dữ liệu. Công cụ tối ưu không biến bộ thông số tốt nhất trong quá khứ thành dự báo chắc chắn.
6. Forward test quy trình thực thi
Demo giúp quan sát tín hiệu mới, trạng thái lệnh, độ trễ và lỗi kết nối. Không có thời hạn cố định như 30 ngày đủ để chứng minh an toàn khi chuyển sang tiền thật. So sánh các sai lệch giữa backtest và demo, điều tra nguyên nhân, rồi đánh giá riêng khả năng chịu rủi ro và điều kiện thực thi.
Cần bao nhiêu lệnh để kết quả đáng tin?
Phụ thuộc vào tần suất, độ độc lập của mẫu, mức biến động và câu hỏi kiểm thử. 100 hoặc 500 lệnh không tự loại bỏ dữ liệu sai, nhìn trước hay chọn mẫu có lợi.
Backtest có bảo đảm lợi nhuận không?
Không. Nó mô tả kết quả lịch sử dưới các giả định đã chọn. Cần đánh giá độ nhạy, dữ liệu chưa dùng để tối ưu và sai lệch thực thi.
Có thể dùng giá đóng cửa để phát tín hiệu không?
Có, sau khi giá đó đã được biết. Không được giả định quyết định hoặc khớp lệnh sớm hơn thời điểm thông tin sẵn có.

