Trang chủBlogChiến Lược Đầu TưOut-of-sample test là gì và vì sao cần kiểm tra ngoài dữ liệu tối ưu?
Out-of-sample test là gì và vì sao cần kiểm tra ngoài dữ liệu tối ưu?
Chiến Lược Đầu Tư

Out-of-sample test là gì và vì sao cần kiểm tra ngoài dữ liệu tối ưu?

Out-of-sample test là gì?

Ngọc Hải LươngNgọc Hải Lương
11/6/2026
15 phút phút đọc
20 lượt xem

Phần 1: Out-of-sample test là gì và vì sao backtest đẹp chưa đủ đáng tin?

Trong giao dịch định lượng, backtest là bước rất quan trọng. Nó giúp kiểm tra xem một ý tưởng giao dịch có từng hoạt động trong quá khứ hay không. Ví dụ, một trader có thể xây dựng chiến lược mua cổ phiếu khi giá vượt MA50, volume tăng trên trung bình 20 phiên và cổ phiếu mạnh hơn VN-Index trong 60 phiên gần nhất. Sau đó, trader chạy thử chiến lược này trên dữ liệu quá khứ để xem lợi nhuận, max drawdown, win rate, profit factor và equity curve ra sao.

Vấn đề là một chiến lược backtest đẹp chưa chắc đã kiếm được tiền khi giao dịch thật. Lý do nằm ở chỗ trong quá trình xây dựng chiến lược, trader thường sẽ thử rất nhiều điều kiện khác nhau. Thử MA20, MA50, MA100. Thử RSI 50, RSI 60, RSI 70. Thử stop loss 5%, 7%, 10%. Thử holding period 5 phiên, 10 phiên, 20 phiên. Sau nhiều lần thử, kiểu gì cũng có một bộ tham số cho kết quả rất đẹp trên dữ liệu quá khứ. Nhưng câu hỏi quan trọng là: chiến lược đó thật sự có lợi thế, hay chỉ đang khớp quá tốt với dữ liệu cũ?

Đây là lúc cần đến out-of-sample test.

Out-of-sample test là kiểm tra chiến lược trên phần dữ liệu không được dùng trong quá trình xây dựng, tối ưu hoặc chọn tham số. Nói đơn giản, dữ liệu được chia thành hai phần. Phần đầu gọi là in-sample, dùng để phát triển và tối ưu chiến lược. Phần sau gọi là out-of-sample, dùng để kiểm tra xem chiến lược có còn hoạt động trên dữ liệu “mới” hay không.

Ví dụ, có dữ liệu cổ phiếu từ năm 2015 đến 2025. Trader có thể dùng giai đoạn 2015-2021 để xây dựng chiến lược. Đây là phần in-sample. Sau khi chọn được bộ quy tắc, trader đem chiến lược đó chạy thử trên giai đoạn 2022-2025. Đây là phần out-of-sample. Nếu chiến lược vẫn hoạt động ổn trên giai đoạn chưa từng được dùng để tối ưu, độ tin cậy sẽ cao hơn nhiều so với một chiến lược chỉ đẹp trong phần dữ liệu đã được “luyện” quá kỹ.

Có thể hiểu out-of-sample test giống như việc học và thi. In-sample là phần bài tập đã ôn, đã làm đi làm lại, đã biết đáp án. Out-of-sample là đề thi mới. Một học sinh làm tốt bài đã ôn chưa chắc là giỏi thật. Nhưng nếu gặp đề mới mà vẫn làm tốt, khả năng hiểu bản chất sẽ cao hơn. Trading system cũng vậy. Một chiến lược hoạt động tốt trên dữ liệu đã dùng để tối ưu chưa đủ. Nó cần chứng minh rằng logic vẫn có giá trị trên dữ liệu chưa từng nhìn thấy.

Điểm cốt lõi của out-of-sample test là kiểm tra khả năng khái quát hóa của chiến lược. Một chiến lược tốt không nên chỉ phù hợp với đúng một giai đoạn thị trường, đúng một nhóm cổ phiếu, đúng một bộ tham số rất hẹp. Nó cần có logic đủ mạnh để hoạt động trong nhiều bối cảnh khác nhau. Nếu chiến lược chỉ đẹp khi dùng MA47, stop loss 6,3%, take profit 13,8% và dữ liệu từ năm 2018 đến 2020, nhưng thay đổi nhẹ là kết quả sụp, khả năng cao đó không phải lợi thế thật.

Một ví dụ đơn giản: chiến lược A được tối ưu trên dữ liệu 2015-2021, cho CAGR 28%/năm, max drawdown 12%, profit factor 2,1. Nhìn rất hấp dẫn. Nhưng khi chạy out-of-sample 2022-2025, chiến lược lỗ 15%, drawdown 30%, profit factor xuống 0,8. Trường hợp này cho thấy chiến lược có thể đã bị overfitting, tức là quá khớp với dữ liệu quá khứ.

Ngược lại, chiến lược B trong in-sample chỉ có CAGR 18%/năm, max drawdown 14%, profit factor 1,6. Không quá lung linh. Nhưng khi chạy out-of-sample, chiến lược vẫn đạt CAGR 14%/năm, max drawdown 16%, profit factor 1,4. Dù lợi nhuận thấp hơn chiến lược A trong backtest ban đầu, chiến lược B đáng tin hơn vì kết quả ổn định hơn khi gặp dữ liệu mới.

Đây là một bài học rất quan trọng: trong quant trading, chiến lược đẹp nhất trên dữ liệu tối ưu chưa chắc là chiến lược tốt nhất để giao dịch thật. Chiến lược đáng dùng hơn thường là chiến lược có logic rõ ràng, kết quả không quá phụ thuộc vào một giai đoạn, và không sụp đổ khi kiểm tra ngoài mẫu.

Có thể hiểu ngắn gọn:

  • In-sample là dữ liệu dùng để xây dựng và tối ưu chiến lược.

  • Out-of-sample là dữ liệu chưa dùng trong quá trình tối ưu.

  • Backtest đẹp trên in-sample chưa đủ để kết luận chiến lược tốt.

  • Out-of-sample giúp kiểm tra chiến lược có bị overfitting không.

  • Một chiến lược tốt nên giữ được hiệu quả tương đối ổn khi bước sang dữ liệu mới.

Điều quan trọng là out-of-sample test không đảm bảo chiến lược chắc chắn thắng trong tương lai. Nó chỉ giúp giảm nguy cơ bị đánh lừa bởi một kết quả backtest quá đẹp. Trong trading, không có bước kiểm tra nào loại bỏ hoàn toàn rủi ro. Nhưng bỏ qua out-of-sample thì rủi ro lớn hơn rất nhiều, vì trader có thể đang giao dịch một hệ thống chỉ giỏi trong quá khứ đã được tối ưu quá mức.

Phần 2: Vì sao cần kiểm tra ngoài dữ liệu tối ưu?

Lý do lớn nhất cần out-of-sample test là để chống overfitting. Overfitting xảy ra khi chiến lược được điều chỉnh quá kỹ để phù hợp với dữ liệu quá khứ, đến mức nó không còn phản ánh một quy luật thị trường thật sự. Nó giống như việc may một bộ quần áo vừa khít với một người duy nhất, nhưng lại không mặc vừa cho ai khác. Trong trading, chiến lược overfit có thể rất đẹp trên backtest, nhưng thất bại nhanh khi đưa vào thị trường thật.

Overfitting thường xuất hiện khi trader thử quá nhiều biến số. Ví dụ, ban đầu chiến lược chỉ là mua cổ phiếu vượt đỉnh 60 phiên. Kết quả chưa đẹp. Trader thêm điều kiện volume. Sau đó thêm RSI. Sau đó thêm MACD. Sau đó thêm điều kiện thị trường chung trên MA50. Sau đó thêm điều kiện ngành mạnh hơn VN-Index. Sau đó tối ưu stop loss, take profit, thời gian nắm giữ. Sau rất nhiều lần thử, chiến lược cuối cùng có thể có lợi nhuận rất cao trong quá khứ. Nhưng lợi nhuận đó có thể đến từ việc chiến lược đã “học thuộc” dữ liệu cũ, không phải vì nó có lợi thế thật.

Một dấu hiệu thường gặp của overfitting là chiến lược quá nhạy với tham số. Ví dụ, MA50 cho kết quả rất tốt, nhưng MA45 hoặc MA55 lại tệ hẳn. Stop loss 7% rất đẹp, nhưng stop loss 6% hoặc 8% làm kết quả giảm mạnh. Holding period 12 phiên rất tốt, nhưng 10 hoặc 14 phiên lại xấu. Nếu chỉ một thay đổi nhỏ làm chiến lược sụp, cần nghi ngờ rằng chiến lược không đủ bền.

Out-of-sample test giúp đặt chiến lược vào một môi trường khác với môi trường đã tối ưu. Nếu chiến lược vẫn hoạt động tương đối ổn, điều đó cho thấy logic có thể không chỉ là may mắn. Nếu chiến lược sụp hoàn toàn, cần quay lại kiểm tra. Có thể ý tưởng ban đầu không có lợi thế. Cũng có thể chiến lược cần đơn giản hóa. Hoặc có thể nó chỉ phù hợp với một trạng thái thị trường nhất định.

Lý do thứ hai cần out-of-sample là thị trường luôn thay đổi. Một chiến lược hoạt động tốt trong giai đoạn thị trường tăng mạnh chưa chắc hiệu quả trong thị trường sideway hoặc giảm. Một chiến lược momentum có thể kiếm tiền tốt khi dòng tiền lan tỏa và xu hướng rõ. Nhưng khi thị trường nhiễu, cổ phiếu tăng giảm thất thường, breakout dễ thất bại, chiến lược có thể bị chuỗi lệnh sai. Nếu chỉ test trên một giai đoạn thuận lợi, kết quả sẽ bị lệch.

Ví dụ, nếu một chiến lược cổ phiếu Việt Nam được tối ưu trên giai đoạn thị trường tăng mạnh, thanh khoản cao, nhiều nhóm ngành bứt phá, backtest có thể rất đẹp. Nhưng khi đem sang giai đoạn thị trường giảm, dòng tiền yếu, thanh khoản thấp, chiến lược có thể thua liên tục. Out-of-sample giúp phát hiện điều này sớm hơn, trước khi dùng tiền thật.

Lý do thứ ba là out-of-sample giúp kiểm tra tính thực chiến của các chỉ số. Trong in-sample, một chiến lược có thể có profit factor 2,5, max drawdown 10%, win rate 60%. Nhưng nếu sang out-of-sample, profit factor giảm về 1,2, max drawdown tăng lên 25%, win rate giảm mạnh, thì trader cần nhìn nhận thực tế hơn. Có thể chiến lược vẫn có chút lợi thế, nhưng rủi ro cao hơn nhiều so với kỳ vọng ban đầu.

Điều cần nhớ là kết quả out-of-sample thường xấu hơn in-sample. Đây là chuyện bình thường. Vì in-sample là nơi chiến lược được chọn và tối ưu, còn out-of-sample là dữ liệu mới hơn, ít được “chiều” hơn. Nếu một chiến lược in-sample lãi 25%/năm, out-of-sample còn 15-18%/năm nhưng drawdown vẫn chấp nhận được, đó có thể là kết quả ổn. Nhưng nếu in-sample lãi 30%/năm, out-of-sample âm hoặc drawdown tăng gấp nhiều lần, đó là cảnh báo lớn.

Một số câu hỏi nên đặt ra khi xem out-of-sample:

  • Chiến lược còn có lợi nhuận dương không?

  • Profit factor còn trên 1 không?

  • Max drawdown có tăng quá mạnh không?

  • Equity curve còn hợp lý hay sụp hoàn toàn?

  • Số lệnh trong out-of-sample có đủ để đánh giá không?

  • Chiến lược có hoạt động trong nhiều trạng thái thị trường không?

  • Kết quả xấu đi ở mức chấp nhận được hay mất hoàn toàn lợi thế?

Ví dụ, một chiến lược breakout có in-sample profit factor 1,9. Sang out-of-sample còn 1,35. Đây có thể vẫn là kết quả chấp nhận được nếu drawdown không quá lớn và số lệnh đủ nhiều. Nhưng nếu profit factor rơi từ 1,9 xuống 0,7, tức tổng lỗ lớn hơn tổng lời, chiến lược không còn đáng tin. Lúc đó, trader không nên cố giải thích rằng “thị trường chưa thuận”, mà cần kiểm tra lại logic và điều kiện sử dụng.

Lý do thứ tư là out-of-sample giúp trader bớt tự tin quá mức. Một backtest đẹp rất dễ tạo cảm giác chiến lược chắc thắng. Trader nhìn equity curve đi lên đều, drawdown thấp, lợi nhuận cao và bắt đầu muốn tăng vốn thật nhanh. Nhưng khi thêm out-of-sample, nhiều chiến lược đẹp sẽ lộ điểm yếu. Đây là điều tốt, vì phát hiện điểm yếu trước khi mất tiền thật luôn rẻ hơn phát hiện sau khi đã giải ngân lớn.

Trong định lượng, sự khiêm tốn rất quan trọng. Dữ liệu quá khứ có thể lừa người phân tích nếu họ thử đủ nhiều. Một chiến lược được kiểm tra ngoài mẫu không phải chắc chắn thắng, nhưng ít nhất nó đã qua một lớp kiểm tra khách quan hơn. Nó buộc trader phải chứng minh rằng ý tưởng có thể sống ngoài vùng dữ liệu đã được tối ưu.

Phần 3: Cách thực hiện out-of-sample test sao cho thực tế

Cách đơn giản nhất để làm out-of-sample test là chia dữ liệu theo thời gian. Ví dụ, nếu có dữ liệu từ 2015 đến 2025, có thể dùng 2015-2020 để phát triển chiến lược và 2021-2025 để kiểm tra ngoài mẫu. Cách chia này phù hợp vì giao dịch luôn diễn ra theo thời gian. Không nên trộn dữ liệu ngẫu nhiên như một số bài toán machine learning thông thường, vì điều đó có thể làm rò rỉ thông tin tương lai vào quá trình huấn luyện.

Một tỷ lệ chia dữ liệu phổ biến là 70/30 hoặc 60/40. Ví dụ, 70% đầu tiên dùng cho in-sample, 30% sau dùng cho out-of-sample. Tuy nhiên, tỷ lệ này không cố định. Nếu dữ liệu ít, cần cẩn thận vì out-of-sample quá ngắn sẽ không đủ đáng tin. Nếu dữ liệu nhiều, có thể chia thành nhiều giai đoạn để kiểm tra kỹ hơn.

Ví dụ thực tế với dữ liệu 2015-2025:

  • In-sample: 2015-2020.

  • Out-of-sample: 2021-2025.

Trong giai đoạn in-sample, trader được phép thử ý tưởng, chọn tham số, điều chỉnh điều kiện. Nhưng khi đã khóa chiến lược, không được tiếp tục chỉnh sửa dựa trên kết quả out-of-sample. Nếu nhìn thấy out-of-sample xấu rồi quay lại chỉnh tham số để làm đẹp phần đó, thì phần out-of-sample đã bị biến thành in-sample mới. Lúc này bài kiểm tra mất giá trị.

Đây là lỗi rất phổ biến. Nhiều người nói rằng họ đã test ngoài mẫu, nhưng sau khi thấy kết quả ngoài mẫu không đẹp, họ lại chỉnh chiến lược nhiều lần cho đến khi out-of-sample đẹp hơn. Khi làm như vậy, dữ liệu ngoài mẫu không còn độc lập nữa. Nó đã bị dùng để tối ưu. Muốn kiểm tra tiếp, cần có một phần dữ liệu mới hơn nữa, hoặc dùng walk-forward test.

Một quy trình đơn giản có thể làm như sau:

  • Bước 1: Chia dữ liệu thành in-sample và out-of-sample.

  • Bước 2: Chỉ dùng in-sample để xây dựng chiến lược.

  • Bước 3: Khóa quy tắc giao dịch.

  • Bước 4: Chạy chiến lược trên out-of-sample.

  • Bước 5: So sánh return, max drawdown, profit factor, win rate, số lệnh.

  • Bước 6: Nếu kết quả ổn, tiếp tục kiểm tra thêm bằng forward test hoặc paper trading.

  • Bước 7: Nếu kết quả xấu, quay lại xem logic, nhưng không được coi kết quả out-of-sample đã chỉnh sửa là kiểm tra độc lập nữa.

Một cách nâng cao hơn là walk-forward test. Thay vì chỉ chia dữ liệu một lần, walk-forward chia dữ liệu thành nhiều đoạn. Ví dụ, dùng 3 năm để tối ưu, sau đó test 1 năm tiếp theo. Rồi trượt cửa sổ sang giai đoạn kế tiếp: lại dùng 3 năm mới để tối ưu, test 1 năm sau đó. Cách này mô phỏng thực tế tốt hơn, vì trader thường cập nhật chiến lược theo thời gian.

Ví dụ:

  • Tối ưu 2015-2017, test 2018.

  • Tối ưu 2016-2018, test 2019.

  • Tối ưu 2017-2019, test 2020.

  • Tối ưu 2018-2020, test 2021.

  • Tối ưu 2019-2021, test 2022.

Sau đó ghép các giai đoạn test lại để xem equity curve ngoài mẫu. Nếu kết quả vẫn ổn, chiến lược đáng tin hơn so với việc chỉ có một lần out-of-sample duy nhất.

Tuy nhiên, với người mới bắt đầu, không cần làm quá phức tạp ngay. Một lần chia in-sample/out-of-sample rõ ràng đã tốt hơn rất nhiều so với việc tối ưu toàn bộ dữ liệu rồi kết luận chiến lược tốt. Quan trọng là phải giữ kỷ luật dữ liệu: phần nào dùng để tối ưu, phần nào dùng để kiểm tra, không được trộn lẫn.

Khi đánh giá kết quả ngoài mẫu, không nên đòi hỏi nó đẹp như in-sample. Điều cần quan sát là chiến lược còn giữ được đặc điểm cốt lõi hay không. Nếu chiến lược momentum trong in-sample kiếm tiền nhờ bắt cổ phiếu mạnh trong thị trường thuận lợi, thì out-of-sample cũng nên có hành vi tương tự. Nếu lợi nhuận thấp hơn nhưng vẫn dương, drawdown không phá vỡ ngưỡng chịu đựng, profit factor vẫn trên 1,2-1,3, có thể tiếp tục nghiên cứu. Nếu chiến lược đảo ngược hoàn toàn, cần cẩn thận.

Một checklist khi đọc out-of-sample:

  • Kết quả có còn dương sau phí và trượt giá không?

  • Max drawdown ngoài mẫu có vượt xa in-sample không?

  • Profit factor có giảm quá mạnh không?

  • Số lệnh có đủ lớn không?

  • Equity curve có quá phụ thuộc vào một vài lệnh không?

  • Chiến lược có hoạt động trong các năm khác nhau không?

  • Nếu thị trường xấu, chiến lược thua trong mức dự kiến hay mất kiểm soát?

  • Logic chiến lược có còn hợp lý sau khi xem dữ liệu mới không?

Một điểm rất quan trọng là nên kiểm tra out-of-sample sau chi phí. Nhiều chiến lược nhìn ổn trước phí nhưng mất lợi thế sau khi tính phí giao dịch, thuế, trượt giá và spread. Đặc biệt với thị trường Việt Nam, thanh khoản từng cổ phiếu rất khác nhau. Nếu chiến lược chọn nhiều cổ phiếu thanh khoản thấp, giá khớp thực tế có thể kém hơn backtest. Out-of-sample không tính chi phí thực tế vẫn có thể quá lạc quan.

Cuối cùng, out-of-sample test nên được xem là một bước trong quy trình kiểm chứng, không phải bước cuối cùng. Sau khi chiến lược qua được out-of-sample, vẫn nên forward test hoặc paper trading. Đây là giai đoạn chạy chiến lược trên thị trường thật nhưng chưa dùng tiền thật lớn. Forward test giúp kiểm tra các vấn đề mà backtest khó phản ánh đầy đủ như tâm lý, khớp lệnh, độ trễ dữ liệu, thanh khoản, trượt giá và khả năng tuân thủ hệ thống.

Kết luận lại, out-of-sample test là bước kiểm tra chiến lược trên phần dữ liệu chưa được dùng để tối ưu. Nó giúp trader tránh bị đánh lừa bởi backtest quá đẹp, giảm rủi ro overfitting và đánh giá xem chiến lược có khả năng sống ngoài dữ liệu cũ hay không. Một chiến lược không cần hoàn hảo trong out-of-sample, nhưng cần chứng minh rằng lợi thế không biến mất hoàn toàn khi bước sang dữ liệu mới.