Backtest thế nào cho đúng: bảy cách tự lừa mình

Phái sinh VN30F1MCập nhật 13/09/2026

Ai cũng chạy ra được một đường vốn đẹp. Vấn đề là phần lớn đường vốn đẹp đến từ việc vô tình cho mô hình biết trước tương lai, chứ không đến từ một lợi thế thật.

Backtest là chạy một bộ quy tắc trên dữ liệu quá khứ để xem nó đã từng hoạt động chưa. Nghe như một phép thử khách quan, nhưng thực tế backtest là công cụ dễ tự lừa mình nhất trong toàn bộ nghề này.

Lý do đơn giản: bạn biết quá khứ đã diễn ra thế nào. Mọi lựa chọn bạn đưa ra — chọn chỉ báo nào, tham số bao nhiêu, thử trên giai đoạn nào — đều bị nhiễm bởi hiểu biết đó, kể cả khi bạn thành thật với chính mình.

Bài này đi qua bảy cách phổ biến nhất mà một backtest trở nên vô nghĩa.

Một: cho mô hình biết trước tương lai

Đây là lỗi chết người nhất vì nó thường nằm ẩn trong một dòng mã trông hoàn toàn vô hại.

Ví dụ kinh điển: bạn tính tín hiệu dựa trên giá đóng cửa của phiên, rồi giả định vào lệnh ở giá đóng cửa cùng phiên đó. Trên giấy thì hợp lý. Trên thực tế bạn chỉ biết giá đóng cửa sau khi phiên đã đóng, lúc đó không còn đặt lệnh được nữa.

Biến thể tinh vi hơn: chuẩn hoá dữ liệu bằng trung bình và độ lệch chuẩn tính trên toàn bộ tập dữ liệu, rồi mới chia tập huấn luyện và tập kiểm tra. Con số trung bình đó đã chứa thông tin từ tương lai, và nó rò rỉ vào mọi phép tính phía sau.

Dấu hiệu nhận biết: đường vốn mượt bất thường, tỷ lệ thắng cao vô lý, kết quả tốt đều ở mọi giai đoạn thị trường. Khi backtest đẹp quá mức, giả định đầu tiên nên là có rò rỉ dữ liệu, không phải bạn vừa tìm ra mỏ vàng.

Hai: chỉ nhìn những mã còn sống

Nếu bạn lấy danh sách VN30 hiện tại rồi backtest ngược năm năm, bạn đang mắc thiên lệch sống sót. Rổ VN30 của năm năm trước có những mã đã rời rổ, có mã đã bị huỷ niêm yết. Bạn đang kiểm định trên tập những mã đã chứng minh được rằng chúng sống sót.

Với người giao dịch VN30F1M thì vấn đề này nhẹ hơn vì chỉ có một hợp đồng. Nhưng với chiến lược trên cổ phiếu, đây là lỗi làm đẹp kết quả một cách có hệ thống. Giải pháp là dùng dữ liệu thành phần rổ đúng theo từng thời điểm lịch sử.

Ba: tối ưu tới mức thuộc lòng dữ liệu

Bạn thử trung bình động 10 phiên, kết quả tạm. Thử 15, khá hơn. Thử 14, đẹp hơn nữa. Dừng ở 14.

Bạn vừa không tìm ra quy luật của thị trường. Bạn tìm ra con số khớp nhất với nhiễu của đúng đoạn dữ liệu này.

100110120130140150130Tối ưu quá mứcTham số đơn giảnSụt giảm từ đỉnh (%)-13%
Đường xanh đậm là chiến lược tối ưu tới tham số đẹp nhất trên dữ liệu huấn luyện. Nó vượt trội cho tới khoảng giữa — đúng điểm hết dữ liệu huấn luyện — rồi mất hết lợi thế. Hình minh hoạ cơ chế, không phải kết quả thật.

Cách chống: giảm số tham số xuống mức tối thiểu, ưu tiên quy tắc đơn giản, và kiểm tra xem kết quả có ổn định khi tham số xê dịch không. Nếu 14 phiên cho kết quả tuyệt vời còn 13 và 15 phiên cho kết quả tệ, bạn đang nhìn vào nhiễu chứ không phải tín hiệu.

Bốn: bỏ quên chi phí

Một chiến lược trong phiên đặt hai trăm lệnh mỗi tháng, mỗi lệnh kiếm trung bình nửa điểm. Trên giấy là một trăm điểm mỗi tháng, nghe rất hấp dẫn.

Trừ đi phí giao dịch, phí lưu ký và thuế cho mỗi vòng mua bán, con số đó teo lại đáng kể. Nhiều chiến lược tần suất cao sinh lời trước chi phí và lỗ sau chi phí — và khoảng cách giữa hai trạng thái này chỉ là một dòng mã bạn quên viết.

Quy tắc an toàn: luôn đưa chi phí vào backtest ngay từ phiên bản đầu tiên, dùng số thật từ biểu phí công ty chứng khoán bạn dùng, không phải con số ước chừng.

Năm: giả định khớp lệnh quá đẹp

Backtest thường giả định lệnh khớp đúng giá bạn muốn. Thị trường thật không hoạt động vậy.

Trượt giá xảy ra vì ba lý do: độ trễ giữa lúc tín hiệu phát ra và lúc lệnh tới sàn, khoảng cách giữa giá mua và giá bán trên sổ lệnh, và ảnh hưởng của chính lệnh bạn lên giá khi khối lượng lớn.

Với VN30F1M, trượt nửa bước giá trên mỗi chiều đã là một phần mười điểm, tức mười nghìn đồng một hợp đồng. Nhân với số lệnh trong năm, con số này không nhỏ.

Cách xử lý trung thực nhất: giả định xấu. Khớp ở giá bất lợi hơn giá bạn muốn, rồi xem chiến lược còn sống không. Nếu chỉ cần thêm một chút trượt giá là chiến lược sụp, nó chưa bao giờ thật sự sinh lời.

Sáu: nhìn lợi nhuận mà không nhìn đường đi

Hai chiến lược cùng cho lợi nhuận 30% một năm. Một cái đi lên đều đặn, cái kia có giai đoạn giữa mất 40% rồi mới hồi.

Về mặt toán học chúng ngang nhau. Về mặt thực tế chúng hoàn toàn khác, vì không ai vận hành nổi cái thứ hai. Bạn sẽ tắt bot đúng đáy, như mọi người khác.

Vì thế mọi đánh giá phải nhìn ít nhất ba con số cùng lúc: lợi nhuận, mức sụt giảm sâu nhất từ đỉnh, và thời gian nằm dưới đỉnh cũ. Con số thứ ba ít được nhắc nhất nhưng lại quyết định nhiều nhất — chịu lỗ 20% trong hai tuần khác hẳn chịu lỗ 20% kéo dài tám tháng.

90100110120130140138Chiến lượcSụt giảm từ đỉnh (%)-28%
Cùng mức lợi nhuận cuối kỳ, nhưng dải bên dưới mới nói lên trải nghiệm thật của người vận hành. Hình minh hoạ cách đọc, không phải kết quả thật.

Bảy: kiểm định trên chính dữ liệu đã dùng để xây

Đây là lỗi bao trùm, và là lý do tồn tại của walk-forward.

Thay vì tối ưu tham số trên toàn bộ năm năm rồi báo kết quả trên chính năm năm đó, bạn chia dữ liệu thành các đoạn liên tiếp. Tối ưu trên đoạn một, kiểm trên đoạn hai. Rồi tối ưu trên đoạn một và hai, kiểm trên đoạn ba. Cứ thế trượt dần.

Kết quả thu được chỉ gồm những đoạn mà mô hình chưa từng nhìn thấy lúc chọn tham số. Nó gần với thực tế vận hành hơn nhiều, và gần như luôn xấu hơn backtest thường — đó chính là điểm.

Một backtest đáng tin trông thế nào

Không phải đẹp. Một backtest đáng tin thường trông khá bình thường: lợi nhuận vừa phải, có những giai đoạn thua rõ ràng, đường vốn gập ghềnh.

Điều quan trọng là nó phải trả lời được bốn câu: dữ liệu lấy từ đâu và đã kiểm tra chất lượng chưa; chi phí và trượt giá giả định bao nhiêu; tham số cố định hay được tối ưu, nếu tối ưu thì trên đoạn nào; và có bao nhiêu lệnh — vì ba mươi lệnh không nói lên điều gì về mặt thống kê.

Khi bốn câu đó có câu trả lời rõ ràng, bạn mới có cơ sở để bước sang chạy song song và tiến tới tiền thật. Còn phần quyết định bạn sống sót qua giai đoạn thua — khối lượng vị thế và giới hạn thua lỗ — nằm ở cụm quản trị rủi ro.

Câu hỏi thường gặp

Backtest cần bao nhiêu dữ liệu mới đủ tin?
Quan trọng hơn độ dài là số lần giao dịch và số chu kỳ thị trường đi qua. Một chiến lược có 30 lệnh trong 5 năm thì 5 năm dữ liệu vẫn quá ít; một chiến lược trong phiên có 2.000 lệnh trong một năm lại khác.
Sharpe bao nhiêu thì gọi là tốt?
Con số đó phụ thuộc tần suất giao dịch và cách tính. Đáng ngờ hơn là khi Sharpe quá cao: trên 3 với chiến lược đơn giản gần như luôn có nghĩa là dữ liệu bị rò rỉ tương lai ở đâu đó.
Walk-forward khác gì backtest thường?
Backtest thường tối ưu tham số trên toàn bộ dữ liệu rồi báo kết quả trên chính dữ liệu đó. Walk-forward tối ưu trên một đoạn rồi kiểm trên đoạn kế tiếp chưa từng thấy, lặp lại trượt dần — gần với thực tế vận hành hơn nhiều.
Có nên tin backtest của người khác không?
Chỉ khi họ công bố đủ để bạn chạy lại: dữ liệu nguồn nào, giả định chi phí bao nhiêu, tham số cố định hay tối ưu, và số lệnh là bao nhiêu. Thiếu một trong bốn thứ đó thì đường vốn chỉ là một bức tranh.

Đọc tiếp