Walk forward test là gì? Cách kiểm tra chiến lược qua nhiều giai đoạn thị trường
Walk forward test
Trong trading, có một lỗi rất phổ biến là thấy một chiến lược backtest đẹp rồi vội tin rằng nó sẽ kiếm tiền ngoài đời. Ví dụ backtest 5 năm cho lợi nhuận 30% mỗi năm, win rate 60%, drawdown thấp, equity curve đi lên khá mượt. Nhìn qua rất hấp dẫn. Nhưng vấn đề là backtest đẹp chưa chắc chiến lược thật sự tốt. Có khi chiến lược chỉ “học thuộc” dữ liệu quá khứ, tối ưu quá mức cho một giai đoạn cụ thể, và khi bước sang thị trường mới thì bắt đầu hoạt động kém.
Đây là lý do walk forward test trở nên quan trọng trong trading định lượng. Nếu backtest thông thường giống như kiểm tra chiến lược trên toàn bộ dữ liệu quá khứ, thì walk forward test cố gắng mô phỏng thực tế hơn. Nó chia dữ liệu thành nhiều giai đoạn. Một phần dùng để tối ưu hoặc chọn tham số, phần tiếp theo dùng để kiểm tra xem chiến lược có còn hoạt động tốt trên dữ liệu mới hay không. Sau đó quy trình này được lặp lại nhiều lần qua các giai đoạn khác nhau của thị trường.
Nói dễ hiểu, walk forward test trả lời một câu hỏi rất quan trọng: chiến lược này có thật sự bền không, hay chỉ đẹp vì được chỉnh cho khớp với quá khứ?
Một chiến lược tốt không chỉ cần thắng trong một đoạn thị trường đẹp. Nó cần được kiểm tra qua nhiều môi trường khác nhau: thị trường tăng, giảm, sideway, thanh khoản cao, thanh khoản thấp, biến động mạnh, biến động thấp. Nếu chiến lược chỉ lời trong giai đoạn uptrend nhưng thua nặng khi thị trường đi ngang, nhà đầu tư cần biết điều đó trước khi dùng tiền thật.
Bài viết này sẽ đi theo ba phần. Phần một giải thích walk forward test là gì. Phần hai nói về cách thực hiện walk forward test với ví dụ số liệu. Phần ba phân tích cách đọc kết quả và những lỗi cần tránh khi kiểm tra chiến lược.

Phần 1: Walk forward test là gì
Walk forward test là phương pháp kiểm tra chiến lược bằng cách chia dữ liệu quá khứ thành nhiều đoạn thời gian liên tiếp. Ở mỗi vòng kiểm tra, ta dùng một đoạn dữ liệu cũ để xây dựng, tối ưu hoặc chọn tham số cho chiến lược. Sau đó dùng đoạn dữ liệu kế tiếp, chưa được dùng để tối ưu, để kiểm tra hiệu quả thật sự. Đoạn kiểm tra này được gọi là out-of-sample.
Ví dụ có dữ liệu từ năm 2018 đến 2025. Nếu chỉ backtest một lần trên toàn bộ giai đoạn này, kết quả có thể đẹp nhưng chưa chắc đáng tin. Vì trong quá trình xây chiến lược, người làm rất dễ vô tình điều chỉnh tham số sao cho phù hợp với dữ liệu quá khứ. Đây gọi là overfitting, tức chiến lược quá khớp với dữ liệu cũ nhưng không chắc hoạt động tốt trong tương lai.
Walk forward test sẽ làm khác. Ví dụ dùng dữ liệu năm 2018 đến 2020 để chọn tham số. Sau đó kiểm tra chiến lược trên năm 2021. Tiếp theo dùng dữ liệu năm 2019 đến 2021 để chọn tham số, rồi kiểm tra trên năm 2022. Sau đó dùng 2020 đến 2022 để chọn tham số, rồi kiểm tra trên năm 2023. Cứ như vậy, chiến lược được kiểm tra nhiều lần trên các giai đoạn “chưa biết trước”.
Cách làm này gần với thực tế hơn. Vì ngoài đời, trader luôn dùng dữ liệu quá khứ để đưa ra quyết định cho tương lai. Không ai được biết trước dữ liệu tương lai. Walk forward test cố gắng mô phỏng quá trình đó. Nó không hỏi “nếu biết trước toàn bộ quá khứ thì chiến lược lời bao nhiêu”, mà hỏi “nếu tại mỗi thời điểm chỉ biết dữ liệu trước đó, chiến lược có hoạt động tốt ở giai đoạn tiếp theo không”.
Một khái niệm quan trọng trong walk forward test là in-sample và out-of-sample. In-sample là phần dữ liệu dùng để nghiên cứu, tối ưu và chọn tham số. Out-of-sample là phần dữ liệu dùng để kiểm tra chiến lược sau khi đã chọn tham số. Nếu chiến lược rất đẹp trong in-sample nhưng xấu trong out-of-sample, đó là dấu hiệu chiến lược có thể bị overfit.
Ví dụ một chiến lược dùng MA ngắn và MA dài để xác định xu hướng. Trong giai đoạn 2018 đến 2020, ta thử nhiều cặp tham số như MA10/MA50, MA20/MA50, MA20/MA100, MA50/MA200. Kết quả MA20/MA50 tốt nhất trong giai đoạn này. Sau đó ta giữ nguyên cặp MA20/MA50 và kiểm tra trên năm 2021. Nếu năm 2021 chiến lược vẫn có kết quả ổn, đó là tín hiệu tốt. Nếu kết quả xấu hoàn toàn, cần thận trọng.
Điểm quan trọng là walk forward test không nhằm tạo ra kết quả đẹp nhất. Nó nhằm kiểm tra độ bền của chiến lược. Một chiến lược có lợi nhuận cao trong backtest nhưng thất bại trong nhiều giai đoạn out-of-sample thường không đáng tin. Ngược lại, một chiến lược lợi nhuận vừa phải nhưng qua nhiều giai đoạn vẫn ổn định có thể đáng nghiên cứu hơn.
Trong giao dịch chứng khoán Việt Nam, điều này rất thực tế. Có những chiến lược hoạt động rất tốt trong giai đoạn thị trường tăng mạnh, ví dụ mua breakout, mua cổ phiếu momentum, mua nhóm ngành dẫn dắt. Nhưng khi thị trường sideway hoặc giảm, các cú breakout thất bại nhiều hơn, cổ phiếu mạnh cũng dễ quay đầu, win rate giảm rõ. Nếu không kiểm tra qua nhiều giai đoạn thị trường, nhà đầu tư dễ tưởng chiến lược của mình luôn hiệu quả.
Ví dụ một chiến lược mua cổ phiếu vượt đỉnh 20 phiên kèm volume tăng có thể rất đẹp trong năm thị trường uptrend. Nhưng nếu dùng nó trong giai đoạn thị trường đi ngang, giá vượt đỉnh xong lại rơi về nền, trader bị quét stop liên tục. Walk forward test giúp phát hiện điều này sớm hơn, trước khi dùng tiền thật.
Nói ngắn gọn, walk forward test là cách kiểm tra chiến lược qua nhiều “bài thi nhỏ” liên tiếp. Mỗi bài thi gồm một đoạn học từ quá khứ và một đoạn kiểm tra ở tương lai gần. Nếu chiến lược sống sót qua nhiều bài thi khác nhau, độ tin cậy sẽ cao hơn một backtest đẹp trên một giai đoạn duy nhất.

Phần 2: Cách thực hiện walk forward test với ví dụ số liệu
Để dễ hình dung, giả sử ta có một chiến lược đơn giản cho cổ phiếu Việt Nam. Chiến lược này mua cổ phiếu khi giá đóng cửa vượt đỉnh 20 phiên, volume phiên breakout lớn hơn 1,5 lần volume trung bình 20 phiên, cổ phiếu nằm trên MA50 và VN-Index cũng nằm trên MA50. Cắt lỗ khi cổ phiếu giảm 7% từ giá mua hoặc đóng cửa trở lại dưới vùng breakout. Chốt lời một phần khi cổ phiếu tăng 15%, phần còn lại giữ theo trailing stop.
Nếu backtest chiến lược này từ năm 2018 đến 2025 và thấy lợi nhuận đẹp, đó mới là bước đầu. Muốn kiểm tra kỹ hơn, ta có thể dùng walk forward test. Ví dụ chia dữ liệu thành các cửa sổ như sau. Dùng 3 năm để tối ưu, sau đó kiểm tra 1 năm tiếp theo. Mỗi lần trượt cửa sổ thêm 1 năm.
Cụ thể, vòng 1 dùng dữ liệu 2018 đến 2020 để chọn tham số, kiểm tra trên 2021. Vòng 2 dùng 2019 đến 2021 để chọn tham số, kiểm tra trên 2022. Vòng 3 dùng 2020 đến 2022 để chọn tham số, kiểm tra trên 2023. Vòng 4 dùng 2021 đến 2023 để chọn tham số, kiểm tra trên 2024. Vòng 5 dùng 2022 đến 2024 để chọn tham số, kiểm tra trên 2025.
Trong mỗi vòng, ta có thể tối ưu một vài tham số. Ví dụ độ dài breakout là 20, 40 hoặc 60 phiên. Volume breakout là 1,3 lần, 1,5 lần hoặc 2 lần trung bình 20 phiên. Stop loss là 5%, 7% hoặc 10%. Bộ lọc thị trường là VN-Index trên MA50 hoặc MA100. Nhưng cần lưu ý là không nên tối ưu quá nhiều tham số, vì càng thử nhiều thì càng dễ overfit.
Giả sử kết quả walk forward như sau.
Vòng 1, tối ưu trên 2018 đến 2020, kiểm tra 2021. Chiến lược lời 28%, max drawdown 9%, win rate 55%.
Vòng 2, tối ưu trên 2019 đến 2021, kiểm tra 2022. Chiến lược lỗ 6%, max drawdown 14%, win rate 43%.
Vòng 3, tối ưu trên 2020 đến 2022, kiểm tra 2023. Chiến lược lời 18%, max drawdown 10%, win rate 52%.
Vòng 4, tối ưu trên 2021 đến 2023, kiểm tra 2024. Chiến lược lời 11%, max drawdown 8%, win rate 50%.
Vòng 5, tối ưu trên 2022 đến 2024, kiểm tra 2025. Chiến lược lời 15%, max drawdown 12%, win rate 51%.
Nhìn kết quả này, chiến lược không phải lúc nào cũng thắng. Năm 2022 bị lỗ 6%, có thể do thị trường xấu hoặc breakout thất bại nhiều. Nhưng chiến lược không sụp đổ hoàn toàn, drawdown vẫn trong mức kiểm soát, và các giai đoạn còn lại có lợi nhuận dương. Đây là kết quả thực tế hơn một backtest chỉ toàn màu xanh.
Điều cần đọc không phải là từng năm lời hay lỗ, mà là toàn bộ bức tranh. Chiến lược có tạo lợi nhuận dương qua nhiều giai đoạn không. Drawdown có chấp nhận được không. Có giai đoạn nào thua quá nặng không. Win rate có ổn định không. Expectancy có còn dương không. Kết quả có phụ thuộc vào một năm cực tốt hay không.
Ví dụ nếu tổng lợi nhuận walk forward chủ yếu đến từ một năm 2021 lời 80%, còn các năm khác đều lỗ hoặc đi ngang, chiến lược chưa chắc tốt. Nó có thể chỉ phù hợp với một giai đoạn thị trường rất đặc biệt. Ngược lại, nếu mỗi năm lời vừa phải, có năm lỗ nhẹ nhưng tổng thể ổn định, chiến lược có thể đáng tin hơn.
Một điểm quan trọng nữa là phải so với benchmark. Nếu chiến lược lời 15% trong năm VN-Index tăng 35%, chưa chắc đã tốt. Nếu chiến lược lỗ 5% trong năm VN-Index giảm 25%, đó có thể là kết quả chấp nhận được. Vì vậy, trong mỗi giai đoạn out-of-sample, nên so sánh chiến lược với VN-Index hoặc benchmark phù hợp.
Ví dụ năm 2022, chiến lược lỗ 6% nhưng VN-Index giảm 25%. Điều này cho thấy chiến lược vẫn phòng thủ tốt hơn thị trường. Nhưng nếu năm 2024 chiến lược lời 8% trong khi VN-Index tăng 22%, chiến lược đang kém benchmark. Không thể chỉ nhìn lợi nhuận tuyệt đối.
Walk forward test cũng giúp phát hiện chiến lược phù hợp với môi trường nào. Nếu chiến lược lời tốt khi VN-Index trên MA50 nhưng thua nhiều khi VN-Index dưới MA50, có thể cần thêm bộ lọc thị trường. Nếu chiến lược thua trong giai đoạn thanh khoản thấp, cần thêm điều kiện về giá trị giao dịch trung bình. Nếu chiến lược lời ở nhóm cổ phiếu thanh khoản cao nhưng lỗ ở mã thanh khoản thấp, cần lọc thanh khoản chặt hơn.
Ví dụ ban đầu chiến lược mua breakout tất cả cổ phiếu. Sau walk forward, phát hiện các lệnh ở cổ phiếu có giá trị giao dịch trung bình dưới 10 tỷ đồng thường trượt giá mạnh và kết quả kém. Khi thêm bộ lọc thanh khoản trên 30 tỷ đồng mỗi phiên, số lệnh giảm nhưng kết quả ổn định hơn. Đây là cách walk forward test giúp cải thiện chiến lược theo hướng thực tế hơn.
Tuy nhiên, cần tránh biến walk forward test thành một trò tối ưu quá mức. Nếu mỗi vòng đều chọn một bộ tham số hoàn toàn khác nhau, chiến lược có thể trở nên thiếu ổn định. Ví dụ vòng 1 chọn breakout 20 phiên, vòng 2 chọn 60 phiên, vòng 3 chọn 10 phiên, vòng 4 lại chọn 40 phiên. Nếu tham số thay đổi quá mạnh qua từng giai đoạn, có thể chiến lược không có logic bền vững, mà chỉ đang chạy theo dữ liệu.
Một chiến lược tốt thường có vùng tham số ổn định. Ví dụ breakout 20 đến 40 phiên đều cho kết quả tương đối ổn, stop loss 5% đến 8% đều không quá khác biệt, volume breakout 1,3 đến 1,7 lần đều chấp nhận được. Nếu chỉ một tham số duy nhất tạo ra kết quả đẹp, còn thay đổi nhẹ là kết quả xấu, chiến lược rất dễ bị overfit.
Nói ngắn gọn, cách thực hiện walk forward test gồm bốn bước. Một là chia dữ liệu thành nhiều đoạn in-sample và out-of-sample. Hai là chọn hoặc tối ưu tham số trên in-sample. Ba là kiểm tra trên out-of-sample mà không chỉnh lại kết quả. Bốn là ghép toàn bộ các giai đoạn out-of-sample để đánh giá chiến lược như một chuỗi giao dịch thực tế.

Phần 3: Cách đọc kết quả và những lỗi cần tránh
Khi đọc kết quả walk forward test, điều đầu tiên cần xem là chiến lược có sống sót qua nhiều giai đoạn thị trường không. Một chiến lược có thể có năm lời, năm lỗ, nhưng không nên có giai đoạn sụp đổ quá nặng. Nếu chỉ một giai đoạn xấu làm mất toàn bộ lợi nhuận nhiều năm, chiến lược đó rất khó dùng ngoài đời.
Ví dụ chiến lược lời 20% năm 2021, lời 15% năm 2023, lời 12% năm 2024, nhưng lỗ 45% năm 2022. Dù tổng kết có thể vẫn dương, drawdown như vậy sẽ rất khó chịu. Nhiều nhà đầu tư không đủ tâm lý để theo chiến lược sau một cú giảm sâu như vậy. Vì vậy, max drawdown trong từng giai đoạn rất quan trọng.
Chỉ số thứ hai cần xem là lợi nhuận điều chỉnh theo rủi ro. Không phải chiến lược nào lời cao hơn cũng tốt hơn. Một chiến lược lời trung bình 25% mỗi năm nhưng drawdown 35% có thể khó theo hơn chiến lược lời 15% mỗi năm nhưng drawdown chỉ 10%. Các chỉ số như Sharpe ratio, Sortino ratio, profit factor và expectancy giúp nhìn chất lượng lợi nhuận tốt hơn.
Chỉ số thứ ba là sự ổn định của win rate và expectancy. Nếu win rate dao động quá mạnh qua từng giai đoạn, cần tìm hiểu lý do. Nhưng win rate không quan trọng bằng expectancy. Một chiến lược có win rate chỉ 45% vẫn có thể tốt nếu lệnh thắng trung bình lớn hơn lệnh thua. Ngược lại, win rate 65% vẫn có thể xấu nếu lệnh thua quá lớn.
Ví dụ giai đoạn 2021 chiến lược thắng 58%, lãi trung bình +8%, lỗ trung bình -4%. Expectancy dương khá tốt. Nhưng giai đoạn 2022 chiến lược thắng 45%, lãi trung bình +4%, lỗ trung bình -7%. Expectancy chuyển âm. Khi đó cần xem thị trường 2022 có đặc điểm gì khiến hệ thống yếu đi: thanh khoản giảm, xu hướng gãy, nhiều breakout giả hay biến động quá mạnh.
Chỉ số thứ tư là số lượng lệnh. Nếu một giai đoạn out-of-sample chỉ có 3 đến 5 lệnh, kết quả chưa đủ đáng tin. Một năm lời 20% nhờ 2 lệnh may mắn không chứng minh chiến lược tốt. Ngược lại, một chiến lược có 100 đến 200 lệnh qua nhiều giai đoạn sẽ có dữ liệu đáng đọc hơn. Số lượng lệnh không cần quá nhiều, nhưng phải đủ để kết luận.
Một lỗi phổ biến là nhìn kết quả walk forward rồi tiếp tục chỉnh đến khi đẹp. Ví dụ thấy giai đoạn 2022 lỗ, liền thêm điều kiện mới để loại bỏ các lệnh lỗ của 2022. Sau đó thấy 2024 kém, lại chỉnh tiếp để phù hợp với 2024. Làm như vậy thì walk forward test mất ý nghĩa, vì ta đang dùng dữ liệu kiểm tra để tối ưu ngược lại. Đây vẫn là overfitting, chỉ tinh vi hơn.
Một lỗi khác là chọn giai đoạn kiểm tra quá ngắn. Nếu chỉ test vài tháng, kết quả có thể bị nhiễu bởi một sóng ngắn. Ví dụ chiến lược breakout được test đúng giai đoạn thị trường tăng mạnh 3 tháng, kết quả rất đẹp. Nhưng khi dùng ở giai đoạn sideway 6 tháng sau, chiến lược lại thất bại. Vì vậy, cần kiểm tra qua nhiều giai đoạn đủ dài và đủ khác nhau.
Cũng cần tránh dùng quá nhiều tham số. Một chiến lược có 10 tham số có thể được tối ưu để rất đẹp trên quá khứ, nhưng khó bền ngoài đời. Với người mới, chiến lược càng đơn giản càng dễ kiểm tra. Ví dụ xu hướng thị trường, thanh khoản, breakout, stop loss và position sizing là đủ để bắt đầu. Đừng vội thêm quá nhiều chỉ báo chỉ để backtest đẹp hơn.
Một điều quan trọng nữa là phải tính chi phí giao dịch. Walk forward test mà không tính phí, thuế, spread và trượt giá sẽ dễ đẹp hơn thực tế. Đặc biệt với chiến lược giao dịch ngắn hạn hoặc cổ phiếu thanh khoản thấp, chi phí thực thi có thể làm kết quả thay đổi rất nhiều.
Ví dụ chiến lược lời trung bình 0,8% mỗi lệnh trước phí. Nếu tổng phí, thuế và trượt giá khoảng 0,3% mỗi vòng giao dịch, lợi nhuận thực tế chỉ còn 0,5%. Nếu gặp khớp lệnh xấu hoặc spread lớn, lợi nhuận có thể còn thấp hơn. Vì vậy, kết quả walk forward nên được tính theo điều kiện gần với thực tế nhất.
Với nhà đầu tư cá nhân, không nhất thiết phải xây hệ thống quá phức tạp ngay từ đầu. Có thể bắt đầu đơn giản. Lấy dữ liệu vài năm, chia thành các giai đoạn. Ví dụ test chiến lược trong 2020 đến 2021, kiểm tra trên 2022. Sau đó dùng 2021 đến 2022, kiểm tra trên 2023. Rồi dùng 2022 đến 2023, kiểm tra trên 2024. Chỉ cần làm được như vậy, nhà đầu tư đã tiến xa hơn rất nhiều so với việc nhìn vài cú trade thắng rồi tin vào phương pháp.
Kết luận lại, walk forward test là một cách kiểm tra chiến lược thực tế hơn backtest thông thường. Nó giúp xem chiến lược có hoạt động trên dữ liệu mới hay không, có bền qua nhiều giai đoạn thị trường không, và có bị overfit quá khứ không.
