KenKem Journal

Làm Sao Mình Phân Biệt Một Edge Bền Vững Với Một Kết Quả May Mắn

· #robustness #backtesting #research-method #trading-psychology #systematic-trading

Có một khoảnh khắc trong nghiên cứu mà mình đã học cách không tin. Một backtest chạy xong, đường equity dốc lên đúng hướng, và trong khoảng ba mươi giây mình có cảm giác công việc đã hoàn tất.

Gần như chưa bao giờ đúng như vậy. Phần lớn những gì mình xây trong một năm qua không phải là một chiến lược, mà là một chuỗi chướng ngại được thiết kế để lấy đi cảm giác đó trước khi mình kịp hành động theo nó. Đây là ghi chép trung thực về những chướng ngại ấy, vì sao mình cần chúng, và chúng đang nói với mình điều gì.

Vì sao một backtest đẹp lại có sức thuyết phục đến vậy?

Bởi vì wishful thinking mang cảm giác của sự làm việc. Đó chính là cái bẫy.

Khi một kết quả trông đẹp, phản xạ tự nhiên của mình là đi giải thích vì sao nó hợp lý. Mình có thể dành trọn một buổi tối để dựng câu chuyện quanh một setup yếu, và suốt buổi tối đó mình vẫn thấy như đang nghiên cứu. Nó có hình dạng của công việc. Nhưng nó không tạo ra thêm một chút thông tin nào.

Mình từng bắt gặp chính mình làm điều đó, và cái giá không nằm ở buổi tối bị lãng phí. Cái giá là câu chuyện đó trì hoãn việc sửa đúng vấn đề. Mỗi giờ mình dùng để bảo vệ một con số là một giờ mình không dùng để kiểm tra xem con số đó có thật hay không. Vì vậy mình cố đặt niềm tin đúng chỗ, tức là sau bằng chứng chứ không phải trước bằng chứng. Đo trước, tin sau.

Viết ra thì nghe hiển nhiên. Nhưng khi con số đó là con số mình mong đợi, việc này khó hơn nhiều.

Robustness thật sự nghĩa là gì?

Một kết quả chỉ sống được trong một góc rất hẹp thì không phải edge, nó là một sự trùng hợp đúng thời điểm.

Vì vậy Dquants engine mình tự phát triển đẩy một ý tưởng qua bốn trục trước khi mình xem nó là nghiêm túc.

Thời gian. Hành vi đó có giữ được qua nhiều cửa sổ dữ liệu khác nhau không, hay nó chỉ được gánh bởi một đoạn lịch sử tử tế bất thường?

Regime. Thị trường xu hướng và thị trường cân bằng là hai bài toán khác nhau. Một rule chỉ sống sót ở một bên có phạm vi hẹp hơn nhiều so với những gì con số tiêu đề gợi ý.

Parameter. Mình muốn một vùng cao nguyên, không phải một đỉnh nhọn. Nếu một tham số phải đúng chính xác thì rule mới chạy, thứ mình tìm được là hình dạng của quá trình tìm kiếm, không phải hình dạng của thị trường.

Chi phí. Spread và commission là ranh giới giữa một kết quả mong manh và một kết quả thua lỗ. Mình đẩy chi phí lên cao hơn rồi xem còn lại gì.

Một equity curve kém rực rỡ nhưng sống sót qua cả bốn trục đáng giá với mình hơn một curve chỉ đẹp đúng một lần. Robustness không phải phần thưởng thêm sau nghiên cứu. Nó chính là phần lớn của nghiên cứu.

Vì sao chất lượng mẫu quan trọng hơn con số tiêu đề?

Một mẫu nhỏ có thể đánh lừa rất mạnh trong khi vẫn trông hấp dẫn, và chỉ số tiêu đề sẽ không cảnh báo mình điều đó.

Vì vậy song song với các con số quen thuộc, mình theo dõi kết quả đó đến từ bao nhiêu lệnh và phủ được bao nhiêu phần của bản đồ. Nếu một quý hoặc một regime đang gánh phần lớn kết quả, mình xem đó là một phát hiện hẹp chứ không phải một phát hiện rộng, bất kể phần tóm tắt đọc lên nghe thế nào.

Đây cũng là chỗ thống kê thật sự có ích. Một chỉ số Sharpe thô không nói gì về việc mình đã thử bao nhiêu biến thể trước khi tìm ra nó, và nếu mình thử đủ nhiều ý tưởng thì kiểu gì cũng có một cái trông đẹp một cách tình cờ. Deflated Sharpe điều chỉnh đúng vấn đề đó. Minimum track record length hỏi cùng một câu từ hướng ngược lại: với mức biến động này, mình cần bao nhiêu lệnh thì kết quả mới thôi còn có thể giải thích bằng may mắn? Nếu mẫu nhỏ hơn con số đó, câu trả lời trung thực là mình chưa biết.

Hai bài kiểm tra này đã giết những ý tưởng mà mình rất thích. Đó chính là lý do chúng tồn tại.

Những thất bại thật sự trông ra sao?

Phía sau công việc này là một nghĩa trang, và nó khá lớn. Khoảng ba mươi lăm lần sweep tham số đã được kiểm định đến cùng và bị loại. Trong một giai đoạn gần đây, mình xây và kiểm định năm ý tưởng liên tiếp, và mình đã loại cả năm.

Chúng thường thất bại theo ba kiểu có thể nhận diện.

Curve-fit. Ý tưởng có thể được tinh chỉnh cho đẹp trên cửa sổ train rồi vỡ vụn khi ra ngoài. Một biến thể mình từng rất thích khớp rất gọn với dữ liệu train, sau đó tạo ra mức sụt giảm ngoài mẫu vượt trên tám mươi phần trăm. Đó không phải một chiến lược đang gặp giai đoạn xấu. Đó là một chiến lược chưa từng tồn tại.

Phụ thuộc regime. Hành vi là thật nhưng chưa có điều kiện đi kèm. Nó chạy tốt khi một kiểu thị trường còn kéo dài và bào mòn dần khi thị trường đổi. Kiểu này thật sự khó, vì kết quả không giả, nó chỉ chưa đầy đủ. Nó cần một điều kiện chứ không cần một lần chỉnh tham số.

Hư cấu theo feed. Edge tồn tại trong dữ liệu của mình mà không tồn tại ngoài đời. Đây là nhóm khiêm tốn nhất, vì nó có nghĩa là chính công cụ đã nói dối mình.

Việc đặt tên cho ba kiểu thất bại này thay đổi cách mình làm việc nhiều hơn bất kỳ bài test đơn lẻ nào. Bây giờ khi một thứ hỏng, câu hỏi đầu tiên của mình là nó thuộc kiểu nào trong ba kiểu đó, và câu trả lời thường chỉ thẳng vào chỗ cần sửa.

Những con số của chính mình còn đang tâng bốc mình ở đâu?

Ở phần chi phí, và mình muốn nói thẳng thay vì để người khác phát hiện sau.

Một tick engine có mô hình spread và commission nhưng để slippage, latency và swap bằng không thì không mô phỏng giao dịch, nó mô phỏng một phiên bản giao dịch không có ma sát. Mình biết spread trong một feed lịch sử của mình hẹp hơn khoảng mười lần so với mức mình thật sự trả khi vào lệnh thật. Một kết quả mỏng trong điều kiện đó hoàn toàn có thể là kết quả thua lỗ ngoài đời.

Phía thoát lệnh còn một khoản nợ riêng. Ba lần khác nhau, một thay đổi trông đi ngang hoặc tích cực trong engine của mình đã cho kết quả rõ ràng tệ hơn trên MetaTrader. Engine không thể biết giá đã đi đường nào bên trong một tick, nên nó cộng điểm quá tay cho những lệnh được thả chạy. Số liệu phía vào lệnh mình tin. Số liệu phía thoát lệnh mình giữ ở mức dè dặt.

Xây một lớp ma sát thực tế rồi xếp hạng lại toàn bộ mọi thứ bên dưới nó là hạng mục lớn nhất còn mở trong danh sách của mình. Cho tới khi việc đó xong, mọi con số mình có đều mang tính tạm thời, và Master Volume Profile cũng chưa có lịch sử giao dịch thật nào để viện dẫn theo hướng nào cả.

Khi một kết quả thật sự sống sót thì sao?

Mình vui thật, và mình cố giữ niềm vui đó đúng tỷ lệ.

Khi một thứ vượt qua bài test khó hơn mình dự đoán, thứ mình vừa giành được không phải bằng chứng cuối cùng. Nó là lý do để chạy một bài test khó hơn nữa. Một validation gate là điểm kiểm tra, không phải vạch đích, và xem một lần vượt qua là kết thúc câu chuyện chính là cách một quy trình chắc chắn lặng lẽ quay về thành một quy trình đầy hy vọng.

Những kết quả mình muốn là sạch, lặp lại được và giải thích được. Nếu mình không thể tái tạo một kết quả bất cứ lúc nào, có lẽ mình chưa hiểu nó đủ để dựa vào nó.

Vì sao "chưa đủ" là câu trả lời hữu ích nhất mà mình có?

Bởi vì phần lớn thời gian, đó là câu trả lời đúng.

Chưa được kiểm định. Chưa bền qua các regime. Chưa được thử dưới chi phí thực tế. Chưa sẵn sàng. Không điều nào trong số đó là thất bại, và cũng không điều nào là một lời từ chối nhẹ nhàng. Đó là báo cáo tiến độ chính xác, và mình đã học cách tôn trọng nó hơn nhiều so với sự chắc chắn chưa được kiếm về bằng công sức.

Sự bực bội là có thật. Nhiều đoạn dài của công việc này là ngõ cụt, lỗi build và những lần sửa sai, và tiến bộ thường vô hình cho tới một ngày quy trình bỗng ổn định hơn hẳn. Nhưng đó cũng chính là nơi các giả định yếu bị phơi ra, và mình thà tìm thấy chúng trong nghiên cứu còn hơn tìm thấy chúng trên tài khoản thật.

Điều rút ra trung thực là gì?

Một chiến lược mạnh không phải vì nó từng kiếm được tiền một lần. Nó mạnh vì nó giữ được hình dạng dưới áp lực.

Nếu bạn đến với thị trường từ nền kỹ thuật, kỳ vọng trung thực của mình là phần lớn ý tưởng của bạn sẽ không sống sót qua dữ liệu sạch và chi phí thật, và những ý tưởng sống sót sẽ nhỏ hơn bạn mong đợi. Đó không phải là quy trình đang phụ bạn. Đó là phiên bản duy nhất của quy trình đáng để có.

Chờ thêm bằng chứng gần như luôn rẻ hơn nhiều so với triển khai quá sớm.


Bài viết này được tổng hợp từ chuỗi build-log của KenKem. Chỉ nhằm mục đích giáo dục. Không phải lời khuyên đầu tư. Hiệu suất trong quá khứ không đảm bảo kết quả trong tương lai.

← All journal articles

Chat