Backtest là gì
Backtest là việc chạy các quy tắc của chiến lược trên dữ liệu giá quá khứ để xem các quy tắc đó lẽ ra đã tạo ra những lệnh nào và kết quả ra sao. Có thể làm thủ công (lướt biểu đồ, ghi lại từng lệnh) hoặc tự động (viết code, ví dụ Expert Advisor chạy trong Strategy Tester của MetaTrader).
Backtest không chứng minh chiến lược sẽ có lãi. Nó chỉ trả lời câu hỏi hẹp hơn: trong điều kiện đã qua, với giả định chi phí và khớp lệnh của bạn, các quy tắc này hành xử thế nào. Thị trường thay đổi, nên kết quả quá khứ không bảo đảm kết quả tương lai. Giao dịch CFD và forex có đòn bẩy có thể mất tiền rất nhanh, kể cả với chiến lược có backtest đẹp.
Sẵn sàng thử trên tài khoản thật hoặc demo?
Liên kết đối tác · giao dịch có rủi ro thua lỗ cao
Quy tắc phải viết rõ trước khi kiểm tra
Kiểm tra chiến lược bằng dữ liệu quá khứ chỉ có nghĩa khi quy tắc không cần phán đoán. Mỗi điểm dưới đây cần ghi thành câu cụ thể:
- Thị trường và khung thời gian: cặp tiền hoặc sản phẩm nào, biểu đồ khung nào.
- Điều kiện vào lệnh: tín hiệu nào, xét tại giá đóng nến hay trong nến.
- Điều kiện thoát: stop loss (lệnh cắt lỗ), take profit (lệnh chốt lời), thoát theo thời gian hoặc theo tín hiệu ngược.
- Khối lượng: cố định hay theo phần trăm rủi ro tài khoản. Xem thêm Quản lý rủi ro.
- Bộ lọc: giờ giao dịch, tránh tin lớn, điều kiện xu hướng.
Nếu quy tắc có chữ "thường thì" hoặc "trông có vẻ", backtest thủ công sẽ bị thiên lệch theo những gì bạn đã biết về diễn biến sau đó. Cách đặt quy tắc vào kế hoạch tổng thể có ở trang Xây dựng trading plan.
Chất lượng dữ liệu
Dữ liệu sai cho kết quả sai, dù quy tắc đúng.
- Dữ liệu nến và dữ liệu tick: nến chỉ có giá mở, cao, thấp, đóng. Khi stop loss và take profit cùng nằm trong phạm vi của nến, phần mềm phải đoán cái nào chạm trước. Với chiến lược có mục tiêu ngắn như Scalping, cần dữ liệu tick thực hoặc ít nhất là khung nhỏ hơn nhiều so với khung giao dịch.
- Giá bid và ask: nhiều nguồn chỉ có giá bid. Lệnh mua khớp ở ask, nên bỏ qua spread làm kết quả đẹp hơn thực tế.
- Khoảng trống và lỗi: kiểm tra dữ liệu thiếu cuối tuần bất thường, nến trùng lặp, giá nhảy vô lý.
- Múi giờ: nến ngày và giờ mở phiên phụ thuộc múi giờ máy chủ. Chiến lược theo phiên như London breakout rất nhạy với điểm này.
- Độ dài lịch sử: dữ liệu nên bao gồm nhiều trạng thái thị trường: có xu hướng, đi ngang, biến động mạnh, biến động thấp.
Đưa chi phí vào kết quả
Chi phí là lý do phổ biến khiến chiến lược có lãi trên giấy trở thành lỗ khi giao dịch thật.
| Chi phí | Cách đưa vào backtest |
|---|---|
| Spread (chênh lệch giá mua và bán) | Dùng spread thay đổi theo thời gian nếu có; nếu không, dùng mức thận trọng, rộng hơn vào giờ thanh khoản thấp và quanh tin |
| Commission (phí theo khối lượng) | Trừ theo từng lệnh nếu loại tài khoản có tính phí này |
| Swap (phí qua đêm) | Tính cho lệnh giữ qua đêm; xem Phí swap |
| Slippage (trượt giá) | Cộng thêm độ trượt bất lợi cho lệnh stop và lệnh thị trường |
Điều kiện chi phí của mỗi nhà môi giới khác nhau và có thể thay đổi; nếu dùng Exness, hãy kiểm tra điều kiện hiện hành trong khu vực cá nhân hoặc trên trang chính thức. Một cách kiểm tra đơn giản: nhân đôi chi phí giả định và chạy lại. Nếu kết quả sụp đổ, chiến lược có biên lợi nhuận quá mỏng.
In-sample và out-of-sample
Chia dữ liệu thành các phần riêng:
- In-sample: phần dùng để xây dựng và chỉnh tham số.
- Out-of-sample: phần để riêng, không nhìn vào cho đến khi quy tắc đã chốt.
Chạy out-of-sample chỉ có giá trị nếu bạn không quay lại sửa quy tắc sau khi thấy kết quả. Mỗi lần sửa rồi chạy lại, phần out-of-sample dần trở thành in-sample.
Walk-forward
Walk-forward là cách lặp lại việc chia dữ liệu theo thời gian:
- Tối ưu tham số trên đoạn dữ liệu cũ.
- Áp tham số đó lên đoạn tiếp theo chưa dùng.
- Dịch cửa sổ về phía trước và lặp lại.
- Ghép các đoạn kiểm tra lại để xem kết quả tổng.
Cách này mô phỏng việc bạn chỉ biết dữ liệu đến thời điểm đó. Nếu tham số tối ưu thay đổi mạnh giữa các cửa sổ và kết quả kiểm tra kém hẳn so với kết quả tối ưu, chiến lược có thể đang bám vào nhiễu.
Kiểm tra overfitting
Overfitting (quá khớp) là khi quy tắc được chỉnh để khớp với dữ liệu quá khứ đến mức chỉ còn mô tả nhiễu. Dấu hiệu thường gặp:
- Nhiều tham số và bộ lọc, mỗi cái chỉ để loại vài lệnh thua.
- Kết quả tốt ở đúng giá trị tham số, nhưng xấu khi thay đổi nhẹ. Nên tìm vùng tham số ổn định, không phải điểm đỉnh.
- Chỉ hoạt động trên sản phẩm hoặc giai đoạn đã chọn.
- Số lệnh quá ít để phân biệt kỹ năng với may rủi.
Các phép thử hữu ích: chạy trên cặp tiền tương tự, xáo trộn thứ tự lệnh để xem dải drawdown có thể xảy ra (Monte Carlo), bỏ bớt bộ lọc xem kết quả còn đứng không.
Đọc kết quả
Đừng chỉ nhìn tổng lợi nhuận. Cần xem:
- Drawdown tối đa: mức sụt giảm lớn nhất từ đỉnh vốn. Hỏi thẳng: bạn có tiếp tục giao dịch qua mức sụt này không.
- Expectancy: kết quả trung bình mỗi lệnh sau chi phí.
- Profit factor: tổng lãi chia tổng lỗ.
- Chuỗi thua dài nhất và thời gian vốn nằm dưới đỉnh cũ.
- Phân bố lãi: nếu phần lớn lợi nhuận đến từ vài lệnh, kết quả mong manh.
Các công thức tính khối lượng và rủi ro có ở Công cụ tính toán.
Những cách backtest dẫn đến thua lỗ
- Look-ahead bias: dùng thông tin chưa có tại thời điểm vào lệnh, ví dụ giá đóng nến khi lệnh vào giữa nến.
- Bỏ qua chi phí và trượt giá, nhất là quanh tin như NFP hay FOMC.
- Chọn giai đoạn đẹp và bỏ đoạn xấu.
- Đòn bẩy quá cao so với drawdown của backtest: drawdown thực tế có thể sâu hơn và chạm stop-out (mức hệ thống tự đóng lệnh vì thiếu ký quỹ).
- Chiến lược gồng lỗ như Martingale hoặc Grid: backtest có thể trông mượt rất lâu rồi mất phần lớn tài khoản trong giai đoạn giá đi mạnh một chiều.
- Tâm lý khác giấy tờ: bỏ lệnh sau chuỗi thua, điều backtest không mô phỏng. Xem Tâm lý giao dịch.
Ví dụ giả định
Ví dụ minh họa, không phải kết quả thật và không phải khuyến nghị. Bạn kiểm tra quy tắc giao cắt đường MA trên EURUSD: mua khi MA ngắn cắt lên MA dài tại giá đóng nến, bán khi cắt xuống, stop loss đặt dưới đáy gần nhất. Bạn tối ưu độ dài MA trên dữ liệu cũ, rồi chạy walk-forward. Nếu kết quả kiểm tra chỉ đứng được khi spread thấp và chỉ ở đúng cặp độ dài MA đã chọn, đó là dấu hiệu overfitting và chi phí quá nhạy, cần loại hoặc đơn giản hóa quy tắc.
Sau backtest
Bước tiếp theo là forward test trên tài khoản demo: chạy quy tắc trong thời gian thực để kiểm tra khớp lệnh, spread thực và kỷ luật của chính bạn. Với chiến lược tự động, xem thêm Giao dịch thuật toán. Về tình trạng pháp lý của giao dịch forex tại Việt Nam, đọc Pháp lý và an toàn.
Câu hỏi thường gặp
Backtest là gì nói ngắn gọn?
Là chạy quy tắc giao dịch trên dữ liệu giá quá khứ để xem các lệnh và kết quả lẽ ra đã xảy ra, có tính chi phí.
Backtest thủ công hay tự động tốt hơn?
Tự động nhanh và nhất quán hơn nhưng cần code đúng. Thủ công giúp hiểu thị trường nhưng dễ thiên lệch vì bạn đã thấy giá sau đó.
Backtest có lãi thì giao dịch thật có lãi không?
Không chắc. Thị trường thay đổi, chi phí thực và tâm lý khác giả định. Giao dịch có đòn bẩy vẫn có thể mất tiền nhanh.
Cần bao nhiêu dữ liệu?
Không có con số chung. Dữ liệu cần đủ dài để bao gồm nhiều trạng thái thị trường và tạo đủ lệnh để kết quả không chỉ là may rủi.
Làm sao biết chiến lược bị overfitting?
Kết quả tốt in-sample nhưng kém out-of-sample, nhạy với thay đổi nhỏ của tham số, và chỉ chạy trên đúng sản phẩm đã chọn.
