OptiNod Academy
Phân tích walk-forward — cách kiểm chứng bản thân quy trình tối ưu hóa
Điểm số từ việc tối ưu hóa toàn bộ giai đoạn cùng lúc là điểm số như thể đã biết trước tương lai. Walk-forward chọn thiết lập trên dữ liệu in-sample rồi chỉ đánh giá trên giai đoạn out-of-sample kế tiếp, qua đó kiểm tra chính quy trình tối ưu hóa.
> Nếu tối ưu hóa toàn bộ giai đoạn cùng lúc, bạn sẽ nhận được một điểm số như thể đã biết trước đáp án từ tương lai. Walk-forward kiểm tra chính quy trình tối ưu hóa chỉ trên các đoạn dữ liệu chưa từng nhìn trước.
Phân tích walk-forward (Walk-Forward Analysis) là phương pháp kiểm chứng trong đó dữ liệu được chia theo trình tự thời gian thành giai đoạn in-sample và out-of-sample. Ta tối ưu tham số trên in-sample, sau đó chỉ đánh giá đúng thiết lập đó trên giai đoạn out-of-sample kế tiếp. Cửa sổ này được trượt dần theo trục thời gian, lặp lại cùng một quy trình, rồi nối riêng các kết quả out-of-sample lại thành một đường cong được xem như ước tính gần hơn với hiệu quả giao dịch thực tế.
Phần lớn người giao dịch nhìn backtest khá đơn giản. Họ chạy một lần trên toàn bộ giai đoạn; nếu đường cong lợi nhuận tích lũy đi lên và mức sụt giảm tối đa còn chịu được, họ xem đó là chiến lược tốt. Thông thường, tối ưu hóa cũng chỉ dừng ở việc chạy hàng chục tổ hợp tham số rồi chọn cấu hình có kết quả tốt nhất.
Nhưng cách tối ưu hóa toàn bộ giai đoạn cùng lúc có một khiếm khuyết không thể né tránh: chính dữ liệu dùng để tối ưu lại được dùng tiếp để đánh giá hiệu quả. Nếu chọn RSI chu kỳ 17 vì “từ năm 2021 đến 2024, 17 cho kết quả tốt nhất”, thì việc RSI 17 đạt điểm cao trong cùng giai đoạn đó là điều hiển nhiên. Nó gần giống một bài kiểm tra đã biết trước đáp án. Phân tích walk-forward đổi góc nhìn ở điểm này. Thứ cần kiểm chứng là chính quy trình tối ưu hóa: “chọn tham số dựa trên dữ liệu ngay trước đó”.

Tối ưu hóa toàn bộ giai đoạn cùng lúc tạo ra điểm số đã biết trước tương lai
Cơ chế khiến điểm số của tối ưu hóa toàn kỳ bị thổi phồng rất đơn giản. Càng có nhiều tổ hợp tham số, càng dễ có một tổ hợp tình cờ khớp rất tốt với riêng giai đoạn đó. Nếu chạy 50 tổ hợp, tổ hợp đứng đầu có thể phản ánh lợi thế thật của chiến lược, nhưng khả năng cao hơn là nó chỉ khớp nhất với nhiễu của giai đoạn đó nên đứng hạng nhất. Đây gọi là quá khớp hay quá tối ưu hóa (overfitting), và cách tối ưu toàn bộ giai đoạn cùng lúc về mặt cấu trúc không có cơ chế nào để lọc hiện tượng này.
Nhìn vào dữ liệu thực tế sẽ thấy rõ hơn. BTC duy trì xu hướng giảm khá nhất quán trong năm 2022, từ khoảng 46.000 USD vào tháng 1 xuống khoảng 16.500 USD vào tháng 12. Nếu chỉ dùng dữ liệu năm 2022 để tối ưu một chiến lược theo xu hướng, hầu như mọi tham số sẽ hội tụ về hướng “ưu tiên short, bỏ qua các nhịp hồi”. Trong giai đoạn đó, thiết lập như vậy cho điểm số vượt trội. Nhưng khi áp dụng cùng thiết lập sang năm 2023, kết quả thay đổi. BTC phục hồi từ 16.500 USD vào tháng 1 năm 2023 lên 34.000 USD vào tháng 10, rồi lên 42.000 USD vào tháng 12. Thiết lập thiên về short vốn tối ưu trong năm 2022 sẽ liên tục đặt cược ngược chiều trong thị trường phục hồi năm 2023 và tích lũy thua lỗ.
Khi tối ưu hóa toàn bộ giai đoạn cùng lúc, hai năm này bị gộp lại và lấy trung bình, rồi điểm số cao do một thiết lập tình cờ quá khớp với một phía của thị trường được ghi nhận như “năng lực của chiến lược”. Điểm số càng đẹp, càng cần nghi ngờ.
Out-of-sample là dữ liệu chỉ được dùng để kiểm tra một lần
Quy tắc cốt lõi của walk-forward là tuyệt đối không dùng giai đoạn out-of-sample để quyết định tham số. Sau khi chọn tham số trên in-sample, ta giữ nguyên thiết lập đó và mô phỏng giao dịch trên giai đoạn kế tiếp chưa từng được nhìn thấy. Dù kết quả tốt hay xấu, nó đều được ghi lại, rồi cửa sổ được trượt sang cặp tiếp theo.
Quy trình này giống giao dịch thực tế vì nó tôn trọng cùng một chiều thời gian. Trong thực chiến, trader dùng dữ liệu quá khứ để xác định thiết lập, rồi giao dịch với thiết lập đó trong tương lai chưa xảy ra. Họ bước vào thị trường mà không biết tương lai sẽ diễn biến ra sao. Nhìn từ thời điểm in-sample, giai đoạn out-of-sample trong walk-forward đóng đúng vai trò của “tương lai chưa đến” đó. Vì vậy, đường cong chỉ nối các kết quả out-of-sample gần với thực chiến hơn nhiều so với kết quả tối ưu hóa toàn bộ giai đoạn cùng lúc.
Cụ thể, giả sử áp dụng in-sample 2 năm và out-of-sample 6 tháng trên dữ liệu ngày của BTC. Ta chọn tham số bằng dữ liệu từ tháng 1 năm 2021 đến tháng 12 năm 2022, rồi chỉ đánh giá thiết lập đó trong giai đoạn tháng 1 đến tháng 6 năm 2023. Tiếp theo, trượt cửa sổ thêm 6 tháng, tối ưu lại bằng dữ liệu từ tháng 7 năm 2021 đến tháng 6 năm 2023, rồi đánh giá trong giai đoạn tháng 7 đến tháng 12 năm 2023. Khi tiếp tục trượt như vậy, mỗi giai đoạn out-of-sample đều từng là tương lai chưa được nhìn thấy tại thời điểm in-sample ngay trước nó. Chính điểm này tạo độ tin cậy cho đường cong out-of-sample.
Rolling và anchored khác nhau ở tốc độ thích nghi
Có hai cách chính để dịch chuyển cửa sổ in-sample.
- Cửa sổ rolling (Rolling): Giữ cố định độ dài in-sample và đẩy toàn bộ cửa sổ về phía trước. Nó luôn chỉ nhìn dữ liệu gần đây, chẳng hạn 2 năm gần nhất. Dữ liệu cũ bị loại bỏ.
- Cửa sổ anchored (Anchored): Giữ cố định điểm bắt đầu in-sample ban đầu và chỉ liên tục kéo dài điểm kết thúc. Giai đoạn đầu là 2 năm, tiếp theo là 2 năm rưỡi, rồi 3 năm, và toàn bộ dữ liệu quá khứ vẫn tiếp tục được dùng để học.
Khác biệt giữa hai cách thể hiện rõ khi trạng thái thị trường thay đổi. Rolling chỉ nhìn dữ liệu gần đây nên thích nghi nhanh với xu hướng mới, nhưng cũng nhanh chóng quên những sự kiện hiếm đã từng xảy ra. Các cú giảm mạnh như tháng 6 năm 2022, khi Celsius ngừng rút tiền và Three Arrows Capital (3AC) phá sản khiến BTC rơi về 17.600 USD, hoặc cú giảm tháng 11 do FTX phá sản kéo BTC xuống 15.500 USD, sẽ sớm bị đẩy ra ngoài vùng học nếu cửa sổ rolling chỉ nhìn 2 năm. Kết quả là chiến lược có thể lại thiếu phòng vệ trước một biến cố tương tự. Anchored ghi nhớ các sự kiện đó vĩnh viễn, nhưng càng tích lũy nhiều dữ liệu, tỷ trọng của quá khứ xa càng lớn và chiến lược càng chậm phản ứng với các cú đảo chiều xu hướng gần đây.
Tiêu chí lựa chọn phụ thuộc vào bản chất thị trường. Trong crypto, nơi chế độ thị trường thay đổi thường xuyên, rolling thường có lợi thế về khả năng thích nghi. Với các thị trường có cấu trúc biến đổi chậm hơn, hoặc các chiến lược cần chịu được khủng hoảng hiếm gặp, anchored có xu hướng an toàn hơn. Dù chọn cách nào, việc liên tục đổi phương pháp cho đến khi kết quả đẹp lên sẽ làm mất ý nghĩa kiểm chứng.

Khi hiệu suất walk-forward lệch xa 1, cần nghi ngờ quá tối ưu hóa
Nếu chỉ nhìn đường cong out-of-sample bằng mắt, đánh giá rất dễ mơ hồ. Chỉ báo dùng để nén kết quả thành một con số là hiệu suất walk-forward (Walk-Forward Efficiency, WFE). Định nghĩa rất đơn giản: lấy hiệu quả của các giai đoạn out-of-sample chia cho hiệu quả của các giai đoạn in-sample. Nếu tính theo lợi nhuận, một thiết lập tạo ra 40% lợi nhuận quy đổi năm trong in-sample và 32% quy đổi năm trong out-of-sample thì hiệu suất là 0,8.
Có một số mốc tham chiếu để diễn giải giá trị này.
- Từ 0,8 đến 1,0: Tương đối vững. Thiết lập được chọn bằng tối ưu hóa vẫn giữ được phần lớn năng lực trong các giai đoạn chưa từng thấy.
- Từ 0,5 đến 0,8: Cần thận trọng. Một phần đáng kể hiệu quả in-sample có thể chỉ là may mắn chỉ đúng trong giai đoạn đó.
- Dưới 0,5: Cần nghi ngờ mạnh về quá tối ưu hóa. Nếu out-of-sample không tái hiện nổi một nửa điểm số in-sample, khó có thể xem thiết lập đó là đã nắm bắt được lợi thế thị trường. Nó gần với kết quả được khớp theo nhiễu quá khứ hơn.
Cũng có trường hợp hiệu suất vượt 1. Điều này xảy ra khi giai đoạn out-of-sample tình cờ thuận lợi cho chiến lược hơn giai đoạn in-sample. Nếu một đoạn thị trường phục hồi ít biến động và xu hướng mượt như nửa cuối năm 2023 rơi vào vị trí out-of-sample, hiệu suất đôi khi có thể lên đến 1,2. Nhưng không nên xem giá trị trên 1 là năng lực thật. Khi cửa sổ kế tiếp gặp biến động lớn hơn, nó có thể nhanh chóng quay xuống dưới 1. Gom hiệu suất của nhiều cửa sổ để xem cả trung bình lẫn phân phối sẽ đáng tin hơn một con số đơn lẻ từ một giai đoạn.

Độ dài cửa sổ và bước trượt phải được quyết định theo số mẫu giao dịch
Sai lầm phổ biến nhất khi thiết lập cửa sổ là chọn giai đoạn in-sample quá ngắn. Giai đoạn càng ngắn trông càng nhạy với thị trường gần đây, nhưng nếu bên trong chỉ có vài giao dịch thì bản thân việc tối ưu hóa mất ý nghĩa. Nếu in-sample chỉ có 20 giao dịch, một hoặc hai lệnh lời lớn có thể chi phối lựa chọn tham số, và thiết lập được chọn như vậy thường sụp đổ trong out-of-sample.
Nên tính ngược từ tần suất giao dịch. Với một chiến lược swing có thời gian nắm giữ trung bình một tuần và giao dịch bốn đến năm lần mỗi tháng, để có hơn 100 giao dịch trong in-sample cần ít nhất 1 năm rưỡi đến 2 năm. Các chiến lược giao dịch thưa hơn, như theo xu hướng trên khung ngày, cần in-sample dài hơn. Nhìn vào giai đoạn đi ngang của BTC năm 2024: sau khi vượt đỉnh năm 2021 và chạm 73.777 USD vào tháng 3, BTC dao động trong vùng 58.000 đến 72.000 USD cho đến tháng 11. Trong 8 tháng đó, chiến lược theo xu hướng hầu như không có nhiều điểm vào lệnh. Nếu toàn bộ thị trường đi ngang như vậy rơi vào in-sample, mẫu giao dịch sẽ gần như trống và việc tối ưu hóa trở nên vô nghĩa.
Thời lượng out-of-sample và bước trượt thường được đặt bằng nhau. Nếu out-of-sample là 6 tháng, cửa sổ cũng trượt từng 6 tháng. Nếu out-of-sample quá ngắn, mỗi giai đoạn chỉ có vài giao dịch nên giá trị hiệu suất dao động thất thường. Nếu quá dài, chu kỳ tái tối ưu hóa bị kéo giãn và không kiểm chứng được khả năng thích nghi trước chuyển hướng thị trường. Với các chiến lược có quá ít mẫu giao dịch, điều trung thực trước tiên là thừa nhận rằng bản thân kết quả walk-forward khó đáng tin. Khi mẫu không đủ, không phương pháp kiểm chứng nào phân biệt rõ được may mắn và năng lực.
- [ ] Số giao dịch in-sample: Chọn độ dài sao cho mỗi giai đoạn in-sample có ít nhất 100 giao dịch. Nếu dưới 50 giao dịch, hãy kéo dài in-sample hoặc hạ xuống khung thời gian ngắn hơn.
- [ ] Số giao dịch out-of-sample: Kiểm tra mỗi giai đoạn out-of-sample có ít nhất 20 giao dịch hay không. Nếu ít hơn, đừng tin từng giá trị hiệu suất riêng lẻ; chỉ nên nhìn trung bình của nhiều giai đoạn.
- [ ] Số lượng cửa sổ: Chọn bước trượt sao cho toàn bộ dữ liệu tạo được ít nhất 5 cặp in-sample và out-of-sample. Nếu chỉ có 2 đến 3 cặp, giá trị trung bình sẽ dễ bị may rủi chi phối.
Chỉnh sửa sau khi đã xem out-of-sample sẽ làm mất kiểm chứng
Hành vi thường xuyên làm vô hiệu walk-forward nhất là xem kết quả out-of-sample rồi quay lại chỉnh tham số hoặc cửa sổ. Nếu hiệu suất out-of-sample ra 0,4, rồi bạn thu hẹp phạm vi tối ưu hóa in-sample và chạy lại, hoặc đổi cửa sổ từ 2 năm sang 3 năm để tìm được tổ hợp nâng hiệu suất lên 0,7, thì ngay khoảnh khắc đó out-of-sample đã bị lẫn vào in-sample. Chỉ cần nhìn kết quả một lần rồi điều chỉnh thiết lập, out-of-sample không còn là tương lai chưa được nhìn thấy nữa. Nó đã trở thành dữ liệu được dùng để quyết định tham số.
Sự ô nhiễm dữ liệu này nguy hiểm vì không dễ thấy. Trên mã nguồn, in-sample và out-of-sample vẫn có vẻ được tách riêng, quy trình vẫn trông đúng. Nhưng ngay khi kết quả out-of-sample trong đầu trader ảnh hưởng đến lựa chọn thiết lập kế tiếp, tính độc lập thống kê đã bị phá vỡ. Nếu thay đổi cửa sổ walk-forward theo từng tài sản, từng chiến lược cho đến khi kết quả đẹp, thì hiệu suất thu được chỉ là một dạng quá tối ưu hóa ở tầng cao hơn, giống hệt việc tối ưu toàn bộ giai đoạn cùng lúc.
Cách phòng vệ là chốt quy trình trước. Trước khi chạy dữ liệu, phải xác định toàn bộ: độ dài in-sample, độ dài out-of-sample, bước trượt, phạm vi tìm kiếm của các tham số cần tối ưu và chỉ tiêu đánh giá. Sau đó, dù kết quả out-of-sample xấu cũng không đổi thiết lập. Nếu kết quả xấu, cách trung thực là xem chiến lược đó là sai và loại bỏ nó. Bẻ cong quy trình để hiệu suất đẹp lên sẽ phá hỏng chính việc kiểm chứng. Walk-forward là công cụ kiểm tra xem điểm số do quy trình tạo ra có thể tiếp diễn trong thực chiến hay không.
Hai bộ lọc bổ sung cho kết quả walk-forward
Ngay cả khi hiệu suất walk-forward vượt 0,8, vẫn nên kiểm tra thêm hai điểm trước khi đưa chiến lược vào giao dịch thật.
Thứ nhất là độ nhất quán của hiệu suất theo từng giai đoạn. Nếu hiệu suất trung bình của năm cặp là 0,85 nhưng bên trong có cả 1,4 và 0,3, con số trung bình đó gây ảo giác. Một chiến lược may mắn đạt 1,4 ở một giai đoạn rồi sụp xuống 0,3 ở giai đoạn khác rất rủi ro, vì ta không biết giai đoạn giao dịch thực tế kế tiếp sẽ giống phía nào hơn. Chỉ khi độ lệch chuẩn của hiệu suất nhỏ và tất cả các giai đoạn đều tập trung trên 0,6, mới có thể xem quy trình là ổn định.
Thứ hai là hiệu quả tại các đoạn chuyển chế độ thị trường. Bài kiểm tra thật sự của walk-forward nằm ở những thời điểm thị trường chuyển từ tăng sang giảm, hoặc từ biến động thấp sang biến động cao. Cần kiểm tra riêng hiệu suất ở các cửa sổ mà out-of-sample chứa các điểm chuyển như đỉnh khoảng 69.000 USD tháng 11 năm 2021, trước khi xu hướng đảo chiều và bước sang thị trường giảm năm 2022, hoặc cú biến động bùng nổ do FTX sụp đổ vào tháng 11 năm 2022. Một chiến lược chỉ có hiệu suất cao trong các đoạn xu hướng mượt nhưng sụp đổ ở vùng chuyển pha là một quy trình không hoạt động vào đúng thời điểm quan trọng nhất. Khi hiệu suất vẫn chịu được trên tất cả các cửa sổ, bao gồm cả các giai đoạn chuyển pha, phân tích walk-forward mới cung cấp cơ sở rằng quy trình tối ưu hóa của chiến lược có thể tiếp tục phát huy trong tương lai.