Trang chủBlogKinh nghiệm TradingWalk-forward testing là gì và vì sao nó quan trọng hơn backtest thường?
Walk-forward testing là gì và vì sao nó quan trọng hơn backtest thường?
Kinh nghiệm Trading

Walk-forward testing là gì và vì sao nó quan trọng hơn backtest thường?

Walk-forward testing là gì và vì sao nó quan trọng hơn backtest thường?

Ngọc Hải LươngNgọc Hải Lương
19/5/2026
15 phút phút đọc
28 lượt xem

Trong đầu tư định lượng, rất nhiều người bắt đầu bằng một việc quen thuộc: nghĩ ra một chiến lược, lấy dữ liệu quá khứ, chạy thử và xem kết quả. Nếu đường lợi nhuận đi lên đẹp, drawdown thấp, tỷ lệ thắng ổn, họ dễ kết luận rằng chiến lược này có thể dùng được. Nhưng vấn đề nằm ở chỗ: một chiến lược đẹp trong quá khứ chưa chắc sống được ngoài thị trường thật. Đây chính là lý do Walk-forward testing quan trọng.

Walk-forward testing không chỉ kiểm tra xem chiến lược từng hoạt động tốt hay không. Nó kiểm tra một câu hỏi thực tế hơn rất nhiều: nếu tại từng thời điểm trong quá khứ, mình chỉ được dùng dữ liệu đã biết ở thời điểm đó để xây chiến lược, rồi đem chiến lược đó giao dịch ở giai đoạn tiếp theo, kết quả sẽ ra sao?

Nói đơn giản, backtest thường giống như nhìn lại cả bài thi rồi chọn cách làm đẹp nhất. Còn Walk-forward testing giống hơn với thực chiến: chỉ có dữ liệu quá khứ, phải ra quyết định ở hiện tại, rồi chịu kết quả ở tương lai chưa biết.

6f477014-54b9-4b4f-a972-5d8c3577b91c.png

(1) Walk-forward testing là gì?

Walk-forward testing là một phương pháp kiểm định chiến lược bằng cách chia dữ liệu thành nhiều giai đoạn theo thời gian. Mỗi giai đoạn sẽ có hai phần: phần dùng để huấn luyện, tối ưu hoặc chọn tham số; và phần dùng để kiểm tra kết quả ngoài mẫu. Sau khi kiểm tra xong, cửa sổ dữ liệu được trượt sang giai đoạn tiếp theo và quá trình lặp lại.

Ví dụ có dữ liệu từ năm 2016 đến 2025. Thay vì lấy toàn bộ dữ liệu này để tối ưu chiến lược một lần, ta có thể làm như sau: dùng dữ liệu 2016–2018 để tối ưu chiến lược, sau đó test trên năm 2019. Tiếp theo dùng dữ liệu 2017–2019 để tối ưu lại, rồi test trên năm 2020. Sau đó dùng 2018–2020 để tối ưu, test trên 2021. Cứ như vậy cho đến hết dữ liệu.

Điểm quan trọng nằm ở chỗ: mỗi giai đoạn test đều là dữ liệu “chưa từng được dùng để tối ưu”. Điều này mô phỏng đúng hơn cách một chiến lược được vận hành trong thực tế. Khi đứng ở đầu năm 2020, bạn không thể biết trước dữ liệu của 2021 hay 2022. Bạn chỉ có thể dùng những gì đã xảy ra trước đó để đưa ra quyết định.

Kết quả cuối cùng của Walk-forward testing không phải là một đường backtest đẹp được tạo ra từ việc tối ưu trên toàn bộ quá khứ. Nó là chuỗi các kết quả out-of-sample được nối lại với nhau. Mỗi đoạn trong chuỗi đó trả lời câu hỏi: chiến lược này có hoạt động được khi bước sang một giai đoạn mới không?

Đây là khác biệt rất lớn. Một chiến lược có thể cực kỳ đẹp nếu tối ưu trên toàn bộ dữ liệu từ 2016 đến 2025, nhưng lại thất bại nếu phải liên tục tự chứng minh ở từng giai đoạn mới. Walk-forward testing giúp bóc tách điều đó.

Bản chất của Walk-forward testing là kiểm tra khả năng thích nghi. Thị trường không đứng yên. Có giai đoạn thanh khoản cao, có giai đoạn dòng tiền co lại. Có giai đoạn cổ phiếu đi theo xu hướng rất rõ, có giai đoạn chỉ số đi ngang và breakout liên tục thất bại. Một chiến lược chỉ tốt trong một bối cảnh chưa chắc còn tốt khi bối cảnh thay đổi. Walk-forward testing không đảm bảo chiến lược sẽ thắng trong tương lai, nhưng nó giúp giảm khả năng mình tự lừa mình bằng một backtest quá đẹp.

(2) Vì sao backtest thường dễ gây ảo giác?

Backtest thường, hay static backtest, là cách kiểm tra chiến lược trên một giai đoạn dữ liệu cố định. Ví dụ bạn lấy dữ liệu 10 năm, chọn một bộ quy tắc, chạy chiến lược và xem kết quả. Về mặt kỹ thuật, đây là bước cần thiết. Nhưng nếu dừng ở đó, rủi ro rất lớn.

Vấn đề đầu tiên là overfitting. Khi có quá nhiều tham số để tối ưu, bạn gần như luôn có thể tìm được một bộ tham số đẹp trong quá khứ. Ví dụ một chiến lược momentum có thể dùng lookback 20 ngày, 40 ngày, 60 ngày, 90 ngày. Stop loss có thể là 5%, 7%, 10%. Điều kiện thanh khoản có thể là trung bình 10 phiên, 20 phiên, 50 phiên. Nếu thử đủ nhiều tổ hợp, chắc chắn sẽ có một tổ hợp cho ra kết quả rất đẹp.

Nhưng kết quả đó có thể không phải vì chiến lược có lợi thế thật. Nó có thể chỉ là vì bộ tham số đó tình cờ khớp với dữ liệu cũ. Nói cách khác, chiến lược không học được quy luật thị trường; nó chỉ học thuộc nhiễu của quá khứ.

Ví dụ, bạn backtest một chiến lược breakout và phát hiện rằng mua khi giá vượt đỉnh 37 phiên cho kết quả tốt nhất, trong khi 35 phiên hoặc 40 phiên lại kém hơn. Câu hỏi cần đặt ra là: con số 37 đó có logic thật không, hay chỉ là một kết quả ngẫu nhiên của dữ liệu cũ? Nếu không kiểm tra ngoài mẫu, rất khó biết được.

Vấn đề thứ hai là look-ahead bias, tức vô tình nhìn trước tương lai. Điều này xảy ra khi dữ liệu tương lai bị đưa vào quá trình ra quyết định, dù đôi khi người làm backtest không nhận ra. Ví dụ dùng danh sách cổ phiếu hiện tại để backtest quá khứ, trong khi nhiều cổ phiếu yếu đã bị hủy niêm yết hoặc biến mất. Hoặc dùng báo cáo tài chính tại thời điểm chưa thật sự được công bố. Những lỗi này làm chiến lược nhìn đẹp hơn thực tế.

Vấn đề thứ ba là regime bias. Một chiến lược có thể được xây dựng và tối ưu trong một giai đoạn thị trường rất thuận lợi. Ví dụ giai đoạn thị trường tăng mạnh, chiến lược mua breakout gần như cái gì cũng thắng. Nhưng khi bước sang thị trường sideway hoặc giảm, chính chiến lược đó có thể bị false breakout liên tục. Static backtest có thể che giấu điều này nếu tổng kết quả cuối cùng vẫn đẹp.

Vấn đề thứ tư là chi phí giao dịch và khả năng khớp lệnh. Nhiều chiến lược nhìn rất tốt trước khi tính phí, thuế, spread và trượt giá. Nhưng khi đưa vào thực tế, lợi nhuận bị ăn mòn rất mạnh. Điều này đặc biệt quan trọng với các chiến lược có tần suất giao dịch cao hoặc giao dịch cổ phiếu thanh khoản thấp. Backtest thường nếu không mô phỏng đủ chi phí sẽ tạo cảm giác chiến lược tốt hơn nhiều so với khả năng thật.

Do đó, backtest thường không sai. Nó chỉ chưa đủ. Static backtest giúp kiểm tra ý tưởng ban đầu, nhưng nó không đủ để kết luận một chiến lược có thể vận hành thực chiến. Một đường equity curve đẹp trong quá khứ chỉ là điểm khởi đầu. Câu hỏi tiếp theo phải là: khi không còn được nhìn toàn bộ quá khứ để tối ưu, chiến lược còn sống được không?

Đó là vai trò của Walk-forward testing.

(3) Cách triển khai Walk-forward testing trong thực tế

Để triển khai Walk-forward testing, trước hết cần xác định chiến lược đang kiểm tra thuộc loại nào. Nếu là chiến lược ngắn hạn, ví dụ giao dịch theo breakout vài ngày đến vài tuần, cửa sổ huấn luyện và kiểm tra nên ngắn hơn. Nếu là chiến lược trung hạn hoặc dài hạn, ví dụ factor investing, momentum 3–6 tháng, quality hoặc value, cửa sổ có thể dài hơn.

Bước đầu tiên là chọn training window và testing window. Training window là đoạn dữ liệu dùng để tối ưu tham số hoặc chọn mô hình. Testing window là đoạn dữ liệu ngay sau đó, dùng để kiểm tra kết quả ngoài mẫu. Ví dụ dùng 3 năm dữ liệu để train và 6 tháng tiếp theo để test. Sau đó trượt cửa sổ thêm 6 tháng và lặp lại.

Giả sử bạn kiểm tra một chiến lược chọn cổ phiếu theo momentum. Trong training window, bạn thử các tham số như momentum 1 tháng, 3 tháng, 6 tháng; bộ lọc thanh khoản; điều kiện giá trên MA50; stop loss; trailing stop. Sau đó chọn bộ tham số tốt nhất theo tiêu chí đã định trước, ví dụ lợi nhuận điều chỉnh theo drawdown, Sharpe ratio, hoặc tỷ lệ CAGR/max drawdown.

Nhưng sau khi chọn tham số trong training window, bạn phải đóng băng nó và chạy trên testing window. Không được thấy kết quả test xấu rồi quay lại chỉnh cho đẹp. Nếu làm vậy, bạn lại đang overfit trên chính Walk-forward testing.

Sau mỗi testing window, bạn tiếp tục trượt dữ liệu. Có hai cách phổ biến.

Cách thứ nhất là rolling window. Ví dụ luôn dùng 3 năm gần nhất để train, rồi test 6 tháng tiếp theo. Khi bước sang kỳ mới, dữ liệu cũ nhất bị loại ra, dữ liệu mới nhất được thêm vào. Cách này phù hợp với chiến lược nhạy với điều kiện thị trường hiện tại, vì nó ưu tiên dữ liệu gần hơn và bỏ bớt regime quá cũ.

Cách thứ hai là anchored window. Ví dụ lần đầu train từ 2016–2018, test 2019. Lần sau train từ 2016–2019, test 2020. Lần sau nữa train từ 2016–2020, test 2021. Tức là dữ liệu train ngày càng dài ra. Cách này phù hợp hơn với các chiến lược dựa trên yếu tố dài hạn, nơi dữ liệu cũ vẫn có ý nghĩa.

Không có cách nào luôn đúng. Rolling window hợp với thị trường thay đổi nhanh, chiến lược ngắn hạn, hoặc mô hình cần cập nhật thường xuyên. Anchored window hợp với chiến lược dài hạn hơn, cần nhiều dữ liệu hơn và ít nhạy với regime ngắn hạn. Điểm quan trọng là phải chọn cách kiểm định phù hợp với bản chất chiến lược, không chọn vì kết quả đẹp hơn.

Sau khi chạy xong tất cả các cửa sổ, ta nối các đoạn testing lại với nhau để tạo thành một đường kết quả ngoài mẫu. Đây là kết quả đáng quan tâm nhất. Không phải equity curve trong training, không phải bộ tham số tối ưu nhất trong quá khứ, mà là chuỗi kết quả của các giai đoạn mà chiến lược chưa từng được tối ưu trực tiếp.

Khi đánh giá kết quả, không nên chỉ nhìn tổng lợi nhuận. Cần nhìn sâu hơn vào một số điểm.

Một là tính ổn định. Chiến lược có kiếm tiền ở nhiều giai đoạn không, hay chỉ sống nhờ một giai đoạn cực tốt? Nếu 80% lợi nhuận đến từ một đoạn thị trường ngắn, chiến lược có thể không ổn định.

Hai là drawdown. Mức giảm tối đa là bao nhiêu, kéo dài bao lâu, xảy ra trong regime nào. Một chiến lược lãi cao nhưng drawdown quá sâu có thể không phù hợp với thực tế, vì nhà đầu tư có thể bỏ cuộc trước khi chiến lược hồi phục.

Ba là độ ổn định của tham số. Nếu mỗi lần train lại chọn một bộ tham số hoàn toàn khác nhau, chiến lược có thể không bền. Một chiến lược tốt thường không cần đúng một con số hoàn hảo. Nó nên hoạt động ổn trong một vùng tham số hợp lý.

Bốn là chi phí giao dịch. Kết quả Walk-forward testing phải được tính sau phí, thuế, spread và trượt giá. Nếu chiến lược chỉ còn đẹp trước chi phí, thì chưa đủ giá trị thực chiến.

Năm là hiệu suất theo regime. Chiến lược hoạt động tốt khi thị trường trend nhưng kém khi sideway? Tốt khi thanh khoản cao nhưng kém khi thanh khoản thấp? Tốt với cổ phiếu large-cap nhưng kém với midcap? Những câu hỏi này giúp biết khi nào nên dùng chiến lược và khi nào nên giảm quy mô.

(4) Ý nghĩa của Walk-forward testing đối với chiến lược thực chiến

Giá trị lớn nhất của Walk-forward testing là giúp nhà đầu tư bớt tự tin sai. Thị trường luôn có khả năng đánh lừa bằng dữ liệu quá khứ. Một chiến lược càng được tối ưu kỹ trên quá khứ, càng dễ tạo cảm giác chắc chắn. Nhưng trong thực tế, thị trường không lặp lại y nguyên. Nó chỉ có những cấu trúc tương tự, trong những điều kiện khác nhau.

Walk-forward testing buộc chiến lược phải chứng minh qua nhiều giai đoạn. Nó không hỏi chiến lược có từng đẹp không. Nó hỏi: sau khi được xây dựng từ dữ liệu quá khứ, chiến lược có tạo ra kết quả ở tương lai gần ngay sau đó không? Và nếu lặp lại quá trình này nhiều lần, kết quả có còn ổn không?

Điều này rất quan trọng với thực chiến vì một chiến lược không cần thắng mọi giai đoạn. Nhưng nó phải có logic rõ về khi nào có lợi thế và khi nào không. Ví dụ một chiến lược trend-following có thể thua trong thị trường đi ngang, nhưng phải kiếm đủ trong giai đoạn có xu hướng để bù lại. Một chiến lược mean reversion có thể tốt trong sideway, nhưng phải có cơ chế giảm rủi ro khi thị trường breakdown. Walk-forward testing giúp nhìn ra điều đó.

Nó cũng giúp phân biệt giữa edge thật và edge giả. Edge thật thường không hoàn hảo, nhưng có tính lặp lại. Nó có thể giảm hiệu suất khi thị trường đổi trạng thái, nhưng không sụp hoàn toàn chỉ vì bước sang một giai đoạn mới. Edge giả thường rất đẹp trong in-sample, nhưng out-of-sample thì yếu, không ổn định, hoặc phụ thuộc vào một vài tham số quá chính xác.

Một điểm thực tế nữa là Walk-forward testing giúp xây dựng quy trình vận hành. Khi một chiến lược được đưa vào thực chiến, nhà đầu tư cần biết bao lâu thì cập nhật tham số, khi nào thì dừng chiến lược, khi nào giảm tỷ trọng, khi nào nghi ngờ regime đã thay đổi. Walk-forward testing chính là môi trường mô phỏng cho những quyết định đó.

Ví dụ, sau khi kiểm tra, bạn nhận ra chiến lược momentum hoạt động tốt khi VN-Index nằm trên MA50 và breadth mở rộng, nhưng hiệu suất giảm mạnh khi thị trường dưới MA50 và thanh khoản co lại. Khi đó, trong thực chiến, bạn có thể đặt quy tắc: chỉ chạy chiến lược với tỷ trọng đầy đủ khi market regime thuận lợi; giảm tỷ trọng hoặc dừng mua mới khi regime xấu. Đây là cách biến backtest thành quy trình quản trị rủi ro, thay vì chỉ là một biểu đồ đẹp.

Walk-forward testing cũng giúp kiểm tra tâm lý vận hành. Một chiến lược có thể có lợi nhuận tốt nhưng drawdown kéo dài 8 tháng. Trên giấy thì chịu được, nhưng ngoài đời thì rất khó. Nếu bạn biết trước chiến lược có thể trải qua chuỗi thua dài, bạn sẽ chuẩn bị vốn, kỳ vọng và quy mô lệnh tốt hơn. Nếu không biết, rất dễ bỏ chiến lược đúng lúc nó chuẩn bị hồi phục.

Tuy vậy, Walk-forward testing không phải phép màu. Nó không biến một ý tưởng tệ thành chiến lược tốt. Nó cũng không đảm bảo tương lai sẽ giống quá khứ. Nếu dữ liệu đầu vào sai, giả định phí giao dịch quá thấp, quy tắc vào ra thiếu thực tế, hoặc chiến lược bị data mining quá nặng, Walk-forward testing vẫn có thể cho kết quả sai lệch. Nó chỉ là một lớp kiểm định nghiêm túc hơn static backtest, không phải giấy chứng nhận chắc chắn thắng thị trường.

Điều cần nhớ là: một chiến lược muốn tiến gần thực chiến nên đi qua nhiều lớp kiểm tra. Đầu tiên là logic kinh tế hoặc logic hành vi: vì sao chiến lược này có thể có lợi thế? Sau đó là static backtest để xem ý tưởng có đáng nghiên cứu không. Tiếp theo là Walk-forward testing để kiểm tra độ bền ngoài mẫu. Sau đó là paper trading hoặc chạy vốn nhỏ để kiểm tra execution thật. Cuối cùng mới tăng vốn dần nếu kết quả vẫn ổn.

Kết luận lại, Walk-forward testing quan trọng vì nó đưa việc kiểm định chiến lược đến gần thực tế hơn. Static backtest cho ta biết chiến lược từng hoạt động thế nào trong quá khứ. Walk-forward testing cho ta biết chiến lược có khả năng tiếp tục hoạt động khi phải bước qua những giai đoạn chưa biết hay không.

Trong đầu tư định lượng, điều nguy hiểm nhất không phải là một chiến lược lỗ. Điều nguy hiểm nhất là một chiến lược nhìn rất đẹp nhưng chỉ đẹp vì đã được tối ưu quá mức trên dữ liệu cũ. Walk-forward testing giúp giảm bớt rủi ro đó.