Mục lục
Nội dung này phục vụ mục đích giáo dục, không phải lời khuyên đầu tư hoặc tín hiệu giao dịch.
Trả lời ngắn: Walk-forward Analysis là cách kiểm định chiến lược theo thứ tự thời gian: chọn hoặc huấn luyện luật trên một đoạn quá khứ, khóa phiên bản đó, đo trên đoạn kế tiếp chưa dùng, rồi cuốn cửa sổ về phía trước và lặp lại. Kết quả cần ghép từ tất cả đoạn kiểm tra, không chỉ vòng đẹp nhất.
Đọc xong, bạn sẽ hiểu:
- WFA khác một backtest chia train/test một lần ở điểm nào.
- Cách đọc rolling window, anchored window và chuỗi kết quả ngoài mẫu.
- Cách điền WFA Fold Card bằng dữ liệu giả, chưa dùng tiền thật.
1. Walk-forward Analysis là gì?
a. Học đoạn trước, thi đoạn kế
Hãy tưởng tượng bạn ôn bằng đề tháng 1–6, chốt cách làm, rồi thi bằng đề tháng 7. Sang vòng sau, bạn ôn bằng dữ liệu mới hơn và thi bằng tháng 8. Bạn không được mở đáp án tháng 7 rồi lén sửa bài đã nộp.
Trong Walk-forward Analysis (WFA), đoạn dùng để chọn mô hình, luật hoặc tham số gọi là in-sample (IS). Đoạn thời gian ngay sau đó, chưa được dùng cho lựa chọn ấy, gọi là out-of-sample (OOS). Một cặp IS–OOS là một fold, tức một vòng học và kiểm tra.
QuantConnect mô tả walk-forward optimization là việc định kỳ điều chỉnh logic hoặc tham số theo cửa sổ quá khứ gần nhất. Tối ưu thường xuyên bám dữ liệu mới hơn nhưng tăng nguy cơ overfitting; quá thưa thì phản ứng chậm (QuantConnect — Walk Forward Optimization).
b. WFA không phải một nhãn dán cho backtest
Một backtest có thể chia train/test một lần. WFA lặp phép chia qua nhiều điểm thời gian để nhìn độ ổn định giữa các giai đoạn.
| Phép thử | Luật được chọn ở đâu? | Đo ở đâu? | Câu hỏi chính |
|---|---|---|---|
| Backtest toàn kỳ | Có thể trên chính toàn kỳ | Toàn kỳ | Lịch sử trông ra sao? |
| Một lần IS/OOS | IS đầu kỳ | Một OOS cuối kỳ | Luật có qua một bài thi chưa thấy? |
| Walk-forward | IS trước mỗi fold | OOS ngay sau fold | Độ ổn định thay đổi thế nào qua thời gian? |
| Forward paper | Đã khóa trước khi chạy | Dữ liệu mới đến theo đồng hồ thật | Hệ thống có vận hành đúng thiết kế hôm nay? |
WFA vẫn chạy trên dữ liệu lịch sử. Nó không tự biến thành Forward Test và càng không phải giao dịch tiền thật. Nếu còn lẫn ranh giới này, đọc lại Backtest khác Forward Test thế nào.
Hình 1 — Mỗi vòng chỉ học từ quá khứ, khóa phiên bản rồi mới mở đoạn OOS kế tiếp.
2. WFA hoạt động như thế nào?
a. Sáu bước của một vòng sạch
Một WFA có sáu bước:
- Chốt timeline: chọn độ dài IS, OOS và bước cuốn trước khi xem kết quả.
- Fit hoặc optimize: dùng riêng IS để chọn tham số hay huấn luyện model.
- Freeze: khóa code, feature, tham số, chi phí và data contract của vòng đó.
- Test OOS: chạy đúng phiên bản đã khóa trên đoạn kế tiếp.
- Log: lưu mọi giao dịch, lỗi, chi phí và chỉ số; không chỉ lưu lợi nhuận.
- Roll: dịch cửa sổ về phía trước rồi lặp lại.
Freeze nghĩa là không sửa ruleset sau khi nhìn OOS. Nếu sửa, hãy tăng phiên bản và chạy nghiên cứu mới.
b. Rolling và anchored khác nhau ở phần ký ức
Với rolling window, IS có độ dài cố định: tháng cũ nhất rơi ra khi tháng mới đi vào. Nó ưu tiên dữ liệu gần nhưng có thể quên regime hiếm.
Với anchored window, điểm đầu giữ nguyên còn cuối IS mở rộng. TimeSeriesSplit của scikit-learn cho phép train set tích lũy và đặt gap trước test (scikit-learn — TimeSeriesSplit). Anchored giữ nhiều lịch sử hơn nhưng dữ liệu cũ có thể lấn át môi trường mới.
Hình 2 — Rolling giữ độ dài ký ức cố định; anchored giữ điểm đầu và tích lũy lịch sử.
c. Ví dụ 24 tháng, bốn fold
Giả sử ta có 24 tháng dữ liệu giả. Mỗi fold dùng 12 tháng IS và 3 tháng OOS, rồi cuốn 3 tháng:
| Fold | IS | OOS | Tham số khóa | OOS return | OOS drawdown |
|---|---|---|---|---|---|
| 1 | T1–T12 | T13–T15 | A | +2,4% | -3,1% |
| 2 | T4–T15 | T16–T18 | B | +0,8% | -2,6% |
| 3 | T7–T18 | T19–T21 | C | -3,7% | -7,9% |
| 4 | T10–T21 | T22–T24 | B | +1,1% | -2,2% |
Các số chỉ để học cách đọc. Stitch OOS là ghép cả bốn đoạn OOS theo thời gian. Không bỏ fold 3 vì xấu, cũng không cộng phần trăm nếu chưa xử lý compounding, vốn, chi phí và vị thế qua ranh giới fold.
3. WFA giúp gì và vẫn có thể sai ở đâu?
a. Nó buộc nghiên cứu đi cùng chiều thời gian
WFA cho thấy tham số có ổn định không, chiến lược suy yếu ở regime nào và lịch tái huấn luyện có hợp với tốc độ thay đổi dữ liệu không.
Chắc chắn: OOS phải nằm sau IS. Có điều kiện: nhiều fold dương có thể ổn định hơn một fold, nhưng còn phụ thuộc số event, chi phí và cách chọn tham số.
b. Bảy cách biến WFA thành máy tự lừa mình
- Data leakage: feature hoặc nhãn dùng thông tin chưa tồn tại tại thời điểm dự báo.
- Chọn cửa sổ sau khi xem kết quả: thử 20 lịch rồi chỉ báo cáo lịch đẹp nhất.
- Metric shopping: Sharpe xấu thì đổi sang return; return xấu lại đổi sang win rate.
- Chỉ khoe fold tốt: xóa fold 3 trong ví dụ khiến chuỗi OOS mất ý nghĩa.
- Thiếu chi phí: bỏ spread, fee, slippage hoặc funding làm kết quả quá lạc quan.
- Sửa code giữa fold: bug fix có thể cần thiết, nhưng phải tăng version và chạy lại có kiểm soát.
- Meta-overfitting: không chỉ tối ưu tham số chiến lược mà còn tối ưu luôn độ dài IS, OOS, bước cuốn và metric trên cùng lịch sử.
Probability of Backtest Overfitting cho thấy chọn “người thắng” từ nhiều cấu hình có thể tạo OOS yếu do selection bias (Bailey và cộng sự — PBO). WFA không cứu được việc thử đến khi đẹp.
c. WFA không thay thế paper và live
WFA vẫn dùng quá khứ. NFA cảnh báo kết quả giả định có lợi thế nhìn lại, không đại diện actual trading và có thể chưa phản ánh đầy đủ thanh khoản (NFA Compliance Rule 2-29).
Pass WFA chỉ nghĩa là hệ thống vượt protocol lịch sử đã định. Bước kế là forward paper, không phải cấp vốn. Nếu bốn fold chỉ có 11 giao dịch, mẫu quá nhỏ để kết luận edge bền hay mất.
4. Checklist thiết kế WFA sạch
a. Viết WFA Contract trước khi chạy
- Ghi rõ universe, timeframe, feature, label, entry/exit và vị thế.
- Chốt độ dài IS/OOS, rolling hay anchored, bước cuốn và số fold.
- Chọn một objective chính cùng chỉ số rủi ro bắt buộc.
- Dùng dữ liệu point-in-time: tại mỗi timestamp chỉ thấy thông tin tồn tại lúc đó.
- Mô phỏng phí, spread, slippage và quy tắc fill nhất quán.
- Khóa seed, code hash, config và data snapshot của từng fold.
- Báo cáo mọi fold; ghép toàn bộ OOS theo đúng thứ tự.
- Chốt stop rule trước: vi phạm drawdown, thiếu event hoặc lỗi data thì dừng.
b. Khi nhãn chồng lấn, cần khoảng cách
Nếu label dùng lợi nhuận 5 ngày tới, mẫu sát biên IS–OOS có thể chồng lấn. Purge bỏ mẫu train chồng test; embargo đặt thêm khoảng trống. Gap phải dựa trên horizon thật của label và vị thế.
Nên giữ final holdout chưa mở để kiểm protocol. Xem nó rồi sửa cửa sổ hay metric sẽ biến nó thành development data.
c. Dừng trước khi chạy nếu thiếu nền
Đứng ngoài khi dữ liệu quá ngắn, quá ít event, timestamp không đáng tin, code không tái lập hoặc ruleset thiếu version. WFA phức tạp không cứu được data contract mơ hồ.
5. Bài tập 15 phút: điền WFA Fold Card
a. Dùng công cụ miễn phí
Mở Google Sheets hoặc LibreOffice Calc. Tạo bốn dòng theo ví dụ mục 2 với các cột fold, IS, OOS, version, trades, return, drawdown, violation, decision.
Chép số giả: 18, 15, 9, 17 giao dịch; fold 3 drawdown -7,9% trong khi stop rule là -6%. Không nối API và không dùng tiền.
b. Mẫu tham khảo đã điền
| Trường | Mẫu tham khảo |
|---|---|
| Protocol | rolling 12 tháng IS / 3 tháng OOS / step 3 tháng |
| Fold hoàn tất | 4/4, không xóa fold xấu |
| OOS event | 59 giao dịch giả |
| Vi phạm | Fold 3: drawdown -7,9% vượt stop rule -6% |
| Decision | STOP + INVESTIGATE |
Xem cách ra quyết định mẫu
Giữ nguyên cả bốn fold, đánh dấu fold 3 là vi phạm và chọn STOP + INVESTIGATE. Kiểm data, regime, cost và implementation trước. Không đổi stop rule thành -8% chỉ để hợp thức hóa kết quả; nếu đổi protocol, tạo một nghiên cứu mới.
Hình 3 — Card giữ lại fold xấu và buộc quyết định theo stop rule đã khóa.
c. Tự kiểm bài tập
Kết quả đúng là audit trail: đủ bốn fold, protocol có version, vi phạm được ghi và quyết định không bị sửa theo P&L. Bài tập chưa chứng minh edge và chưa dùng tiền thật.
6. Tổng kết
a. Năm ý chính
- WFA lặp chu trình học trên IS, khóa phiên bản và đo trên OOS kế tiếp.
- Rolling window quên dữ liệu cũ; anchored window tích lũy dữ liệu từ điểm đầu.
- Chỉ chuỗi ghép từ mọi OOS mới phản ánh đúng protocol; không được chọn fold đẹp.
- Leakage, metric shopping và meta-overfitting vẫn có thể làm WFA sai.
- Pass WFA chỉ mở đường sang forward paper; không bảo đảm lợi nhuận hay cấp phép dùng tiền thật.
b. Câu hỏi tự kiểm tra
- Vì sao OOS của mỗi fold phải nằm sau IS?
- Rolling window khác anchored window ở điểm nào?
- Vì sao không được bỏ fold 3 xấu?
- Khi nào final holdout mất trạng thái “chưa thấy”?
c. Gợi ý đáp án
Xem gợi ý câu 1
Vì tại thời điểm ra quyết định, hệ thống chỉ được biết quá khứ. Xem mục 1 và 2.
Xem gợi ý câu 2
Rolling giữ độ dài cố định và bỏ dữ liệu cũ; anchored giữ điểm đầu rồi mở rộng. Xem mục 2b.
Xem gợi ý câu 3
Vì bỏ fold xấu là selection bias và phá chuỗi OOS. Xem mục 2c và 3b.
Xem gợi ý câu 4
Khi ta mở nó, xem kết quả rồi sửa model, cửa sổ hoặc metric. Xem mục 4b.
d. Thuật ngữ cần nhớ
| Thuật ngữ | Giải thích ngắn |
|---|---|
| WFA | Kiểm định cuốn chiếu theo thứ tự thời gian |
| In-sample | Đoạn dùng để chọn hoặc huấn luyện |
| Out-of-sample | Đoạn kế tiếp không dùng cho lựa chọn đó |
| Fold | Một cặp IS–OOS |
| Rolling window | Cửa sổ cố định, bỏ dần dữ liệu cũ |
| Anchored window | Giữ điểm đầu, mở rộng dần dữ liệu |
| Freeze | Khóa phiên bản trước khi mở OOS |
| Data leakage | Thông tin tương lai lọt vào quá trình học |
| Purge/embargo | Khoảng loại bỏ để giảm chồng lấn thông tin |
| Final holdout | Đoạn cuối chưa dùng để chọn protocol |
e. Nguồn tham khảo
- QuantConnect — Walk Forward Optimization
- scikit-learn — TimeSeriesSplit
- Bailey và cộng sự — The Probability of Backtest Overfitting
- NFA — Compliance Rule 2-29
Quay lại AI Trading: Zero to Hero để xem toàn lộ trình. Bài kế tiếp sẽ đi thẳng vào Overfitting trong Trading.
Chọn đúng bài trong lộ trình
Bài này tập trung vào walk-forward analysis là gì — giải thích cửa sổ cuốn chiếu và chuỗi ngoài mẫu. Nếu bạn cần bức tranh chung trước khi đi sâu, hãy bắt đầu từ AI Trading là gì? Hướng dẫn từ nền tảng đến kiểm định. Các bước liên quan trực tiếp là Backtest khác Forward Test thế nào, Overfitting trong Trading và Data Leakage và Look-ahead Bias.
Nội dung này phục vụ mục đích giáo dục, không phải lời khuyên đầu tư hoặc tín hiệu giao dịch. Mọi thị trường đều có rủi ro mất vốn.
Bài tiếp theo