Mục lục nội dung
Những điểm chính
- Viết ra các quy tắc chính xác, có thể đo lường được trước khi kiểm tra.
- Dùng dữ liệu sạch, bao phủ nhiều điều kiện thị trường khác nhau.
- Tính cả spread, hoa hồng, swap và trượt giá.
- Đánh giá chiến lược dựa trên drawdown, kỳ vọng, profit factor và quy mô mẫu, chứ không chỉ dựa vào lợi nhuận.
- Xác thực trên dữ liệu chưa từng thấy để phát hiện overfitting, sau đó xác nhận lại trên tài khoản demo.
- Hiệu suất trong quá khứ không bao giờ đảm bảo kết quả trong tương lai.
Backtesting là gì?
Backtesting là việc áp dụng một bộ quy tắc cố định về vào lệnh, thoát lệnh, quy mô vị thế và quản lý rủi ro lên dữ liệu giá trong quá khứ. Mục tiêu là ước lượng chiến lược có thể đã vận hành ra sao và phát hiện các điểm yếu trước khi chuyển sang forward testing hoặc tài khoản demo.
Để kết quả có ý nghĩa, các quy tắc phải rõ ràng, không mơ hồ. Nếu hai trader có thể hiểu cùng một setup theo hai cách khác nhau, bài kiểm tra chưa đủ nhất quán để đáng tin cậy. Một chiến lược chuẩn cần nêu chính xác khi nào mở lệnh, khi nào đóng lệnh, quy mô vị thế là bao nhiêu và rủi ro được giới hạn như thế nào.
Vì sao backtesting quan trọng?
Nếu không kiểm tra, một ý tưởng giao dịch chỉ là một ý kiến. Backtesting cung cấp cách thức có hệ thống để đánh giá ý tưởng đó trước khi bạn đưa bất kỳ vốn nào vào. Nó giúp bạn:
- Đánh giá một ý tưởng dựa trên dữ liệu lịch sử
- Đo lường mức drawdown và mức độ rủi ro có thể xảy ra
- Phát hiện các quy tắc mơ hồ hoặc thiếu nhất quán
- So sánh kết quả giữa các giai đoạn thời gian khác nhau
- Ước tính tác động của spread, hoa hồng, swap và trượt giá
- Quyết định xem chiến lược có đáng để thử nghiệm trên demo hay không
Backtesting không loại bỏ rủi ro. Nó cho thấy logic của bạn có rõ ràng, đo lường được và được hỗ trợ bởi đủ số lệnh lịch sử hay không.
Backtesting, Forward Testing và Giao dịch Demo: Khác nhau thế nào?
| Phương pháp | Cách thực hiện | Mục đích chính |
|---|---|---|
| Backtesting | Áp dụng chiến lược lên dữ liệu quá khứ, bao phủ hàng tháng hoặc hàng năm một cách nhanh chóng | Đánh giá hiệu suất lịch sử và tìm ra điểm yếu |
| Forward testing | Kiểm tra trên dữ liệu không dùng để xây dựng chiến lược, có thể là dữ liệu lịch sử được giữ lại hoặc dữ liệu mới phát sinh | Kiểm tra chiến lược có còn hiệu quả trên dữ liệu chưa thấy và hạn chế overfitting |
| Giao dịch demo | Chạy chiến lược trên tài khoản mô phỏng với giá thực tế theo thời gian thực | So sánh khả năng khớp lệnh thực tế, spread và thời điểm tín hiệu với các giả định trong backtest |
Cách backtest một chiến lược giao dịch qua 5 bước
Một bài backtest đáng tin cậy cần có quy trình lặp lại được, và mọi giai đoạn nên được ghi chép lại để bạn có thể xem xét logic và các giả định về sau.
- Xác định các quy tắc giao dịch khách quan.
- Chọn dữ liệu lịch sử phù hợp với công cụ, khung thời gian và thị trường của bạn.
- Chọn kiểm tra thủ công hoặc tự động.
- Phân tích rủi ro, lợi nhuận, drawdown và tính nhất quán.
- Xác thực trên dữ liệu chưa thấy trước khi chuyển sang demo.
Bước 1: Xác định các quy tắc khách quan
Hãy viết ra mọi quy tắc trước khi bắt đầu. Chiến lược của bạn cần nêu rõ:
- Công cụ giao dịch và khung thời gian
- Tín hiệu vào lệnh và tín hiệu thoát lệnh
- Phương pháp đặt stop-loss
- Mục tiêu lợi nhuận hoặc điều kiện thoát lệnh
- Phương pháp xác định quy mô vị thế
- Mức rủi ro tối đa cho mỗi lệnh
- Các điều kiện không cho phép mở lệnh
Thay vì viết “mua khi thị trường có vẻ quá bán”, hãy viết một quy tắc đo lường được, chẳng hạn: mở lệnh mua khi chỉ báo RSI 14 kỳ cắt lên trên mức 30 sau khi nến đóng cửa. Điều kiện thoát lệnh cũng cần chính xác như vậy: mục tiêu cố định, tín hiệu chỉ báo, đóng lệnh khi hết phiên hoặc trailing stop. Những quy tắc phụ thuộc vào cách diễn giải sẽ cho kết quả thủ công thiếu nhất quán và không thể lập trình để kiểm tra tự động.
Bước 2: Chọn dữ liệu lịch sử phù hợp
Hãy dùng dữ liệu khớp với công cụ, thị trường và khung thời gian của bạn, đồng thời đảm bảo giai đoạn kiểm tra bao gồm các điều kiện có xu hướng, đi ngang, biến động cao và biến động thấp. Trước khi chạy bài kiểm tra, hãy rà soát:
- Tính đầy đủ: nến bị thiếu, khoảng trống giá hoặc giá sai
- Tính nhất quán về khung thời gian với các quy tắc của bạn
- Sự đa dạng của thị trường qua các điều kiện khác nhau
- Giá bid và ask, nếu có, để phản ánh spread thực tế
- Chi phí giao dịch: hoa hồng, swap và khả năng trượt giá
- Thông số công cụ: kích thước hợp đồng, giờ giao dịch và bước giá tối thiểu
Lượng dữ liệu cần thiết phụ thuộc vào tần suất giao dịch của chiến lược. Một hệ thống giao dịch ít thường cần giai đoạn kiểm tra dài hơn so với hệ thống tạo ra vài tín hiệu mỗi tuần.
Bước 3: Chọn backtesting thủ công hay tự động
Backtesting thủ công nghĩa là xem biểu đồ từng nến một và ghi lại mọi lệnh hợp lệ vào bảng tính hoặc nhật ký giao dịch. Cách này phù hợp với người mới, các chiến lược price action và những phương pháp có một mức độ linh hoạt theo quyết định của trader.
Backtesting tự động chuyển các quy tắc của bạn thành mã lệnh hoặc thiết lập phần mềm và kiểm tra trên một bộ dữ liệu lớn. Cách này hiệu quả hơn với các chiến lược có hệ thống, tín hiệu thường xuyên và việc thử nghiệm tham số lặp lại.
Dù dùng cách nào, hãy ghi lại cùng một bộ thông tin cho mỗi lệnh: giá vào và giá ra, hướng lệnh, stop-loss và mục tiêu, quy mô vị thế, giả định về spread, hoa hồng và trượt giá, lãi hoặc lỗ, lý do vào và thoát lệnh, ngày giao dịch và điều kiện thị trường. Hãy nhớ rằng kết quả của công cụ chỉ đáng tin cậy ngang với các quy tắc, dữ liệu và giả định chi phí mà bạn đưa vào.
Bước 4: Phân tích kết quả
Đừng đánh giá một chiến lược chỉ dựa trên tổng lợi nhuận. Hãy xem xét đồng thời khả năng sinh lời, rủi ro, tính nhất quán và quy mô mẫu. Các chỉ số chính gồm:
- Lợi nhuận ròng: kết quả sau khi trừ chi phí ước tính
- Drawdown tối đa: mức sụt giảm lớn nhất từ đỉnh vốn đến đáy tiếp theo
- Profit factor: tổng lãi gộp chia cho tổng lỗ gộp
- Kỳ vọng (expectancy): mức lãi hoặc lỗ trung bình trên mỗi lệnh
- Tỷ lệ thắng: tỷ lệ các lệnh có lãi
- Tỷ lệ lãi/lỗ trung bình: so sánh lệnh thắng trung bình với lệnh thua trung bình
- Số lượng lệnh: số quan sát hỗ trợ cho kết quả
- Đường vốn (equity curve): mức độ ổn định hay biến động thất thường của kết quả theo thời gian
Một chiến lược có lợi nhuận cao nhưng drawdown quá đau, hoặc chỉ dựa trên rất ít lệnh, có thể chưa đủ đáng tin cậy để tiếp tục.
Bước 5: Xác thực trên dữ liệu chưa thấy
Hãy chia dữ liệu lịch sử thành hai phần. Xây dựng và điều chỉnh chiến lược trên phần đầu, sau đó giữ phần thứ hai để kiểm tra ngoài mẫu (out-of-sample). Nếu chiến lược chỉ hoạt động tốt trên dữ liệu phát triển và thất bại trên giai đoạn chưa thấy, nhiều khả năng nó đã bị overfitting.
Bạn cũng có thể kiểm tra độ bền vững bằng cách thay đổi nhẹ các tham số, spread, chi phí khớp lệnh hoặc ngày kiểm tra. Mục tiêu không phải là cho ra kết quả giống hệt nhau mỗi lần, mà là xem chiến lược có giữ được sự nhất quán ở mức hợp lý khi các giả định thay đổi hay không.
Ví dụ về backtesting thủ công
Ví dụ đơn giản hóa này chỉ mang tính minh họa, không phải khuyến nghị giao dịch.
Quy tắc:
- Công cụ: EUR/USD, biểu đồ 1 giờ
- Vào lệnh: mua khi RSI 14 kỳ cắt lên trên 30 sau khi nến đóng cửa
- Stop loss: bên dưới đáy dao động gần nhất
- Thoát lệnh: đóng khi RSI chạm 60 hoặc khi chạm stop
- Rủi ro: cùng một tỷ lệ phần trăm định trước cho mọi lệnh
- Chi phí: tính cả spread và một khoản dự phòng cho trượt giá
Trader cuộn qua lịch sử từng nến một mà không nhìn trước phần sau, ghi lại mọi setup hợp lệ. Cuối cùng, họ tính tỷ lệ thắng, lãi và lỗ trung bình, drawdown tối đa, profit factor, kỳ vọng và kết quả sau chi phí. Quá trình này cho thấy các quy tắc có đủ rõ ràng để lặp lại hay không, kết quả có phụ thuộc vào một vài lệnh may mắn hay không, và chiến lược hoạt động ra sao trong các điều kiện thị trường khác nhau.
Giải thích các chỉ số backtesting quan trọng
Một bài kiểm tra có lãi vẫn có thể che giấu rủi ro cao, tính nhất quán yếu hoặc chi phí thiếu thực tế, vì vậy hãy đọc từng chỉ số như một phần của bức tranh tổng thể.
Profit Factor
Profit Factor = Lãi gộp ÷ Lỗ gộp
Giá trị trên 1 nghĩa là tổng lãi lớn hơn tổng lỗ trong bài kiểm tra. Không có con số đơn lẻ nào chứng minh được độ tin cậy, vì vậy hãy xem cùng với drawdown, số lượng lệnh, tỷ lệ lãi/lỗ, chi phí và kết quả ngoài mẫu.
Kỳ vọng (Expectancy)
Kỳ vọng = (Tỷ lệ thắng × Lãi trung bình) − (Tỷ lệ thua × Lỗ trung bình)
Kỳ vọng dương nghĩa là sự kết hợp giữa tỷ lệ thắng và quy mô lệnh đã sinh lời trong giai đoạn đó. Điều này không đảm bảo mối quan hệ đó sẽ tiếp tục.
Tỷ lệ thắng và tỷ lệ lãi/lỗ
Tỷ lệ thắng cao vẫn có thể thua lỗ nếu các lệnh thua lớn hơn nhiều so với các lệnh thắng. Ngược lại, tỷ lệ thắng thấp hơn vẫn có thể có lãi nếu lệnh thắng trung bình đủ lớn. Hãy luôn đọc hai chỉ số này cùng nhau.
Drawdown tối đa
Đây là mức sụt giảm lớn nhất từ đỉnh xuống đáy trên đường vốn, cho thấy giai đoạn tệ nhất đã tồi tệ đến mức nào. Hãy xem xét cả theo số tiền lẫn theo phần trăm, và cả thời gian cần để phục hồi.
Số lượng lệnh và chất lượng mẫu
Một vài lệnh bất thường có thể làm sai lệch một mẫu nhỏ. Không có mức tối thiểu chung về số lệnh, nhưng mẫu cần trải dài qua nhiều điều kiện thị trường. Chất lượng quan trọng không kém số lượng, vì một mẫu lớn được xây dựng trên dữ liệu xấu hoặc quy tắc thiếu nhất quán vẫn gây hiểu lầm.
Spread, hoa hồng và trượt giá
Chi phí có thể làm thay đổi kết quả đáng kể, đặc biệt với các chiến lược giao dịch thường xuyên hoặc nhắm đến các biến động nhỏ. Một bài kiểm tra thực tế cần tính spread bid-ask, hoa hồng, phí qua đêm khi áp dụng và trượt giá giữa giá yêu cầu và giá khớp thực tế. Nếu nền tảng của bạn hỗ trợ spread biến động hoặc các thiết lập khớp lệnh, hãy dùng chúng thay vì một giả định cố định duy nhất. Một chiến lược không còn có lãi khi đã tính chi phí thực tế thì ngay từ đầu đã không thực tế.
Những lỗi backtesting thường gặp
Nhiều lỗi xuất phát từ việc tập trung vào con số cuối cùng thay vì quy trình đằng sau. Hãy cảnh giác với:
- Overfitting dữ liệu lịch sử
- Dùng thông tin mà lúc đó chưa thể biết (look-ahead bias)
- Chỉ kiểm tra trong các điều kiện thị trường thuận lợi
- Bỏ qua chi phí và thanh khoản
- Thay đổi quy tắc giữa chừng sau khi đã thấy diễn biến tiếp theo
Overfitting
Overfitting là việc chỉnh sửa chiến lược cho đến khi nó khớp gần như hoàn hảo với một mẫu dữ liệu, khiến nó chỉ nắm bắt nhiễu ngẫu nhiên thay vì hành vi có thể lặp lại. Các dấu hiệu cảnh báo gồm:
- Quá nhiều chỉ báo hoặc điều kiện
- Các tham số chỉ được chọn vì cho kết quả lịch sử tốt nhất
- Kết quả trong mẫu rất mạnh nhưng ngoài mẫu lại yếu
- Hiệu suất sụp đổ chỉ sau một thay đổi nhỏ của tham số
Hãy giữ quy tắc đơn giản, giữ lại dữ liệu chưa thấy để xác thực, và kiểm tra xem những thay đổi nhỏ có làm hỏng kết quả hay không.
Look-Ahead Bias
Lỗi này xảy ra khi bài kiểm tra dùng thông tin mà trader không thể có tại thời điểm ra quyết định, chẳng hạn hình dạng cuối cùng của một cây nến chưa đóng cửa, hoặc dữ liệu bị lệch trong một bài kiểm tra tự động. Khi backtest thủ công, đừng bao giờ để lộ các nến tương lai. Khi backtest tự động, hãy kiểm tra cách các chỉ báo và chuỗi dữ liệu được tính toán.
Chỉ kiểm tra trong điều kiện thuận lợi
Một chiến lược chỉ được kiểm tra trong giai đoạn xu hướng mạnh có thể trông rất ấn tượng, rồi gặp khó khăn khi thị trường đi ngang hoặc biến động. Hãy dùng giai đoạn bao gồm nhiều môi trường khác nhau, và xem kết quả theo năm, tháng, công cụ hoặc chế độ thị trường nếu có thể.
Bỏ qua chi phí và thanh khoản
Việc bỏ qua spread, hoa hồng, swap và trượt giá có thể thổi phồng hiệu suất nghiêm trọng, đặc biệt với các chiến lược tần suất cao hoặc lãi nhỏ trên mỗi lệnh. Cũng đừng giả định rằng mọi lệnh đều khớp ngay lập tức ở mức giá mong muốn trong mọi điều kiện thị trường.
Thay đổi quy tắc giữa chừng
Điều chỉnh quy tắc vào hoặc thoát lệnh sau khi đã thấy các cây nến tiếp theo là đưa góc nhìn hậu kiến vào bài kiểm tra. Hãy viết chiến lược trước và áp dụng cho mọi setup hợp lệ. Mọi thay đổi nên trở thành một phiên bản mới của chiến lược với một bài kiểm tra mới hoàn toàn.
Cách chọn phương pháp backtesting
Phương pháp phù hợp phụ thuộc vào chiến lược của bạn, chứ không phụ thuộc vào công cụ nào phổ biến nhất. Hãy cân nhắc:
- Cách tiếp cận kiểm tra: thủ công hay tự động
- Tính tương thích thị trường: hỗ trợ các công cụ và khung thời gian của bạn
- Chất lượng dữ liệu: đủ dữ liệu lịch sử chính xác và chi tiết
- Mô phỏng chi phí: spread, hoa hồng, trượt giá và các chi phí khác
- Yêu cầu kỹ thuật: có cần kỹ năng lập trình hay không
- Báo cáo: các chỉ số và báo cáo được tạo ra sau mỗi lần chạy
- Tính năng xác thực: kiểm tra ngoài mẫu và điều chỉnh tham số
Quy trình chung để chạy backtest trên một nền tảng
Dù dùng nền tảng nào, quy trình nhìn chung cũng tương tự:
- Mở môi trường kiểm tra.
- Chọn chiến lược tự động hoặc phương pháp dựa trên quy tắc.
- Chọn công cụ và khung thời gian.
- Đặt giai đoạn kiểm tra lịch sử.
- Xem lại các thiết lập khớp lệnh và mô hình hóa.
- Chạy bài kiểm tra.
- Phân tích báo cáo, đường vốn, drawdown và danh sách lệnh.
- Lặp lại với các giai đoạn khác hoặc dữ liệu ngoài mẫu.
Các thiết lập cần phản ánh đúng quy tắc thực tế của chiến lược và chi phí giao dịch thực tế. Sau bài kiểm tra lịch sử, hãy đánh giá chiến lược trong môi trường demo trước khi đưa ra bất kỳ quyết định nào liên quan đến vốn thật.
Việc cần làm sau khi backtest
Một bài backtest tốt không có nghĩa là chiến lược đã sẵn sàng để giao dịch thật. Giai đoạn tiếp theo là forward testing trên tài khoản demo với giá hiện tại, giúp bạn so sánh việc khớp lệnh theo thời gian thực với các giả định trong backtest. Hãy theo dõi:
- Spread và khả năng trượt giá
- Thời điểm vào lệnh và tần suất tín hiệu
- Các lệnh bị bỏ lỡ hoặc vào trễ
- Sự khác biệt về drawdown
- Khoảng cách giữa đường vốn backtest và đường vốn forward test
Nếu kết quả demo khác biệt đáng kể, hãy tìm hiểu nguyên nhân trước khi đi tiếp. Hãy coi backtesting, xác thực ngoài mẫu và giao dịch demo là các bước kiểm tra nối tiếp nhau, chứ không phải những lời đảm bảo riêng lẻ.
Hạn chế của backtesting
Backtesting dựa vào lịch sử và không thể dự đoán tương lai. Ngay cả một bài kiểm tra được thực hiện cẩn thận cũng có thể bị phá vỡ khi cấu trúc thị trường, thanh khoản, biến động, spread hoặc tương quan thay đổi. Mô phỏng cũng có thể khác với giao dịch thực do trượt giá, độ trễ lệnh, lệnh bị từ chối, dữ liệu không đầy đủ hoặc giả định chi phí sai. Và không bài kiểm tra nào có thể tái hiện áp lực tâm lý và các sai sót khi ra quyết định xuất hiện lúc có tiền thật trên bàn. Hãy coi kết quả là một ước tính dựa trên các quy tắc cụ thể và điều kiện trong quá khứ, chứ không phải dự báo.
Câu hỏi thường gặp
1. Làm thế nào để backtest một chiến lược giao dịch?
Xác định rõ các quy tắc vào lệnh, thoát lệnh, quy mô vị thế và rủi ro, chọn dữ liệu lịch sử đáng tin cậy, tính cả chi phí thực tế, rồi kiểm tra thủ công hoặc bằng phần mềm. Sau đó xem xét các chỉ số và xác thực trên dữ liệu chưa thấy trước khi giao dịch demo.
2. Một bài backtest nên có bao nhiêu lệnh?
Không có con số cố định. Nó phụ thuộc vào tần suất chiến lược, thời gian nắm giữ, thị trường và các điều kiện được bao phủ. Mẫu cần đủ lớn để một vài lệnh bất thường không quyết định kết luận.
3. Có thể backtest một chiến lược giao dịch theo cảm tính (discretionary) không?
Có, nhưng cần ghi chép rõ các phần mang tính chủ quan. Backtesting thủ công thường phù hợp với những chiến lược này. Hãy lưu ảnh chụp màn hình, giải thích vì sao mỗi lệnh đáp ứng quy tắc và đánh giá mọi ví dụ theo cùng một cách.
4. Profit factor thế nào là tốt?
Giá trị trên 1 nghĩa là tổng lãi vượt tổng lỗ trong bài kiểm tra. Bản thân nó không chứng minh được độ tin cậy, vì vậy hãy xem cùng với drawdown, số lượng lệnh, tỷ lệ lãi/lỗ, chi phí và kết quả ngoài mẫu.
5. Làm sao nhận biết một bài backtest bị overfitting?
Nó hoạt động rất tốt trên dữ liệu phát triển nhưng thất bại trên dữ liệu mới. Các dấu hiệu cảnh báo khác là quá nhiều tham số, các thiết lập quá chính xác đến từng chi tiết và hiệu suất dao động mạnh sau những điều chỉnh nhỏ.
6. Có thể backtest trực tuyến không?
Có, bằng các nền tảng biểu đồ hoặc công cụ trên trình duyệt cho phép phát lại lịch sử hoặc chạy các script chiến lược. Hãy kiểm tra trước về chất lượng dữ liệu, thị trường được hỗ trợ, giả định chi phí và khả năng tương thích với quy tắc của bạn.
Miễn trừ trách nhiệm: Bài viết này chỉ nhằm mục đích giáo dục và không phải lời khuyên tài chính. Kết quả trong quá khứ không đảm bảo hiệu suất trong tương lai, và giao dịch tiềm ẩn rủi ro thua lỗ cao.
