Mục lục
Trả lời ngắn: Backtest xem rule tái hiện thế nào trên dữ liệu lịch sử với giả định đã ghi; walk-forward giữ thứ tự chọn trước rồi kiểm sau; Monte Carlo lặp thay đổi có kiểm soát để xem kết luận nhạy tới đâu. Cả ba không dự báo thị trường, hứa lợi nhuận hoặc tự cho phép chạy strategy.
Đọc xong, bạn sẽ hiểu:
- Vì sao một report lịch sử đẹp vẫn cần ghi phạm vi và giới hạn.
- Backtest, walk-forward và Monte Carlo khác nhau ở câu hỏi chúng trả lời.
- Cách lập Evidence Card bằng dữ liệu giả, không mở terminal hay dùng tiền thật.
Lưu ý giáo dục: Đây là bài về cách đọc bằng chứng của hệ thống, không phải tín hiệu giao dịch hay lời khuyên đầu tư. Dữ liệu thiếu phạm vi, rule bị đổi sau khi xem kết quả, hoặc giả định không được ghi đều là lý do để dừng và kiểm tra. Không dùng bài tập dưới đây để giao dịch thật.
1. Ba nhãn, ba câu hỏi bằng chứng
Một bảng “đã test” vẫn cần ba câu hỏi: data nào, rule có bị sửa sau khi xem kết quả không, và conclusion có nhạy với thay đổi nhỏ không. Backtest, walk-forward và Monte Carlo đặt chúng riêng ra.
a. Backtest: điều gì xảy ra trong phạm vi lịch sử đã ghi?
Backtest là việc tái hiện, hay replay, một rule trên historical data — dữ liệu thuộc một khoảng thời gian đã qua — cùng các assumption (giả định) đã ghi. Assumption là điều kiện để hiểu report đang mô phỏng gì, chẳng hạn phạm vi thời gian, nguồn dữ liệu đầu vào hoặc mode tạo input. Backtest không nói “tương lai sẽ lặp lại”; nó chỉ tạo một bản ghi để người khác xem rule và điều kiện đã dùng.
Nó giống nấu lại công thức từ sổ cũ: bạn tái hiện lần đã ghi, chưa biết tuần sau nguyên liệu có giống vậy hay món sẽ luôn ngon.
b. Walk-forward: đoạn nào được chọn, đoạn nào được kiểm sau?
Walk-forward chia thời gian theo thứ tự. In-sample là đoạn dùng để chọn hoặc chỉnh rule; out-of-sample là đoạn chưa dùng để chọn, chỉ dành cho kiểm sau. Cách tách này buộc người làm phải nói rõ: “Tôi đã freeze rule ở đây; từ mốc này trở đi tôi chỉ quan sát.”
Ví dụ giả định: bạn đọc January-June rồi chốt Rule A v1 trước khi mở July-August. Đoạn sau không dự báo xa, nhưng không được dùng để sửa Rule A ở bước chọn. Đó là walk-forward, không phải con dấu “an toàn”.
c. Monte Carlo: kết luận nhạy tới thay đổi đã mô tả nào?
Monte Carlo trong bài này là lặp lại một perturbation, tức thay đổi có kiểm soát đã ghi trước, để xem kết luận nhạy ra sao. Chẳng hạn bạn xáo thứ tự ba record dữ liệu giả, hoặc đánh dấu một record là thiếu rồi so sánh lý do đã ghi log. Monte Carlo không tạo ra dữ liệu thị trường thật và không biết giá sẽ đi đâu.
Hãy hình dung một hộp ba thẻ công việc. Xáo theo quy tắc rõ có thể đổi thứ tự hoàn tất, nhưng không dự báo tuần thật. Điều cần lưu là quy tắc xáo và điều đã đổi.
Hình 1 — Ba phép hỏi bổ sung cho nhau: replay lịch sử, giữ thứ tự chọn/kiểm và kiểm tra độ nhạy; chúng cùng dẫn tới một report có giới hạn.
2. Backtest trả lời gì và bỏ sót gì
Backtest đọc được phải giữ input, time boundary, rule và assumption. Frozen rule là rule/version không sửa sau đoạn kiểm. Chỉ giữ kết quả cuối thì người review không biết điều kiện nào tạo ra nó.
MetaTrader 5 Strategy Tester cho thấy mô phỏng có cách tạo input riêng. MQL5 mô tả nhiều mode tick, nên simulation mode (cách tạo input cho mô phỏng) phải được ghi cùng report. MQL5 Testing Trading Strategies
Evidence Card có thể ghi: “Rule A v1, data giả January-June, nguồn/mốc thời gian và mode đã nêu.” Nó cho đồng đội phạm vi replay, không cần lời/lỗ. Bỏ trống data source hoặc mode thì Dừng.
Backtest không tự phát hiện input sai, không đại diện mọi bối cảnh hay ngăn việc chỉ giữ rule đẹp nhất.
Hình 2 — Backtest chỉ có thể đọc lại khi data boundary, frozen rule và simulation mode được lưu cùng report; thiếu assumption thì dừng.
3. Walk-forward và Monte Carlo thêm hai phép hỏi khác
Walk-forward thêm kỷ luật thời gian: in-sample dùng để chọn; sau freeze, out-of-sample được quan sát theo thứ tự trước-sau. Nếu July đã sửa Rule A ở June, boundary “chưa thấy” không còn thật.
Data leakage là thông tin đoạn sau lọt vào chọn lựa đoạn trước, ví dụ nhìn hết bảng rồi đổi mô tả rule. Chỉ một mốc thời gian không rõ cũng làm người đọc không tách được chọn với kiểm.
MQL5 dùng khoảng forward để quan sát stability và nhắc parameter (tham số) lịch sử không được bảo đảm vẫn phù hợp. Bài chỉ mượn ranh giới chọn/kiểm, không dạy optimization. MQL5 Forward Testing
Monte Carlo hỏi: “Áp perturbation đã ghi thì conclusion có đổi không?” Path dependence là kết luận đổi khi thứ tự record đổi. Ba mock record không có tiền hay giá: record thiếu source lên đầu có thể làm Card dừng sớm, nhưng lý do vẫn phải được log. Đây là kiểm tính rõ ràng, không đo hiệu suất.
Bailey và các đồng tác giả cảnh báo nhiều configuration, tức cấu hình rule được thử, có thể tạo kết quả mô phỏng cao và tăng rủi ro backtest overfitting. Overfitting là rule quá khớp dữ liệu/cấu hình đã xem nên yếu với evidence khác; nghiên cứu không cấp xác suất hay chứng nhận cho Evidence Card. Bailey et al., 2014
Hình 3 — Walk-forward giữ chronology giữa đoạn chọn và đoạn kiểm; Monte Carlo ghi perturbation rồi so sánh/log, không dự báo.
4. Bốn bẫy khiến report trông chắc hơn nó là
Sai lầm đầu tiên là đổi rule sau khi xem toàn bộ lịch sử rồi gọi nó frozen. Bảng cuối có thể gọn hơn, nhưng không còn nói rule ban đầu đã làm gì.
Sai lầm thứ hai là data leakage: nhìn mốc sau để đổi filter hoặc bỏ record rồi vẫn gọi nó out-of-sample. Hãy ghi time boundary, version và lúc freeze; không ghi được thì Cần review hoặc Dừng.
Sai lầm thứ ba là coi một split đại diện mọi regime, tức mọi bối cảnh dữ liệu. Walk-forward làm chronology rõ hơn, không xóa input xấu hay selection bias.
Sai lầm thứ tư là gọi mọi phép lặp là Monte Carlo mà không ghi randomization: record nào xáo, assumption nào nhiễu. Monte Carlo mơ hồ không tăng độ tin cậy.
Backtest phụ thuộc data/assumption/rule; walk-forward phụ thuộc split/freeze; Monte Carlo phụ thuộc perturbation đã chọn. Không công cụ nào thay owner, log hay risk gate. Điều kiện quan trọng chưa rõ thì dừng.
5. Checklist và Practice Bridge 15 phút: Evidence Card
Dùng spreadsheet miễn phí, LibreOffice Calc hoặc giấy. Không mở Strategy Tester, login broker hay dùng tiền thật. Mục tiêu là cho người khác thấy câu hỏi và phần thiếu.
- Gọi tên câu hỏi: replay, chronology hay sensitivity?
- Freeze rule: ghi version, không sửa sau time split.
- Ghi data/time boundary: in-sample, out-of-sample và nguồn nào?
- Ghi assumption/mode: không biết thì để thiếu, không đoán.
- Ghi perturbation: Monte Carlo xáo/nhiễu điều gì theo quy tắc nào?
- Ghi owner và lý do quyết định (decision reason): ai review; Giữ giả thuyết, Cần review hay Dừng?
a. Mẫu đối chiếu đã điền
| Question | Frozen rule | Data/time split | Backtest evidence | Walk-forward evidence | Monte Carlo perturbation/decision | | --- | --- | --- | --- | --- | | Rule có được ghi rõ không? | Rule v1, không sửa sau split | Jan-Jun / Jul-Aug held-out | Mode và assumption đã ghi | Jul-Aug chưa dùng để chọn | Xáo thứ tự 3 mock record; Cần review | | Có thể diễn giải report không? | Version không rõ | Future boundary không rõ | Không đủ evidence | Không chạy | Không xác định perturbation; Dừng |
Sau 15 phút, hãy chỉ được cột replay, chronology và perturbation. Decision reason là lý do đọc lại được; “chưa đủ evidence” tốt hơn tự điền khoảng trống.
Hình 4 — Evidence Card giữ ba phép hỏi cạnh nhau bằng mock data; card không đưa ra lệnh hay khẳng định performance.
6. Tổng kết: ba phép hỏi không tạo lời hứa
a. Năm ý chính
- Backtest tái hiện rule trên historical data cùng assumption ghi rõ; nó không hứa tương lai.
- Walk-forward tách đoạn chọn và đoạn kiểm theo thứ tự thời gian; out-of-sample không phải future proof.
- Monte Carlo phải nói rõ perturbation/xáo trộn nào được lặp; nó không dự báo thị trường.
- Frozen rule, data boundary, mode và owner/log giúp report có thể đọc lại.
- Thiếu source, version, chronology hoặc decision reason là lý do đúng để Cần review hoặc Dừng.
b. Câu hỏi tự kiểm tra
- Backtest khác một lời hứa về tương lai ở đâu?
- In-sample và out-of-sample khác nhau như thế nào?
- Monte Carlo trong Evidence Card thay đổi điều gì?
- Vì sao một split không đại diện mọi regime?
c. Gợi ý đáp án
Xem gợi ý câu 1
Backtest chỉ replay rule trên historical data với assumption đã ghi; nó không khẳng định điều kiện sau này giống hệt. Xem mục 1 và 2.
Xem gợi ý câu 2
In-sample dùng để chọn/chỉnh; out-of-sample chưa dùng để chọn và chỉ được quan sát sau khi freeze rule. Xem mục 1 và 3.
Xem gợi ý câu 3
Nó thay đổi có kiểm soát như thứ tự mock record hoặc một assumption đã nêu, rồi log conclusion nhạy ra sao. Xem mục 3.
Xem gợi ý câu 4
Một đoạn chỉ là một bối cảnh dữ liệu; nó không thay cho mọi regime, input hay lựa chọn rule khác. Xem mục 4.
d. Thuật ngữ cần nhớ
| Thuật ngữ | Giải thích ngắn |
|---|---|
| Backtest | Replay rule trên dữ liệu lịch sử với assumption đã ghi. |
| Historical data | Dữ liệu của khoảng thời gian đã qua. |
| Assumption | Điều kiện giúp hiểu report đang mô phỏng gì. |
| Walk-forward | Chọn/freeze trước, quan sát đoạn sau theo chronology. |
| In-sample | Đoạn dùng để chọn hoặc chỉnh rule. |
| Out-of-sample | Đoạn chưa dùng để chọn, dành cho kiểm sau. |
| Frozen rule | Rule/version không sửa sau khi xem đoạn kiểm. |
| Data leakage | Thông tin đoạn sau lọt vào chọn lựa đoạn trước. |
| Perturbation | Thay đổi có kiểm soát được ghi trước. |
| Overfitting | Rule quá khớp dữ liệu/cấu hình đã xem. |
e. Nguồn tham khảo
- MQL5 Testing Trading Strategies
- MQL5 Forward Testing
- Bailey et al. — Pseudo-Mathematics and Financial Charlatanism
- Bailey et al. — Probability of Backtest Overfitting
Bài trước là Signal, Filter và Risk Engine Review #3, nơi candidate đi qua bối cảnh, limit và quyền dừng. Bài tiếp theo là AI Model, Data và Drift Review #5, để xem model phụ thuộc input/data như thế nào và khi nào cần review drift.
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. Khi rule, data boundary, assumption hoặc decision reason chưa rõ, không dùng tiền thật và hãy dừng để kiểm tra nguồn chính thức.
Bài tiếp theo