Robust backtesting: kiểm thử thế nào mới đủ tin để triển khai thật?
Robust backtesting: kiểm thử thế nào mới đủ tin để triển khai thật?
Trong trading và đầu tư định lượng, backtesting là bước gần như bắt buộc trước khi đưa một chiến lược vào giao dịch thật. Nhưng một backtest đẹp không có nghĩa là chiến lược đó tốt. Rất nhiều hệ thống có đường lợi nhuận quá mượt trong quá khứ, Sharpe ratio cao, tỷ lệ thắng đẹp, drawdown thấp, nhưng khi đem vào thị trường thật lại thất bại rất nhanh. Lý do nằm ở chỗ backtest không chỉ là việc “chạy thử chiến lược trên dữ liệu quá khứ”, mà là một quá trình kiểm định nghiêm ngặt xem chiến lược đó có thật sự có edge hay chỉ đang khớp với nhiễu lịch sử. Trong các nghiên cứu về backtest overfitting, Bailey, Borwein, López de Prado và Zhu nhấn mạnh rằng nhiều tổ chức dựa vào mô phỏng lịch sử để chọn chiến lược, nhưng các phương pháp giữ lại một phần dữ liệu kiểu hold-out thông thường có thể không đủ đáng tin trong bối cảnh investment backtesting nếu quá trình chọn mô hình đã bị thử quá nhiều lần.
Một backtest đủ tin không phải là backtest cho kết quả cao nhất, mà là backtest vẫn đứng vững sau nhiều lớp kiểm tra: dữ liệu được chia đúng cách, không bị look-ahead bias, có out-of-sample thật sự, có walk-forward, có tính phí giao dịch, có stress test, có kiểm tra độ nhạy tham số và có đánh giá xem hiệu suất có đến từ logic thị trường hay chỉ từ may mắn thống kê. Nói cách khác, backtest chuyên nghiệp không nhằm chứng minh chiến lược “chắc chắn thắng”, mà nhằm trả lời câu hỏi thực tế hơn: chiến lược này có đủ bền, đủ hợp lý và đủ an toàn để thử bằng tiền thật với quy mô nhỏ hay không?

Backtest tốt bắt đầu từ câu hỏi đúng
Sai lầm phổ biến của nhiều trader là bắt đầu backtest bằng câu hỏi: “Chiến lược này kiếm được bao nhiêu tiền?” Đây là câu hỏi chưa đủ tốt. Một câu hỏi chuyên nghiệp hơn phải là: “Lợi nhuận này đến từ đâu, có lặp lại được không, có tồn tại ngoài giai đoạn tối ưu không, có còn hiệu quả sau chi phí không, và khi thị trường xấu đi thì chiến lược chịu đựng được đến đâu?” Chỉ khi đặt câu hỏi như vậy, backtest mới trở thành công cụ kiểm định rủi ro thay vì công cụ tự thuyết phục bản thân.
Một backtest đẹp nhưng thiếu kiểm soát có thể rất nguy hiểm. Ví dụ, bạn thử 300 biến thể của một chiến lược: MA 10 cắt MA 30, MA 12 cắt MA 40, RSI 25, RSI 30, stop loss 3%, stop loss 5%, take profit 8%, take profit 12%... Sau đó bạn chọn biến thể có lợi nhuận cao nhất và gọi đó là “chiến lược tối ưu”. Vấn đề là nếu thử đủ nhiều, gần như chắc chắn sẽ có một vài biến thể trông rất đẹp chỉ vì may mắn trên dữ liệu quá khứ. Đây chính là data snooping hoặc backtest overfitting. Halbert White gọi data snooping là tình huống một bộ dữ liệu được dùng lặp đi lặp lại cho mục đích suy luận hoặc chọn mô hình; khi dữ liệu bị tái sử dụng như vậy, kết quả tốt có thể xuất hiện do ngẫu nhiên chứ không phải do phương pháp thật sự có giá trị.
Vì vậy, mục tiêu của robust backtesting không phải là tìm equity curve đẹp nhất. Mục tiêu là loại bỏ dần các chiến lược yếu, phát hiện các lỗi ẩn trong mô phỏng và chỉ giữ lại những chiến lược có lý do tồn tại hợp lý. Một chiến lược có lợi nhuận vừa phải nhưng ổn định qua nhiều giai đoạn thị trường thường đáng tin hơn một chiến lược có lợi nhuận cực cao trong một giai đoạn duy nhất nhưng sụp đổ khi đổi dữ liệu.
Phân chia dataset: đừng để chiến lược “học thuộc quá khứ”
Bước đầu tiên để backtest nghiêm túc là chia dữ liệu đúng cách. Với dữ liệu tài chính, không nên chia ngẫu nhiên như nhiều bài toán machine learning thông thường, vì chuỗi thời gian có thứ tự. Dữ liệu năm sau không được phép xuất hiện trong quá trình tối ưu cho năm trước. Nếu để dữ liệu tương lai lọt vào quá trình thiết kế chiến lược, kết quả backtest sẽ bị look-ahead bias, tức là chiến lược vô tình biết trước tương lai.
Một cách chia dữ liệu cơ bản là chia thành ba phần: in-sample, validation và out-of-sample. In-sample dùng để phát triển ý tưởng và tối ưu tham số ban đầu. Validation dùng để chọn phiên bản chiến lược hợp lý hơn nhưng chưa được xem là kiểm định cuối cùng. Out-of-sample là phần dữ liệu “khóa lại”, chỉ dùng một lần sau khi chiến lược đã được thiết kế xong. Nếu chiến lược chỉ đẹp trong in-sample nhưng yếu rõ rệt ở out-of-sample, khả năng cao là chiến lược đã bị tối ưu quá mức.

Ví dụ, nếu có dữ liệu từ năm 2015 đến 2025, có thể dùng 2015–2020 làm in-sample, 2021–2022 làm validation và 2023–2025 làm out-of-sample. Cách chia này không cố định cho mọi chiến lược, nhưng nguyên tắc quan trọng là dữ liệu kiểm định cuối cùng phải thực sự chưa bị động tới trong quá trình thiết kế. Nếu bạn liên tục xem kết quả out-of-sample rồi sửa chiến lược, phần out-of-sample đó không còn “sạch” nữa. Nó đã bị ô nhiễm bởi quá trình ra quyết định.
Một điểm cần lưu ý là hold-out đơn giản chưa chắc đủ mạnh. Trong bài nghiên cứu về probability of backtest overfitting, các tác giả cho rằng các kỹ thuật tiêu chuẩn để tránh regression overfitting như hold-out có thể không đáng tin trong investment backtests, và đề xuất framework PBO cùng phương pháp combinatorially symmetric cross-validation để ước lượng xác suất một backtest bị overfit. Điều này không có nghĩa nhà đầu tư cá nhân bắt buộc phải dùng phương pháp phức tạp, nhưng nó nhắc ta một điều quan trọng: chỉ chia dữ liệu một lần rồi thấy kết quả đẹp vẫn chưa đủ để tin.
Walk-forward: kiểm tra chiến lược như cách nó sẽ vận hành thật
Walk-forward analysis là một bước nâng cấp quan trọng so với backtest tĩnh. Thay vì tối ưu một lần trên toàn bộ quá khứ rồi kiểm tra một lần trên tương lai, walk-forward mô phỏng cách chiến lược được cập nhật theo thời gian. Cụ thể, bạn tối ưu chiến lược trên một giai đoạn quá khứ, sau đó kiểm tra trên giai đoạn kế tiếp chưa từng thấy. Khi giai đoạn đó kết thúc, bạn trượt cửa sổ dữ liệu lên, tối ưu lại trên phần mới hơn và tiếp tục kiểm tra trên phần tiếp theo.
Ví dụ, bạn dùng dữ liệu 2015–2017 để chọn tham số, sau đó kiểm tra trên năm 2018. Tiếp theo, dùng 2016–2018 để chọn tham số, kiểm tra trên năm 2019. Sau đó dùng 2017–2019 để chọn tham số, kiểm tra trên năm 2020. Cứ như vậy, bạn tạo ra nhiều đoạn out-of-sample nhỏ nối tiếp nhau. Nếu chiến lược có edge thật, nó không nhất thiết phải thắng ở mọi giai đoạn, nhưng kết quả tổng thể phải ổn định, không phụ thuộc vào một giai đoạn may mắn duy nhất.
Walk-forward có giá trị vì thị trường không đứng yên. Một tham số hoạt động tốt trong giai đoạn lãi suất thấp chưa chắc phù hợp trong giai đoạn lãi suất tăng. Một chiến lược breakout hiệu quả trong thị trường có trend mạnh có thể bị thua liên tục trong thị trường đi ngang. Walk-forward giúp kiểm tra xem chiến lược có thích nghi được với thay đổi chế độ thị trường hay không. Một số nghiên cứu gần đây về backtest overfitting trong môi trường machine learning cũng tập trung so sánh các phương pháp validation khác nhau để giảm rủi ro overfitting, cho thấy vấn đề này vẫn rất quan trọng trong nghiên cứu chiến lược hiện đại.
Điểm mạnh của walk-forward là thực tế hơn. Điểm yếu là nó khó “đẹp” hơn. Kết quả walk-forward thường gồ ghề, có giai đoạn tốt, có giai đoạn xấu, có giai đoạn chiến lược gần như không kiếm được tiền. Nhưng chính sự gồ ghề đó lại gần với thị trường thật hơn. Nếu một chiến lược chỉ đẹp khi nhìn toàn bộ quá khứ một lần, nhưng tan rã khi kiểm tra walk-forward, chiến lược đó chưa đủ tin để triển khai.
Out-of-sample: bài kiểm tra sống còn của chiến lược
Out-of-sample là phần dữ liệu mà chiến lược chưa từng được thấy trong quá trình thiết kế. Đây là bài kiểm tra quan trọng nhất để phân biệt edge thật với overfitting. Nhưng out-of-sample chỉ có giá trị nếu bạn giữ đúng kỷ luật. Nếu kết quả out-of-sample xấu, nhiều người có xu hướng quay lại sửa tham số, thêm filter, bỏ điều kiện, thay khung thời gian, rồi chạy lại. Làm vài lần như vậy, out-of-sample đã trở thành một phần của quá trình tối ưu. Khi đó, kết quả đẹp sau cùng không còn đáng tin nữa.
Một chiến lược robust không cần out-of-sample phải đẹp hơn in-sample. Thực tế, out-of-sample thường kém hơn in-sample vì in-sample là nơi chiến lược được phát triển và tối ưu. Điều quan trọng là mức suy giảm có hợp lý hay không. Nếu in-sample có lợi nhuận trung bình 25% một năm, drawdown 10%, profit factor 2,0; nhưng out-of-sample chỉ còn lợi nhuận 3% một năm, drawdown 25%, profit factor 1,05 thì chiến lược gần như không còn edge. Ngược lại, nếu out-of-sample có lợi nhuận thấp hơn nhưng vẫn giữ được cấu trúc tương đối ổn, drawdown không vượt quá mức chịu đựng và hiệu suất sau phí vẫn dương, chiến lược đáng được nghiên cứu tiếp.
Một điểm cần xem là số lượng giao dịch. Backtest có 20 giao dịch trong 8 năm rất khó đáng tin, dù lợi nhuận cao, vì mẫu quá nhỏ. Chỉ vài lệnh may mắn có thể làm kết quả đẹp lên rất nhiều. Ngược lại, một chiến lược có vài trăm giao dịch qua nhiều giai đoạn thị trường cho ta nhiều thông tin hơn, dù kết quả không hoàn hảo. Trong backtesting, không chỉ lợi nhuận quan trọng, mà còn phải xem kết quả đó đến từ bao nhiêu quan sát.
Chi phí giao dịch: nơi nhiều backtest đẹp bị phá vỡ
Một lỗi rất phổ biến là backtest không tính đầy đủ chi phí giao dịch. Trong thực tế, trader phải chịu phí, thuế, spread, trượt giá và đôi khi cả vấn đề thanh khoản. Một chiến lược giao dịch càng nhiều thì chi phí càng quan trọng. Nếu lợi nhuận trung bình mỗi giao dịch chỉ là 0,3% nhưng tổng chi phí thực tế sau phí và trượt giá là 0,25%, chiến lược gần như không còn nhiều biên an toàn. Nếu thị trường biến động mạnh hơn, spread rộng hơn hoặc khớp lệnh xấu hơn, lợi nhuận có thể biến mất hoàn toàn.
Backtest nghiêm túc phải giả định chi phí cao hơn mức lý tưởng. Nếu phí thực tế là 0,15% mỗi chiều, có thể stress test với 0,2% hoặc 0,25%. Nếu chiến lược chỉ còn sống khi chi phí ở mức thấp nhất, nó không đủ robust. Đặc biệt với cổ phiếu thanh khoản thấp, crypto altcoin, hợp đồng phái sinh hoặc forex trong thời điểm tin tức mạnh, trượt giá có thể lớn hơn nhiều so với con số giả định.
Một nguyên tắc thực dụng là lợi nhuận kỳ vọng trung bình trên mỗi giao dịch phải lớn hơn chi phí giao dịch nhiều lần. Nếu mỗi trade chỉ kiếm được một biên rất mỏng, chiến lược sẽ rất nhạy với sai lệch execution. Ngược lại, nếu chiến lược có biên lợi nhuận đủ rộng, nó có khả năng chịu được chi phí thực tế tốt hơn. Đây là lý do nhiều chiến lược backtest đẹp ở khung thời gian rất ngắn lại khó triển khai thật, vì phần edge nhỏ bị chi phí ăn mòn.
Stress test: kiểm tra chiến lược khi thị trường không còn “dễ chịu”
Stress test là bước kiểm tra xem chiến lược chịu được điều kiện xấu đến đâu. Một backtest bình thường trả lời câu hỏi: “Nếu thị trường giống dữ liệu lịch sử, chiến lược ra sao?” Stress test trả lời câu hỏi quan trọng hơn: “Nếu thị trường xấu hơn giả định, chiến lược có còn sống không?” Đây là tư duy rất cần thiết trước khi triển khai thật, vì thị trường thực tế luôn có trượt giá, gap giá, thanh khoản kém, biến động bất thường và những giai đoạn không giống quá khứ.

Một chiến lược robust không cần thắng trong mọi stress test, nhưng không được sụp đổ hoàn toàn chỉ vì giả định xấu đi một chút. Nếu tăng slippage thêm 0,1% mà lợi nhuận biến mất, chiến lược quá mỏng. Nếu thay RSI từ 30 sang 31 mà kết quả khác hoàn toàn, chiến lược quá khớp tham số. Nếu vào lệnh chậm một phiên mà hệ thống chuyển từ lãi lớn sang lỗ nặng, chiến lược có thể chỉ đang ăn một tín hiệu quá ngắn và khó thực hiện thật.
Kiểm tra độ nhạy tham số: vùng tốt quan trọng hơn điểm tốt nhất
Một backtest đáng tin thường có “vùng tham số tốt”, không chỉ có “một tham số tốt”. Ví dụ, nếu chiến lược MA crossover tốt nhất ở MA 17 và MA 43, nhưng MA 16/42, 18/44, 20/50 đều lỗ nặng, thì kết quả MA 17/43 rất đáng nghi. Nó có thể chỉ là một điểm may mắn trong dữ liệu quá khứ. Ngược lại, nếu nhiều cụm tham số gần nhau đều cho kết quả tương đối ổn, chiến lược có khả năng phản ánh một hiện tượng thị trường thật hơn.
Đây là nguyên tắc rất quan trọng. Người mới thường thích tối ưu để tìm bộ tham số có lợi nhuận cao nhất. Người có kinh nghiệm lại thích tìm vùng tham số ổn định. Một hệ thống kiếm ít hơn một chút nhưng ít nhạy với tham số thường đáng tin hơn một hệ thống có lợi nhuận tối đa nhưng chỉ hoạt động ở một cấu hình rất hẹp. Trong thực tế giao dịch, thị trường luôn thay đổi, nên chiến lược quá phụ thuộc vào một tham số chính xác sẽ rất dễ hỏng khi điều kiện thay đổi.
Cách làm đơn giản là tạo một ma trận tham số. Ví dụ, test MA ngắn từ 10 đến 30, MA dài từ 40 đến 100. Sau đó nhìn xem vùng nào có kết quả tốt ổn định. Nếu chỉ có một ô sáng duy nhất, cần nghi ngờ. Nếu có một vùng sáng rộng, chiến lược đáng nghiên cứu hơn. Tư duy này giúp nhà đầu tư tránh bị cuốn vào “đỉnh tối ưu giả”.
Đừng chỉ nhìn lợi nhuận, hãy nhìn chất lượng lợi nhuận
Một chiến lược tăng tài khoản từ 100 triệu lên 200 triệu trong backtest nghe có vẻ hấp dẫn. Nhưng nếu trong quá trình đó có lúc tài khoản giảm từ 180 triệu xuống 90 triệu, tức drawdown 50%, rất ít người có thể chịu được khi giao dịch thật. Vì vậy, lợi nhuận không bao giờ được nhìn riêng. Cần nhìn cùng drawdown, thời gian hồi phục, số lệnh, tỷ lệ lời/lỗ, độ lệch lợi nhuận, mức tập trung lợi nhuận và sự ổn định qua từng giai đoạn.
Sharpe ratio là chỉ số phổ biến, nhưng cũng có thể bị thổi phồng nếu có nhiều thử nghiệm và chọn kết quả tốt nhất. Bailey và López de Prado đề xuất Deflated Sharpe Ratio để điều chỉnh hai nguồn làm phồng hiệu suất phổ biến: selection bias do thử nhiều mô hình và phân phối lợi nhuận không chuẩn. Điều này rất thực tế vì lợi nhuận tài chính thường không phân phối đẹp như lý thuyết, và nhà đầu tư hiếm khi chỉ thử một chiến lược duy nhất rồi dừng lại.
Một chiến lược chất lượng nên trả lời được các câu hỏi: lợi nhuận có đến từ nhiều lệnh hay chỉ một vài lệnh lớn? Chiến lược có sống qua giai đoạn thị trường xấu không? Drawdown tối đa có thực tế với tâm lý và vốn của người giao dịch không? Nếu bỏ 5 giao dịch tốt nhất, chiến lược còn ổn không? Nếu tăng chi phí giao dịch, lợi nhuận còn dương không? Nếu câu trả lời cho các câu hỏi này đều yếu, backtest chưa đủ tin.
Những lỗi nguy hiểm làm backtest mất giá trị
Có một số lỗi khiến backtest nhìn rất đẹp nhưng gần như vô dụng khi triển khai thật. Lỗi đầu tiên là look-ahead bias, tức sử dụng thông tin tại thời điểm chưa thể biết. Ví dụ, dùng giá đóng cửa để tạo tín hiệu rồi giả định mua được ở chính giá đóng cửa đó, trong khi thực tế bạn chỉ biết tín hiệu sau khi nến đóng. Lỗi thứ hai là survivorship bias, tức chỉ test trên những cổ phiếu còn tồn tại hoặc còn mạnh hiện tại, bỏ qua các cổ phiếu đã hủy niêm yết, phá sản hoặc suy yếu. Điều này làm kết quả quá lạc quan.
Lỗi thứ ba là bỏ qua thanh khoản. Một chiến lược có thể kiếm tiền trên giấy khi mua cổ phiếu thanh khoản thấp, nhưng nếu vốn thật lớn hơn thanh khoản thị trường, bạn không thể khớp lệnh ở giá backtest giả định. Lỗi thứ tư là tối ưu quá nhiều tham số. Càng nhiều tham số, chiến lược càng dễ học thuộc quá khứ. Lỗi thứ năm là không ghi lại số lần thử nghiệm. Nếu bạn thử 200 ý tưởng và chỉ báo cáo ý tưởng thắng, kết quả đó đã có selection bias rất lớn.
Một quy tắc nghiêm túc là phải lưu nhật ký nghiên cứu. Mỗi lần thử chiến lược, thay tham số, thêm filter, đổi timeframe, cần ghi lại. Việc này không chỉ giúp quản lý quá trình nghiên cứu, mà còn giúp bạn trung thực với chính mình. Nếu chiến lược hiện tại là kết quả của hàng trăm lần thử, bạn phải đánh giá nó khắt khe hơn nhiều so với một chiến lược được xây dựng từ một giả thuyết rõ ràng và ít tinh chỉnh.
Khi nào backtest đủ tin để triển khai thật?
Không có ngưỡng tuyệt đối cho mọi chiến lược, nhưng có một số tiêu chí thực tế. Chiến lược nên có logic thị trường rõ ràng, không chỉ là tổ hợp chỉ báo ngẫu nhiên. Kết quả in-sample và out-of-sample không được lệch nhau quá lớn. Walk-forward nên cho thấy hiệu suất không phụ thuộc vào một giai đoạn duy nhất. Chiến lược phải còn sống sau khi tăng chi phí giao dịch và trượt giá. Tham số phải có vùng ổn định, không phải một điểm tối ưu cô lập. Drawdown phải nằm trong mức người giao dịch thật sự chịu được, không phải mức chịu được trên lý thuyết.
Trước khi triển khai vốn thật, nên đi qua ba bước: backtest sạch, paper trading và live nhỏ. Paper trading giúp kiểm tra quy trình vận hành, tín hiệu, tốc độ ra quyết định và khả năng bám hệ thống. Live nhỏ giúp kiểm tra những thứ paper trading không đo được tốt, như cảm xúc, khớp lệnh, trượt giá, thanh khoản và kỷ luật khi tiền thật biến động. Chỉ khi chiến lược hoạt động ổn trong live nhỏ, mới nên nâng vốn từng bước.
Kết luận
Robust backtesting không phải là tạo ra một đường lợi nhuận đẹp nhất trong quá khứ. Đó là quá trình kiểm tra xem một chiến lược có đủ bền trước dữ liệu chưa từng thấy, đủ ổn qua nhiều giai đoạn thị trường, đủ chịu được chi phí giao dịch, đủ ít nhạy với tham số và đủ rõ logic để triển khai bằng tiền thật hay không. Một backtest đẹp có thể khiến nhà đầu tư tự tin, nhưng một backtest robust mới giúp nhà đầu tư sống sót.
Điểm cốt lõi cần nhớ là: thị trường thật không trả tiền cho chiến lược khớp quá khứ tốt nhất, mà trả tiền cho chiến lược có edge lặp lại được trong tương lai. Vì vậy, trước khi đưa bất kỳ hệ thống nào vào giao dịch thật, hãy kiểm tra nó bằng out-of-sample, walk-forward, stress test, chi phí giao dịch thực tế và kiểm tra độ nhạy tham số. Nếu chiến lược vẫn đứng vững sau những lớp kiểm định đó, nó chưa chắc đã thắng, nhưng ít nhất nó đã vượt qua những bài kiểm tra cần thiết để xứng đáng được triển khai với quy mô nhỏ và quản trị rủi ro nghiêm túc.
