Tôi đã dành vài ngày để kiểm toán một hệ thống giao dịch ngoại hối trực tiếp do chính tôi xây dựng, với dữ liệu lịch sử kéo dài hơn 16 năm. Kết quả thu được là âm theo một cách mà tôi không hề ngờ tới, và phương pháp chẩn đoán phát hiện ra điều này đủ tổng quát để đáng được ghi chép lại — nó có thể áp dụng cho bất kỳ quy trình tìm kiếm tham số nào, chứ không riêng gì trong giao dịch.
Mọi con số dưới đây đều xuất phát từ một lần chạy thực tế đã được đo lường. Không có gì mang tính chất minh họa.
Thiết lập
17 cấu hình, thanh nến nhập lệnh khung 4 giờ, thoát lệnh mô phỏng trên thanh nến khung 1 giờ, từ ngày 28/05/2010 đến 08/07/2026, tổng cộng 7.641 giao dịch. Điểm mấu chốt là tôi đã cung cấp cho các hàm sản xuất chưa được sửa đổi dữ liệu CSV lịch sử thay vì nguồn cấp dữ liệu trực tiếp (live data feed), do đó lộ trình mã nguồn được kiểm tra chính xác là lộ trình mã nguồn sẽ vận hành trong thực tế.
Lỗi 1: Mô phỏng tính phí vào sai vị trí
Các thanh giá OHLC trên nền tảng là giá BID. Backtest đã đặt lệnh vào tại thời điểm đóng cửa của thanh, đặt chốt lời và cắt lỗ ở mức giá đóng cửa ± n·ATR, kiểm tra việc chạm giá dựa trên mức cao và thấp của giá BID, sau đó trừ spread khỏi P&L cuối cùng.
Trong giao dịch thực tế, một lệnh mua (long) được khớp ở giá ASK, khung lệnh bracket được thiết lập tương đối so với giá ASK đó, và lệnh đóng ở giá BID. Do đó, trong thực tế, giá cần di chuyển thêm một khoảng bằng spread để đạt được mục tiêu chốt lời, và sẽ chạm mức cắt lỗ sớm hơn một khoảng spread.
Việc trừ chi phí khỏi kết quả không giống như tính phí vào điểm kích hoạt. Cách thứ nhất làm thay đổi số tiền bạn thắng. Cách thứ hai thay đổi những giao dịch nào thực sự thắng.
Đo lường thực tế cho thấy: tỷ lệ thắng giảm từ 2–5 phần trăm, luôn gây bất lợi cho bạn.
Nguyên tắc này có thể mở rộng ra ngoài phạm vi giao dịch: nếu mô phỏng của bạn áp dụng chi phí như một điều chỉnh hậu kỳ thay vì mô hình hóa cơ chế tạo ra chúng, thì số lượng sự kiện của bạn sẽ bị sai, chứ không chỉ riêng tổng số liệu.
Lỗi 2: Tỷ lệ thắng là một lựa chọn thiết kế, không phải bằng chứng
Mục tiêu lợi nhuận từ 0.5–0.8×ATR, trong khi điểm dừng lỗ (stop loss) ở mức 1.5–2.0×ATR. Điều này tạo ra tỷ lệ thưởng:rủi ro là 0.25–0.4, qua đó cố định tỷ lệ thắng hòa vốn bằng phép tính số học:
tỷ lệ thắng hòa vốn = SL / (TP + SL) = 75–82%
Kiểm tra ngoài mẫu (out-of-sample), chỉ sử dụng các lát cắt kiểm tra walk-forward: 4,947 giao dịch, tỷ lệ thắng 73.5%, lỗ -4,669.9 pip, trung bình lỗ -0.944 pip mỗi giao dịch.
Một tỷ lệ thắng 73.5% mà vẫn thua lỗ không phải là nghịch lý. Các mục tiêu nhỏ thường xuyên bị chạm tới. Đó chính là đặc tính của các mục tiêu nhỏ. Tỷ lệ thắng cao này đã được "mua" bằng cách chấp nhận một khoản lỗ lớn gấp bốn lần mức lợi nhuận — nó chưa bao giờ là bằng chứng cho thấy có lợi thế giao dịch.
Chẩn đoán đáng để học hỏi
Trước khi tái tối ưu hóa bất kỳ thứ gì, tôi đã đặt câu hỏi liệu bề mặt tham số có thể học được hay không.
Đối với mỗi lần gấp walk-forward: đánh giá toàn bộ lưới tham số trên cửa sổ huấn luyện và trên cửa sổ kiểm tra, sau đó lấy hệ số tương quan hạng Spearman giữa hai bên.
if rho > 0 -> hạng huấn luyện dự đoán hạng kiểm tra; việc lựa chọn là có ý nghĩa
if rho ~ 0 -> bề mặt là nhiễu; KHÔNG có quy tắc lựa chọn nào có thể giúp ích
Dòng thứ hai chính là phần giá trị. Nó phân biệt "bộ tối ưu hóa của tôi kém" với "không có gì ở đây cả" — hai tình huống trông giống hệt nhau từ bên ngoài nhưng đòi hỏi các phản ứng trái ngược nhau.
Kết quả trên 119 lần gấp:
- median rho: -0.024
- mean rho: -0.030, 95% CI [-0.090, +0.030] — bao gồm cả số 0
- các lần gấp có rho > 0: 47.9% — tương đương tung đồng xu
Không có thông tin nào. Phù hợp với điều đó, việc tối ưu hóa walk-forward với làm mượt vùng bình nguyên đã tạo ra kết quả ngoài mẫu tệ hơn so với các tham số mà tôi chưa từng động đến, và đã chọn ranh giới lưới trong 11 trên 17 cấu hình — dấu hiệu đặc trưng của một bộ tối ưu hóa không có gì để bám víu.
Sau đó, tôi kiểm tra xem liệu hiệu ứng này có tồn tại ở bất kỳ đâu không
38 công cụ, các kỳ nắm giữ không chồng lấn, được điều chỉnh theo biến động và gộp theo nhóm tài sản, do đó 1.140 kiểm định được thu gọn còn 6, chia tách giữa nửa đầu và nửa sau:
| Nhóm tài sản | Sharpe @0bp | Chi phí hòa vốn | Nửa đầu | Nửa sau | Ổn định |
|---|---|---|---|---|---|
| FX major | +0.08 | 3bp | +0.06 | -0.09 | no |
| FX cross | +0.02 | 1bp | -0.05 | -0.06 | no |
| Index | +0.07 | 5bp | +0.04 | +0.02 | yes |
| Metal | +0.12 | 12bp | +0.13 | +0.03 | yes |
| Energy | +0.13 | 23bp | +0.15 | -0.02 | no |
| Crypto | +0.42 | 100bp | +0.54 | +0.15 | yes |
Hai điều mà tôi đã không đoán trước được:
Chi phí giao dịch hòa vốn mang tính quyết định nhiều hơn là chỉ số Sharpe. Các cặp FX major hòa vốn ở mức khoảng 3bp và các cặp chéo (crosses) ở mức khoảng 1bp — cả hai đều thấp hơn mức spread thực tế. Câu hỏi "liệu có lợi thế nào ở đây không" đã được giải quyết trước khi bạn viết bất kỳ dòng mã chiến lược nào.
Kết quả có ý nghĩa thống kê lại là kết quả giả tạo. Năng lượng (Energy) cho thấy t = 3.73 trên toàn bộ mẫu dữ liệu. Tuy nhiên, nó đi ngang hoặc giảm trong nửa sau. Nếu không có sự phân tách này, nó sẽ trông giống như phát hiện mạnh mẽ nhất trong bảng.
Crypto là nhóm duy nhất còn sót lại, nhưng nó suy giảm mạnh (từ 0.54 xuống 0.15). Ở mức spread CFD thực tế, nửa sau chuyển sang âm. Đây là một hiệu ứng lịch sử, không phải là hiệu ứng hiện tại.
Bài học thực tế
Hãy xây dựng bộ phận bác bỏ trước khi xây dựng chiến lược.
Lý do khiến một chuỗi dài các cấu hình trông có vẻ "đã được xác thực" là vì không có thành phần nào trong quy trình làm nhiệm vụ nói rằng không có gì ở đây cả. Mọi bộ phận đều được thiết kế để tìm ra điều gì đó, nên chúng luôn tìm thấy something, mỗi lần như vậy.
Phép kiểm tra tương quan thứ hạng nêu trên chỉ mất một buổi chiều nhưng đã bác bỏ hàng tháng trời làm việc với các tham số — bao gồm cả tín hiệu dẫn dắt mà tôi tự tin nhất. Đó chính là lúc phép kiểm tra hoàn thành nhiệm vụ của nó, và đây là khoản bảo hiểm rẻ nhất mà tôi đã bổ sung vào quy trình nghiên cứu trong một thời gian dài.
Đây là tài liệu nghiên cứu, không phải lời khuyên đầu tư. Kết quả trong quá khứ không báo trước kết quả trong tương lai. Giao dịch CFD tiềm ẩn rủi ro thua lỗ cao.
Ảnh bởi Tyler Prahm trên Unsplash
Photo by Tyler Prahm on Unsplash
Bài viết liên quan
Đánh giá Inzweb – dịch vụ so sánh bảo hiểm ô tô: lợi ích thực tế và điều cần lưu ý
Dành cho người Việt đang phân vân chọn bảo hiểm ô tô tại Nhật. Bài viết phân tích ưu nhược điểm của Inzweb, ai nên dùng, ai không, và cách tránh phiền phức khi đăng ký.
SafetyWing Nomad Insurance: Đánh giá trung lập cho người Việt sống và làm việc ở nước ngoài
Tìm hiểu SafetyWing Nomad Insurance dành cho dân du mục số và người Việt định cư ở nước ngoài: chi phí, đối tượng phù hợp, điểm mạnh, hạn chế và cách đăng ký, dựa trên thông tin cập nhật 2026.
Đánh giá dịch vụ tư vấn bảo hiểm nhân thọ "Minna no Seimei Hoken Advisor"
Dịch vụ tư vấn bảo hiểm miễn phí, kết nối bạn với các chuyên gia tài chính (FP) để so sánh sản phẩm từ hơn 30 công ty bảo hiểm. Phù hợp với người muốn tìm hiểu và lựa chọn bảo hiểm một cách khách quan.