Trả lời ngắn: Monte Carlo Test cho EA là stress-test lặp lại một phép randomization đã định nghĩa trên sample đóng băng. Mỗi seed tạo một đường đi thay thế; hệ thống đo drawdown, chuỗi thua hoặc kết quả cuối rồi áp gate có trước. Nó cho thấy độ nhạy theo giả định, không dự báo chắc tương lai.

Đọc xong, bạn sẽ hiểu: path dependency là gì; permutation khác bootstrap và perturbation ra sao; seed giúp tái lập thế nào; vì sao cùng final vẫn có drawdown khác; và cách ghi ledger W21 mà không bịa probability.

Lưu ý giáo dục: toàn bộ outcomes, seeds và hard gates của W21 là dữ liệu giả. Đây không phải mô hình xác suất live, mức chịu lỗ hay lời khuyên đầu tư.

1. Monte Carlo stress-test đường đi, không tạo lợi thế

a. Một backtest chỉ cho một thứ tự

Một backtest thường trả về một equity curve: trade A xảy ra trước B, B trước C. Nhưng nhiều metric rủi ro phụ thuộc thứ tự ấy. Path dependency là hiện tượng kết quả đo thay đổi khi đường đi thay đổi, dù tập outcomes có thể giữ nguyên.

Hình dung 12 lá bài ghi lãi/lỗ. Bạn xáo đúng 12 lá, không thêm hoặc bỏ lá nào. Tổng điểm cuối vẫn vậy, nhưng bốn lá âm có thể dồn cạnh nhau và tạo đoạn đau hơn. Với fixed sizing, permutation của cùng trade outcomes cũng có thể giữ final sum nhưng đổi maximum drawdown và longest loss streak.

Monte Carlo Test tạo nhiều đường đi theo một randomization method đã khóa, rồi gom metrics thành distribution. Distribution là tập kết quả mô phỏng, không phải lời tiên tri. Nó chỉ nói: dưới sample và assumptions hiện tại, những path nào đã được tạo.

b. Không có edge mới trong máy xáo

Randomization không thêm market information. Nếu sample thiên lệch, quá nhỏ hoặc đến từ một regime duy nhất, hàng nghìn simulations vẫn chỉ tái chế giới hạn ấy. Monte Carlo có thể phơi bày sequence sensitivity; nó không sửa chiến lược kém và không chứng minh live safety.

Hình 1 — Monte Carlo chỉ có nghĩa khi method, seed và assumptions được khóa trước.

2. Ba phương pháp không được trộn

a. Permutation: xáo không hoàn lại

Permutation without replacement sắp lại thứ tự nhưng mỗi outcome xuất hiện đúng một lần. Với fixed-size additive outcomes, final sum là invariant: nó không đổi giữa paths. W21 dùng phương pháp này để cô lập sequence risk.

Nếu outcomes có compounding theo equity, chỉ đổi thứ tự percentage returns cũng có thể làm path metrics khác; contract phải nói rõ unit và sizing rule. Không được lấy kết luận “final luôn giống nhau” của fixed U rồi áp cho mọi EA.

b. Bootstrap: rút rồi bỏ lại

Bootstrap with replacement rút một outcome, ghi lại, bỏ nó vào túi rồi rút tiếp. Một trade có thể lặp nhiều lần, trade khác có thể không xuất hiện. Final outcome distribution vì vậy thay đổi.

Bootstrap giả định observed sample có thể đại diện cho repeated draws theo rule đã chọn. Nếu trades bị regime clustering hoặc serial dependence, việc resample độc lập có thể phá cấu trúc quan trọng.

c. Perturbation: đổi assumption có chủ đích

Perturbation thay một input bằng model rõ, chẳng hạn cộng simulated transaction cost hoặc delay trong bounds đã khai báo. Nó trả lời “nếu assumption này lệch thì sao?”, khác câu hỏi “nếu cùng outcomes đến theo thứ tự khác?”.

Ba phương pháp cần method IDs, seeds, run counts và artifacts riêng. Trộn chúng vào một histogram mà không gắn nhãn làm distribution mất nghĩa.

Hình 2 — Trộn các phương pháp làm distribution mất ý nghĩa vì assumptions đã đổi.

3. Demo W21: tám seed, cùng final, khác path risk

a. Contract và sample

W21 khóa contract W21:PERMUTE:V1. Base sample có 12 fixed-size outcomes, đơn vị U:

+2, -1, +1, -2, +3, -1, +2, -1, +1, -2, +2, -1

Tổng bằng +3 U. Mỗi simulated path phải chứa đúng multiset này: 12 items, không outcome nào thêm/bớt, final luôn +3 U.

W21 có hai hard gates giả:

  • maximum drawdown không vượt 6 U;
  • longest loss streak không vượt 4.

Các ngưỡng chỉ phục vụ worksheet, không phải recommendation.

b. Ledger tái lập

Seed Max DD (U) Longest loss streak Final (U) Gate
2101 4 2 +3 PASS
2102 5 2 +3 PASS
2103 4 3 +3 PASS
2104 4 3 +3 PASS
2105 3 2 +3 PASS
2106 5 2 +3 PASS
2107 7 5 +3 FAIL
2108 6 4 +3 PASS

Seed là starting value của pseudorandom number generator (PRNG). Cùng algorithm, sample và seed phải tạo lại cùng random sequence. MQL5 MathSrand(seed) đặt starting point; tài liệu nêu cùng seed có thể tạo cùng pseudorandom sequence. MQL5 — MathSrand

MathRand() trả pseudorandom integer từ 0 đến 32767 và cần được initialize trước. Pseudorandom không có nghĩa “tùy tiện”; đây là deterministic sequence dùng để tái lập audit. MQL5 — MathRand

Seed 2107 tạo DD 7 U và streak 5, vượt cả hai gates. Aggregate rule yêu cầu mọi hard gate pass, nên W21 kết thúc REJECT/HALT. Bảy PASS không được average để xóa path fail.

Hình 3 — Seed 2107 chạm hard failure dù tổng cuối vẫn giống bảy path còn lại.

Tám runs chỉ đủ làm bài tập. Không được nói “12,5% probability fail” hoặc dựng percentile đáng tin từ bảng này; finite-simulation uncertainty và sample assumptions chưa được đánh giá.

4. Mười lỗi và giới hạn

  1. Xem shuffle như dữ liệu thị trường mới. Nó chỉ sắp lại sample cũ.
  2. Trộn permutation, bootstrap, perturbation. Assumptions khác nhưng output bị nhập chung.
  3. Không lưu seed. Failure không tái lập được.
  4. Ít runs nhưng công bố probability chính xác. Decimal đẹp không làm estimate mạnh hơn.
  5. Chỉ nhìn median. Tail path và hard failure bị giấu.
  6. Xáo percentage compounded như fixed U. Invariant final không còn đúng.
  7. Bỏ dependence/regime. Independent resampling phá clustering.
  8. Sample nhỏ hoặc selection-biased. Simulations khuếch đại cùng bias.
  9. Đổi gate sau khi xem output. Stress test biến thành tuning.
  10. Nói Monte Carlo chứng minh live safety/profit. Execution và future regime vẫn unknown.

MQL5 có testing statistics cho maximum balance drawdown, relative drawdown, consecutive losses, trade counts và nhiều metrics khác. Đọc được metric không tự động làm simulation hợp lệ; unit, formula và evaluation direction vẫn phải nằm trong contract. MQL5 — Testing Statistics

Một practical MQL5 article minh họa bootstrap trade sequences và fan chart, đồng thời nêu limitation về iid trades, fixed lot và regime shift. Đây là ví dụ implementation, không phải universal threshold. MQL5 — Stress Testing Trade Sequences

5. Monte Carlo Contract và runbook

a. Những gì phải khóa

Contract cần ghi:

  • experiment/version, source sample/hash và extraction rule;
  • unit, sizing và compounding rule;
  • method ID, with/without replacement;
  • perturbation distribution/bounds nếu có;
  • PRNG implementation và seed list/policy;
  • run count và convergence/stop rule;
  • path metrics, percentile/tail direction;
  • hard gates, aggregate rule;
  • raw paths, summary và code/version artifacts.

Nếu seed chỉ được tạo ngẫu nhiên rồi không lưu, audit không thể replay. Nếu method đổi, experiment ID cũng phải đổi.

b. Runbook fail-closed

  1. Freeze source sample và hash.
  2. Chọn đúng một method.
  3. Khóa PRNG/seeds và run count.
  4. Generate paths.
  5. Tính metrics cho từng path.
  6. Verify invariants.
  7. Lưu raw paths trước summary.
  8. Tính distribution/percentiles đã khai báo.
  9. Áp hard/aggregate gates.

Với W21, invariant là 12 outcomes/path, multiset unchanged và final +3 U. Chỉ cần một path có final khác là generator/metric pipeline sai, phải RECHECK, không được tiếp tục đọc drawdown.

AlgoBook giải thích same seed tái tạo sequence và PRNG duy trì internal state. Nó cũng phân biệt pseudorandom generation với “randomness” tuyệt đối. MQL5 AlgoBook — Random number generation

TesterStatistics() chỉ được gọi hợp lệ trong OnTester() hoặc OnDeinit() ở tester; context khác cho undefined result. Extraction boundary này cần test riêng nếu implementation dùng nó. MQL5 — TesterStatistics

6. Worksheet W21 trong 15 phút

Dùng giấy hoặc Google Sheets; chưa cần MT5 và không dùng tiền thật. Chép ledger ở mục 3, khoanh seed 2107, rồi trả lời:

  • Vì sao final của cả tám paths đều +3 U?
  • Seed 2107 fail những gate nào?
  • Median PASS có quyền override hard fail không?
  • Tám runs có đủ công bố probability/percentile không?

Mẫu đối chiếu

Check Expected evidence State
Method permutation without replacement PASS
Items/path 12, same multiset PASS
Final invariant every path +3 U PASS
Max observed DD seed 2107 = 7 U FAIL gate
Max observed streak seed 2107 = 5 FAIL gate
Probability claim forbidden from 8 demo runs BLOCK
Aggregate hard failure preserved REJECT/HALT

Nếu bạn đổi seed 2107 hoặc bỏ row đó để study PASS, bạn đã cherry-pick. Nếu muốn đổi gates, hãy tạo V2 và chạy lại toàn protocol.

7. Tổng kết: stress assumptions, giữ nguyên hard failure

a. Năm ý chính

  • Một backtest curve chỉ là một path.
  • Permutation, bootstrap và perturbation trả lời ba câu hỏi khác nhau.
  • Seed, PRNG, sample hash và method tạo khả năng tái lập.
  • Distribution chỉ có nghĩa dưới assumptions đã ghi.
  • Tail/hard failure không được median hoặc average che đi.

Bài trước là Walk-Forward Analysis cho EA. Bài tiếp theo là Parameter Optimization cho EA #22.

b. Câu hỏi tự kiểm tra

  • Vì sao permutation W21 giữ final +3 U nhưng đổi drawdown?
  • Bootstrap khác permutation ở replacement rule nào?
  • Seed có vai trò gì trong audit?
  • Vì sao không được công bố probability từ tám demo runs?

c. Gợi ý đáp án

Xem gợi ý câu 1

Same fixed outcomes xuất hiện đúng một lần, nhưng thứ tự làm peak-to-trough path đổi. → xem mục 1–3.

Xem gợi ý câu 2

Bootstrap bỏ outcome trở lại sample sau mỗi draw; permutation không hoàn lại. → xem mục 2.

Xem gợi ý câu 3

Seed giúp cùng PRNG và input tái tạo cùng pseudorandom sequence. → xem mục 3 và 5.

Xem gợi ý câu 4

Run count quá nhỏ và assumptions/sample uncertainty chưa được định lượng. → xem mục 3–4.

d. Thuật ngữ cần nhớ

Thuật ngữ Giải thích ngắn
Path dependency Metric đổi khi thứ tự outcomes đổi.
Permutation Xáo cùng sample không hoàn lại.
Bootstrap Resample có hoàn lại.
Perturbation Thay assumption theo model rõ.
Seed Giá trị đầu giúp tái lập pseudorandom sequence.
PRNG Bộ sinh số giả ngẫu nhiên deterministic.
Max drawdown Mức giảm lớn nhất từ peak xuống trough.
Loss streak Số outcomes âm liên tiếp.
Invariant Điều phải giữ nguyên giữa paths.
Tail Phần cực trị của distribution.

e. Nguồn tham khảo

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. Monte Carlo Test không loại bỏ sample bias, regime shift, execution risk hoặc nguy cơ mất vốn.