Tối ưu hóa tham số trong MetaTrader 5 là một cuộc dò: bạn khai báo một dải cho từng input, Strategy Tester chạy hết mọi tổ hợp, và nó đưa cho bạn một cái bảng đã sắp xếp theo chỉ số bạn chọn. Phần khó không phải là chạy nó. Phần khó là ở chỗ cái bảng đó luôn có một dòng đầu, và dòng đầu gần như luôn sai.
Thứ bạn nhận được từ bài viết này là một quy trình cho ra một quyết định thay vì một con số: một cuộc dò bạn bảo vệ được, một cách đọc lưới kết quả còn sống sót khi chạm vào giai đoạn thứ hai, và một quy tắc dừng.
| Điều kiện kiểm thử | |
|---|---|
| ID thí nghiệm | EXP-PARAM-SEARCH-OUTCOMES-001 |
| Thí nghiệm gốc | EXP-BUILDER-TEMPLATE-BASELINE-001 |
| Nguồn | ea-templates-manifest.js → bt.explored |
| Tổng thể | 8 recorded searches of the 53 measured templates |
| Symbol / khung thời gian | USDJPYm, M5 and H1 |
| Mô hình | M1 OHLC (Model=1), Exness MT5, measured 2026-06-18 |
| Tham số được thay đổi | stop loss and take profit only |
| Kiểm chứng lần cuối | 2026-08-25 |
Thiết lập: lưới, phần chia và dữ liệu
Ba thiết lập quyết định cuộc dò có đáng chạy hay không. Đặt sai chúng thì lưới kết quả chỉ là một bộ sinh số ngẫu nhiên rất đắt tiền.
| Trường | Ở đâu | Đặt gì | Vì sao |
|---|---|---|---|
| Optimisation | Tab Settings | Slow complete algorithm cho một lưới nhỏ | Chế độ genetic chỉ lấy mẫu không gian; với 12–32 tổ hợp thì bạn thừa sức xem hết |
| Start / Step / Stop | Tab Inputs, theo từng input | Hai tham số, bước thô | Mỗi input bạn tick vào đều nhân lưới lên. Của chúng tôi đổi hai |
| Forward | Tab Settings | 1/2, 1/3 hoặc 1/4 | Chia khoảng thời gian để trình kiểm thử chấm riêng nửa sau — đây chính là phép kiểm tra mà bạn chạy cuộc dò vì nó |
| Optimisation criterion | Tab Settings | Quyết định nó trước khi bạn nhìn vào lưới | Đây là chỉ số mà trình kiểm thử dùng để xếp hạng các lượt chạy, nên nó quyết định dòng nào là dòng đầu |
| Modelling | Tab Settings | Một chế độ thô để quét, rồi chạy lại ứng viên sống sót trên tick thật | Các chế độ quét dùng để xếp hạng ứng viên, tuyệt đối không dùng cho một con số đem đi công bố |
| Period | Tab Settings | Đủ dài để chứa nhiều hơn một chế độ thị trường | Một cuộc dò nằm gọn trong một xu hướng sẽ tìm ra thiết lập đã cưỡi trên xu hướng đó |
Tiêu chí xếp hạng xứng đáng được quyết định thay vì để mặc định. Xếp theo lãi ròng là thưởng cho lượt chạy nào đã chịu rủi ro nhiều nhất, còn xếp theo một thước đo dựa trên sụt giảm là thưởng cho lượt nào giao dịch ít nhất — hệ số phục hồi tồn tại chính vì hai câu trả lời đó bất đồng với nhau. Các cuộc dò của chúng tôi hoàn toàn không được phán xử bằng thứ hạng của trình kiểm thử: mỗi ứng viên sống sót được chấm bằng hệ số lợi nhuận trên ba cửa sổ riêng biệt, và thứ hạng bên trong bất kỳ cửa sổ nào cũng chưa từng quyết định điều gì.
Chất lượng dữ liệu đến trước tiên: một cuộc dò trên tick tồi sẽ đi tối ưu hóa chính các lỗ hổng. Nói ngắn gọn thì chất lượng mô phỏng dưới 90% khiến lưới kết quả trong ngày trở nên không dùng được, và một lượt chạy dựng từ dữ liệu tick nội suy thì không phân giải nổi một mức cắt lỗ nằm bên trong một cây nến.
- Hãy chạy một backtest đơn lẻ trước, ở các giá trị mặc định, và giữ lại báo cáo. Không có mốc nền thì lưới kết quả chẳng có gì để vượt qua — cách chạy backtest đi hết lượt chạy đó từ đầu tới cuối.
- Ở tab Settings, đặt Optimisation thành một lượt quét đầy đủ cho lưới nhỏ, và đặt Forward thành
1/3để trình kiểm thử giữ lại một phần ba cuối của khoảng thời gian. - Ở tab Inputs, chỉ tick những tham số bạn thật sự đang kiểm thử, và cho mỗi cái một giá trị Start, Step và Stop. Hai input với bước thô thắng bốn input với bước mịn.
- Bấm Start và để nó chạy xong. Hãy đọc tab Optimisation Results như một cái bảng, và đọc Optimisation Graph như một hình dạng — một đỉnh nhọn đơn độc là lời cảnh báo, còn một vùng bằng phẳng mới là một phát hiện.
- Lấy các ứng viên sống sót — chứ không phải cái thắng cuộc — và chạy lại từng cái như một backtest đơn lẻ trên một giai đoạn trước cửa sổ tối ưu hóa. Đây là bước đã tạo ra mọi kết luận tiêu cực trong tập của chúng tôi, và cũng là bước người ta hay bỏ qua.
Đọc kết quả: ba giai đoạn, không phải một
Đây là toàn bộ tập ghi nhận của chúng tôi, sắp theo mức hệ số lợi nhuận trong mẫu tốt nhất mà mỗi cuộc dò đạt tới. IS là giai đoạn thiết lập được khớp vào, OOS là phần hold-out, còn prior là một cửa sổ sớm hơn mà cuộc dò chưa từng nhìn thấy.
| Template | Lưới đã dò | IS tốt nhất | OOS | Prior | Kết luận |
|---|---|---|---|---|---|
ichimoku | 12 tổ hợp × 3 cửa sổ | 1,37 | 0,89 | 0,80 | no_robust_edge |
ma_crossover | 20 + 12 tổ hợp, hai khung thời gian | 1,23 | 0,89–0,94 | 0,78 | no_robust_edge |
cci_level | 12 tổ hợp × 3 cửa sổ | 1,07 | 1,05 | 0,92 | no_robust_edge |
adx_trend | 12 tổ hợp × 3 cửa sổ | 1,04 | 0,91 | 0,80 | no_robust_edge |
breakout | 12 tổ hợp × 3 cửa sổ | 1,04 | 0,79–0,89 | 0,64–0,84 | no_robust_edge |
macd_signal | 12 tổ hợp × 3 cửa sổ | — | 1,14–1,15 | 0,74–0,77 | no_robust_edge |
rsi_reversal | 12 tổ hợp × 3 cửa sổ | 0,91 | — | — | no_robust_edge |
bb_bounce | 12 tổ hợp × 3 cửa sổ | 0,91 | — | — | no_robust_edge |
Hãy đọc dọc cột số đầu tiên, rồi đọc ngang. Kết quả trong mẫu lớn nhất trong tập lại tạo ra cú sụp lớn nhất: con số 1,37 của ichimoku rơi xuống 0,89 rồi 0,80. Thứ tự đó không phải là trùng hợp — thiết lập khớp một cửa sổ khít nhất, theo đúng cách nó được dựng ra, chính là thiết lập đã hấp thụ nhiều nhiễu của cửa sổ đó nhất.
Giờ hãy đọc thiết lập thật sự đã tiến gần nhất. Nó không có trong bảng phía trên, bởi nó chưa từng là dòng đầu của bất cứ thứ gì: trên cùng cái lưới ichimoku đó, SL50/TP150 chấm 1,18 trong mẫu, 0,99 ngoài mẫu và 1,00 trên cửa sổ trước đó. Ba giai đoạn, đều gần như đi ngang. Nó được ghi nhận là ứng viên gần nhất và vẫn không được nhận, bởi hòa vốn qua ba cửa sổ không phải là một lợi thế — đó là sự vắng mặt của lợi thế, được đo cẩn thận.
So với đó, các mốc nền mà những cuộc dò này cố vượt qua nằm giữa 0,92 và 1,03. Không một cuộc dò nào làm xê dịch được một giá trị mặc định đã phát hành.
Những cái bẫy cần tránh
Kiểu hỏng nằm dưới cả năm cái trên đều là một kiểu. Tối ưu hóa quá mức không phải là một sai lầm bạn phạm vào lúc cuối một cuộc dò — nó là kết cục mặc định của việc chạy một cuộc dò, và kỷ luật ba giai đoạn tồn tại để làm nó hiện ra trước khi bạn hành động theo nó.
Cải thiện và lặp lại: đổi gì, và khi nào thì dừng
Đổi một thứ, chạy lại, so với mốc nền bạn đã giữ. Thứ tự tốn ít thời gian nhất:
- Hãy mở rộng giai đoạn trước khi mở rộng lưới. Nhiều chế độ thị trường hơn thắng nhiều tổ hợp hơn. Một cuộc dò chỉ phủ đúng một xu hướng sẽ tìm ra thiết lập đã cưỡi trên xu hướng đó, ở bất kỳ độ phân giải nào.
- Rồi làm bước thô ra, chứ đừng tinh chỉnh chúng. Nếu một kết quả chỉ tồn tại ở
SL47, thì nó không tồn tại. - Rồi, và chỉ khi đó, mới thêm một tham số. Của chúng tôi chưa từng đi xa tới đây, bởi hai tham số đã trượt ngưỡng ba giai đoạn rồi.
Hãy dừng khi một trong những điều này đúng, và viết ra là điều nào:
- Một ứng viên sống sót vượt được cả ba giai đoạn. Hãy phát hành nó, và ghi lại toàn bộ cái lưới bạn đã dò — không chỉ lượt chạy bạn giữ.
- Kết quả trong mẫu tốt nhất nằm dưới 1,0. Bạn có một câu trả lời thật: hai trong tám cuộc dò của chúng tôi kết thúc ở đây, và kết thúc ở đây sau 36 lượt đánh giá là rẻ.
- Các ứng viên sống sót cứ vượt cửa sổ này rồi lại trượt cửa sổ kia. Bộ quy tắc phụ thuộc vào chế độ thị trường. Dò thêm chỉ cho ra thêm những thiết lập phụ thuộc chế độ thị trường.
- Bạn đã bắt đầu giải thích vì sao cửa sổ trước đó “không tính”. Đó là khoảnh khắc cuộc dò thôi không còn là một phép kiểm thử.
Bản ghi trung thực của một cuộc dò là dải bạn đã phủ và kết luận, đi cùng nhau. Cả tám cái của chúng tôi đều được lưu theo cách đó, và đó là lý do bài viết này viết ra được từ chúng — chỉ lưu mỗi lượt thắng thì đã chẳng chứng minh được gì.
Bước tiếp theo: chạy forward test, rồi quyết định
Tối ưu hóa là bước thứ hai trong bốn bước. Trình tự là backtest → tối ưu hóa → walk-forward → demo, và mỗi bước loại bỏ một kiểu sai khác nhau.
- Hãy tập vòng lặp này trên thứ do chính bạn kiểm soát: dựng một chiến lược trong Builder rồi tự dò mức cắt lỗ và mục tiêu của nó, bởi một cái lưới do bạn khai báo dễ đọc trung thực hơn hẳn một cái lưới bạn thừa hưởng.
- Phiên bản chính thức của phép kiểm tra ba giai đoạn là phân tích walk-forward, thứ đẩy phần chia lăn về phía trước thay vì cố định nó ở một chỗ.
- Dù cuộc dò trả về thứ gì, thì bản báo cáo mà nó trả về vẫn phải được đọc: cách đọc báo cáo backtest MT5 nói về việc mỗi con số đầu báo cáo thật ra là tuyên bố về tổng thể nào.
- Để xem một bản ghi hoàn chỉnh trông thế nào khi các con số thật sự sống sót, mỗi mục trong danh mục EA đã công bố đều mang theo danh sách lệnh đã đóng đầy đủ và manifest chạy của nó.
- Cách chúng tôi kiểm thử, chấm điểm và ghi lại tất cả những điều này được nêu trong phương pháp kiểm thử của chúng tôi.