KenKem Journal

Nên Hỏi Gì Trước Khi Tin Một Kết Quả Backtest?

· #backtesting #overfitting #walk-forward #research-method #systematic-trading

Trước khi tin một kết quả backtest, hãy hỏi sáu điều: hệ thống chưa từng nhìn thấy bao nhiêu phần dữ liệu, đã thử bao nhiêu ý tưởng trước ý tưởng này, kết quả gồm bao nhiêu lệnh, drawdown tệ nhất là bao nhiêu và kéo dài bao lâu, biểu đồ bắt đầu và kết thúc ở đâu, và những chi phí nào đã được tính. Một kết quả không trả lời được cả sáu câu chỉ là mô tả lại một khoảng thời gian, không phải bằng chứng.

Hình vẽ trừu tượng bằng code trên nền lưới
Vẽ bằng code, không phải ảnh chụp. Hình minh hoạ của KenKem.

MasterVP · Hành trình giao dịch hệ thống

Bài viết bởi người sáng lập KenKem, một kỹ sư phần mềm hai mươi năm kinh nghiệm, từng giao dịch vàng bằng tay trước khi xây dựng bộ công cụ nghiên cứu đứng sau MasterVP. Là một quant trader tự học, mình dùng bộ câu hỏi này lên chính công việc của mình trước tiên, vì nó bắt lỗi mình chắc chắn y như bắt lỗi bất kỳ ai khác. Đây là chia sẻ kiến thức, không phải khuyến nghị giao dịch bất cứ thứ gì. Mọi con số bên dưới đều là kết quả backtest trên dữ liệu tick thật, có ghi ngày và ghi rõ loại, và không con số nào là kết quả giao dịch thật.

Sáu câu hỏi đó là gì?

Dữ liệu dài bao nhiêu, và hệ thống đã từng nhìn thấy nó chưa? Một kết quả trên chính khoảng thời gian bộ tham số được xây dựng chỉ mô tả lại khoảng thời gian đó. Phần có giá trị là những gì được chạy sau đó, trên dữ liệu mà bộ tham số chưa từng gặp.

Đã thử bao nhiêu phương án trước đó? Một ý tưởng chạy được thì có ý nghĩa. Cái tốt nhất trong hàng nghìn phương án thì có một phần là may mắn, và chính số lần thử cho biết phần may mắn lớn tới đâu.

Bao nhiêu lệnh? Một đường vốn đẹp tạo từ bốn mươi lệnh chỉ là một đồng xu rơi thuận chiều. Không có ngưỡng tuyệt đối, nhưng con số này nên được hỏi trước mọi thứ khác.

Lúc tệ nhất nó tệ tới đâu? Không phải mức trung bình. Mà là mức sụt giảm sâu nhất từ đỉnh xuống đáy và nó nằm dưới đó bao lâu, vì chính điều đó quyết định một người thật có trụ lại nổi hay không.

Biểu đồ bắt đầu và kết thúc ở đâu? Cả hai đầu đều là lựa chọn.

Đã tính những chi phí gì? Spread, trượt giá, hoa hồng, phí qua đêm và độ trễ giữa lúc quyết định và lúc khớp lệnh. Một bài kiểm tra không có những thứ đó là kiểm tra phép tính, không phải kiểm tra giao dịch.

Mình đã cố làm cho hệ thống vàng của mình trả lời được cả sáu câu. Kết quả trung thực là nó trượt một câu, theo cách mà mình đã công bố, và phần lớn bài viết này nói về lần trượt đó.

Vì sao số lần thử làm thay đổi ý nghĩa của một kết quả?

Vì cứ nhìn đủ nhiều lần thì kiểu gì cũng có một cái nổi lên trên.

Trong quy trình phát triển quant của mình, mình đếm cả số lần tìm kiếm. Theo bản tổng hợp tháng 8/2026, Dquants engine mình tự phát triển đã mô phỏng 7.718 cấu hình khác nhau trên dữ liệu tick thật để đưa ra ba hệ thống, tức khoảng hai nghìn rưỡi cấu hình được xem xét cho mỗi hệ thống sống sót. Trong 137 thí nghiệm được đăng ký trước tại thời điểm đó, 122 thí nghiệm không bao giờ trở thành sản phẩm. Mình đã viết về cách sổ đăng ký này vận hành trong bài khi hệ thống giao dịch ngừng hiệu quả thì làm gì.

Con số đó bất lợi cho mình trong ngắn hạn, và nó là thứ giúp người đọc chiết khấu kết quả của mình cho đúng. Một kết quả nên bị trừ điểm theo mức độ tác giả đã lùng sục. Nếu tác giả không chịu nói, phép tính đó không thể thực hiện được.

Bài kiểm tra mạnh nhất cho thấy hệ thống không bị tối ưu quá đà là gì?

Cho bộ tham số xuất xưởng thi đấu với một bộ tối ưu hoá có mọi lợi thế, trừ khả năng nhìn trước.

Đóng băng bộ tham số xuất xưởng và chấm điểm nó lần lượt trên từng khối sáu tháng của lịch sử. Rồi chạy một phiên bản thứ hai được phép chọn lại tham số trước mỗi khối, từ một danh sách ứng viên đã công bố, chỉ dùng dữ liệu có trước khối đó. Cả hai phiên bản đều không được nhìn về tương lai. Nếu phiên bản tự tinh chỉnh thắng, bộ tham số xuất xưởng chẳng có gì đặc biệt. Nếu bộ tham số đóng băng thắng, nó đang đánh bại một quá trình tìm kiếm có khả năng thích nghi.

Tính đến tháng 8/2026, mình đã chạy bài kiểm tra này cho hệ thống vàng khung mười phút của mình trên mười một khối nửa năm liên tiếp từ 2021 tới 2026, với 72 cấu hình ứng viên. Tám trên mười một khối có kết quả dương và ba khối lỗ, đó là những giai đoạn đi ngang của năm 2021 và đầu 2023. Trên chín khối mà cả hai phiên bản cùng tồn tại, bộ tham số đóng băng về đích trước. Việc tinh chỉnh lại sau mỗi sáu tháng lẽ ra đã làm mình mất tiền.

Bài kiểm tra này có một cái bẫy đáng nói rõ. Walk-forward phải dành năm đầu tiên để dựng tập huấn luyện, nên các khối được quyền chọn chỉ bắt đầu từ 2022, trong khi 2021 là năm tệ nhất trong dữ liệu. Bỏ năm đó đi thì kết quả tự khắc đẹp lên, nên mình vẫn chấm điểm 2021 bằng bộ tham số đóng băng và giữ nguyên nó trên biểu đồ.

Vì sao ngày bắt đầu và trục biểu đồ lại quan trọng đến vậy?

Vì cả hai đều có thể gây hiểu sai bằng một kết quả thật, không hề bịa.

Dời ngày bắt đầu muộn đi một quý là nguyên một năm tồi tệ có thể biến mất. Các lệnh vẫn thật, nhưng bức tranh thì sai. Trục dọc tinh vi hơn: nếu thang đo bắt đầu phía trên mức số dư thấp nhất mà tài khoản từng chạm tới, khoảnh khắc tệ nhất của cả quá trình đơn giản là không có trên hình, và một sự vắng mặt thì chẳng để lại gì cho bạn nhận ra.

Trục logarit trông giống mánh khoé nhưng không phải. Khi một đường lớn gấp nhiều lần đường kia, thang logarit làm cho chiều cao bằng nhau nghĩa là mức thay đổi phần trăm bằng nhau. Đó là lựa chọn đúng khi so sánh những thứ có quy mô khác nhau, miễn là nó được ghi chú rõ.

Khi mình vẽ mọi cấu hình mình cân nhắc phát hành lên cùng một biểu đồ, đáy trục nằm ở mức số dư thấp nhất mà bất kỳ đường nào từng chạm tới. Một trong những thiết lập mạnh tay hơn đã nằm dưới số dư khởi điểm suốt cả năm 2024, và điều đó hiện rõ trên hình.

Chuyện gì xảy ra khi mình kiểm tra hệ thống trên những năm nó chưa từng thấy?

Nó lỗ, và mình muốn nói điều đó trước tiên.

Tháng 8/2026 mình mua thêm ba năm dữ liệu tick vàng thật, từ 2021 tới 2023, là dữ liệu chưa hề có trong bộ nghiên cứu khi hệ thống được xây dựng. Mình chạy hệ thống khung mười phút với đúng cấu hình đang giao dịch, không chỉnh một tham số nào. Nó lỗ khoảng 13 phần trăm, với mức sụt giảm từ đỉnh xuống đáy gần 25 phần trăm. Dữ liệu kiểm chứng là năm năm rưỡi, và ba năm đầu tiên là âm.

Mua dữ liệu lịch sử sau khi chiến lược đã tồn tại là cách gần nhất để một người phát triển cá nhân có được bài kiểm tra ngoài mẫu thực sự, vì dữ liệu đó không thể rò rỉ vào bất kỳ quyết định nào. Nguyên nhân đo được cũng không có gì bí ẩn. Lợi thế của hệ thống là phá vỡ đi theo xu hướng, được xây dựng trong một trong những đợt tăng giá mạnh nhất của vàng trong nhiều thập kỷ, và trong thị trường đi ngang, cùng logic ấy liên tục vào những cú phá vỡ không đi tiếp. Một hệ thống mà bạn không gọi tên được lợi thế của nó là hệ thống bạn không thể suy luận được khi nó bắt đầu thua.

Một bản sửa đáng tin trông như thế nào?

Nó mang lại lợi ích trong giai đoạn xấu và gần như không tốn gì trong giai đoạn tốt.

Thay đổi mình đã phát hành là một ngưỡng sàn biến động: khi biên độ dao động thông thường của vàng chiếm tỷ lệ quá nhỏ so với giá, hệ thống đứng ngoài. Mức kích hoạt cụ thể mình giữ riêng. Trên ba năm thua lỗ, nó biến khoản lỗ khoảng 13 phần trăm thành khoảng một phần trăm, và kéo drawdown từ gần 25 phần trăm xuống khoảng 14. Trên giai đoạn 2024 tới 2026, kết quả ròng không thay đổi.

Một bản sửa rút ra từ chính những năm thất bại thì luôn trông tốt trên những năm đó, nên đó không phải bằng chứng sạch. Cách kiểm tra sạch hơn là để bộ tối ưu hoá walk-forward mù chọn từ một danh sách có cả phương án không dùng ngưỡng sàn. Trong cả chín khối được quyền chọn, nó đều chọn có ngưỡng sàn. Bản sửa vẫn không làm cho 2021 tới 2023 có lãi. Nó làm cho giai đoạn đó sống sót được, một tuyên bố nhỏ hơn, và là tuyên bố mình đang đưa ra.

Một chỉ số kiểm chứng có thể hỏng theo hướng có lợi cho bạn không?

Có, và nó sẽ không bao giờ báo cho bạn biết, vì nó cứ liên tục đồng ý với bạn.

Tháng 8/2026 mình xây lại các cổng kiểm duyệt trước khi phát hành. Mình từng trích dẫn một chỉ số được thiết kế để trừ điểm kết quả theo độ rộng của quá trình tìm kiếm, rồi phát hiện nó cho giá trị gần như hoàn hảo với hầu hết mọi ứng viên khi cỡ mẫu đủ lớn. Một bộ lọc nói đồng ý với mọi thứ chỉ là đồ trang trí. Giờ nó không còn quyền quyết định, và không hệ thống nào của mình được coi là hoàn tất chỉ dựa trên bằng chứng backtest. Theo quy tắc đó, hệ thống chủ lực của chính mình được xếp ở giai đoạn kiểm chứng tiến chứ chưa phải đã chốt.

Cũng trong tháng đó mình phát hiện một lỗi hạch toán. Một sàn mình dùng để kiểm thử tính toàn bộ hoa hồng khứ hồi ngay trên lệnh vào, và bản xuất dữ liệu theo từng lệnh của mình không lường trước điều đó, nên các dòng của sàn này lạc quan hơn thực tế khoảng 11,5 phần trăm. Mình sửa phần xuất dữ liệu, lấy các con số chính của sàn đó từ báo cáo của chính MetaTrader, và giữ nguyên các dòng cũ kèm ghi chú nói rõ dòng nào sai và sai bao nhiêu.

Một lỗi làm kết quả xấu đi sẽ được phát hiện ngay trong ngày. Một lỗi làm kết quả đẹp lên có thể nằm im hàng tháng. Cách phòng vệ duy nhất mình biết là đi kiểm tra chính những thứ đang diễn ra tốt đẹp.

Câu hỏi thường gặp

Làm sao biết một backtest bị tối ưu quá đà? Hỏi xem đã thử bao nhiêu cấu hình, và bộ tham số đóng băng có thắng được một walk-forward được phép tinh chỉnh lại mà không nhìn trước hay không. Trong bài kiểm tra tháng 8/2026 của mình, bộ tham số đóng băng về đích trước phiên bản tự tinh chỉnh trên chín khối nửa năm.

Một backtest cần bao nhiêu lệnh? Không có con số chung cho mọi trường hợp, và nó còn phụ thuộc vào số ý tưởng đã thử để tìm ra kết quả. Bốn mươi lệnh chỉ là một đồng xu rơi thuận chiều. Hãy hỏi số lệnh trước khi nhìn đường vốn.

Bài kiểm tra ngoài mẫu thực sự với trader cá nhân là gì? Là dữ liệu chưa hề có trong bộ nghiên cứu khi hệ thống được xây dựng. Mình mua ba năm dữ liệu tick vàng sau khi xây xong hệ thống, và cấu hình giữ nguyên đã lỗ khoảng 13 phần trăm trên dữ liệu đó.

Vì sao ngày bắt đầu của đường vốn lại quan trọng? Dời nó đi một quý có thể xoá nguyên một năm thua lỗ khỏi một kết quả thật. Hãy kiểm tra cả hai mốc ngày trước khi nhìn hình dáng.

Biểu đồ logarit có phải cách che giấu khoản lỗ không? Không, nếu nó được ghi chú rõ. Nó làm cho chiều cao bằng nhau nghĩa là mức thay đổi phần trăm bằng nhau, đúng khi so sánh các đường có quy mô rất khác nhau. Trục dọc bị cắt mới là rủi ro thật.

Một bản sửa có thể bị tối ưu quá đà như thế nào? Bản sửa nào rút ra từ những năm thua lỗ cũng sẽ cải thiện chính những năm đó. Hãy kiểm tra xem nó có gần như không tốn gì trong những năm tốt không, và một bộ tối ưu hoá mù có chọn nó hay không.

Có nên tin một chỉ số kiểm chứng lúc nào cũng cho kết quả đạt không? Không. Một chỉ số chưa từng phản đối bạn thì không lọc được gì. Mình đã bỏ quyền quyết định của một chỉ số như vậy vào tháng 8/2026 vì lý do đó.

Vì sao lại công bố một lỗi đã làm đẹp kết quả của chính mình? Vì xoá đi những dòng số bất tiện là giấu luôn việc chúng từng tồn tại, còn một con số được gắn cờ vẫn dạy được điều gì đó. Lỗi của mình khiến các dòng dẫn xuất của một sàn lạc quan hơn thực tế khoảng 11,5 phần trăm.

Nếu bạn muốn xem quy trình này dẫn tới đâu, MasterVP là phương pháp giao dịch trong ngày của riêng mình, xây trên lý thuyết volume profile công khai. Nó có dạng Master Volume Profiler indicator trên TradingView và MetaTrader 5, cho bạn thấy cách đọc thị trường và để việc đặt lệnh lại cho bạn, và dạng Master Volume Sniper trên MQL5 market, một Expert Advisor thực thi các quy tắc và thiết lập rủi ro do bạn cấu hình.


Bài viết được tổng hợp từ loạt bài về cách đánh giá backtest trong chuỗi nhật ký xây dựng MasterVP. Chỉ nhằm mục đích giáo dục. Không phải lời khuyên tài chính. Các con số được trích dẫn là kết quả backtest trên dữ liệu tick thật, và hiệu suất trong quá khứ không đảm bảo kết quả tương lai. Mỗi trader tự chịu trách nhiệm về thiết lập rủi ro và quyết định của chính mình.

← All journal articles

Chat