Backtest & kiểm chứng intermediate 12 phút đọc

Tối ưu hóa tham số MT5: 116 tổ hợp, 252 lượt chạy, 0 thiết lập được phát hành

Tối ưu hóa tham số MT5 trên tám template chiến lược của chính chúng tôi, và không nhận cái nào. Phần hữu ích là cách từng cái hỏng: quán quân trong mẫu lớn nhất rơi sâu nhất, một thiết kế vượt được một lần kiểm tra ngoài mẫu rồi vẫn sụp, và hai cái chưa từng vượt 1,0 ngay trên chính giai đoạn đã khớp vào. Đây là quy trình, và cách đọc giúp bạn không phát hành dòng đầu bảng.

Đã xuất bản · Đã đánh giá

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ệmEXP-PARAM-SEARCH-OUTCOMES-001
Thí nghiệm gốcEXP-BUILDER-TEMPLATE-BASELINE-001
Nguồnea-templates-manifest.jsbt.explored
Tổng thể8 recorded searches of the 53 measured templates
Symbol / khung thời gianUSDJPYm, M5 and H1
Mô hìnhM1 OHLC (Model=1), Exness MT5, measured 2026-06-18
Tham số được thay đổistop loss and take profit only
Kiểm chứng lần cuối2026-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
OptimisationTab SettingsSlow 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 / StopTab Inputs, theo từng inputHai 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
ForwardTab Settings1/2, 1/3 hoặc 1/4Chia 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ò
Optimisation criterionTab SettingsQuyế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 dòng đầu
ModellingTab SettingsMột chế độ thô để quét, rồi chạy lại ứng viên sống sót trên tick thậtCá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ố
PeriodTab SettingsĐủ dài để chứa nhiều hơn một chế độ thị trườngMộ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.

  1. 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.
  2. Ở 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.
  3. Ở 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, StepStop. Hai input với bước thô thắng bốn input với bước mịn.
  4. 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.
  5. 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.

TemplateLưới đã dòIS tốt nhấtOOSPriorKết luận
ichimoku12 tổ hợp × 3 cửa sổ1,370,890,80no_robust_edge
ma_crossover20 + 12 tổ hợp, hai khung thời gian1,230,89–0,940,78no_robust_edge
cci_level12 tổ hợp × 3 cửa sổ1,071,050,92no_robust_edge
adx_trend12 tổ hợp × 3 cửa sổ1,040,910,80no_robust_edge
breakout12 tổ hợp × 3 cửa sổ1,040,79–0,890,64–0,84no_robust_edge
macd_signal12 tổ hợp × 3 cửa sổ1,14–1,150,74–0,77no_robust_edge
rsi_reversal12 tổ hợp × 3 cửa sổ0,91no_robust_edge
bb_bounce12 tổ hợp × 3 cửa sổ0,91no_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:

  1. 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.
  2. 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.
  3. 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ủ 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.

Câu hỏi thường gặp

Nên tối ưu hóa bao nhiêu tham số cùng một lúc?
Ít hơn số mà trình kiểm thử cho phép bạn chọn. Mọi cuộc dò trong tập ghi nhận của chính chúng tôi đều chỉ đổi đúng hai tham số — mức cắt lỗ và mức chốt lời — trên 12 tới 32 tổ hợp, và không một cái nào trong tám cái cho ra một thiết lập mà chúng tôi sẵn sàng phát hành. Thêm tham số thứ ba rồi thứ tư không sửa được chuyện đó; nó nhân lưới lên và khiến việc tìm ra một tổ hợp khớp vào nhiễu trong cửa sổ kiểm thử của bạn dễ hơn hẳn. Nếu hai tham số không tạo nổi một kết quả sống sót qua ba giai đoạn, thì vấn đề nằm ở bộ quy tắc, chứ không nằm ở độ phân giải của cuộc dò.
Nên tìm mức hệ số lợi nhuận bao nhiêu trong một lượt tối ưu hóa?
Hãy nhìn ba con số, không phải một. Trong tập của chúng tôi, hệ số lợi nhuận trong mẫu tốt nhất đạt 1,37 trên template ichimoku — và cũng chính thiết lập đó chấm 0,89 ngoài mẫu và 0,80 trên cửa sổ sớm hơn. Thiết lập tiến gần mức dùng được nhất lại kém ấn tượng hơn nhiều khi ở trong mẫu: 1,18, giữ được 0,99 và 1,00 trên hai giai đoạn còn lại. Nó vẫn không được nhận, bởi hòa vốn ở hai trong ba cửa sổ thì không phải là lợi thế. Một con số trong mẫu cao là con số ít mang thông tin nhất trên màn hình.
Một lần kiểm tra ngoài mẫu đã đủ để xác nhận một thiết lập đã tối ưu hóa chưa?
Chưa, và chúng tôi có một trường hợp cho thấy vì sao. Template macd_signal cho ra một thiết lập đạt 1,14 tới 1,15 ngoài mẫu — một lần vượt sạch sẽ trên một tập hold-out duy nhất — rồi chấm 0,74 tới 0,77 trên cửa sổ nằm ngay trước giai đoạn kiểm thử. Một thiết kế thứ hai, cci_level, còn đi xa hơn: 1,07 trong mẫu, 1,05 ngoài mẫu, và 0,92 trên cửa sổ trước đó. Hai giai đoạn cũng không đủ. Cả hai đều sẽ được phát hành nếu theo quy tắc một-lần-hold-out thông thường.
Nếu tối ưu hóa hoàn toàn không tìm được một thiết lập có lãi thì nghĩa là gì?
Nghĩa là bạn có câu trả lời sớm và rẻ, và đó là kết cục tốt. Hai trong tám cuộc dò của chúng tôi — rsi_reversal và bb_bounce — chưa từng cho ra hệ số lợi nhuận trên 1,0 ngay cả trên giai đoạn mà chúng đã được khớp vào; kết quả trong mẫu tốt nhất của chúng là 0,91. Một bộ quy tắc không thể làm cho chạy được trên chính dữ liệu đã dùng để chỉnh nó thì sẽ không được cứu bằng một lưới rộng hơn hay một lượt chạy dài hơn. Hãy ghi lại dải bạn đã dò cùng với kết luận, rồi chuyển sang ý tưởng kế tiếp.

Thuật ngữ liên quan

Tham chiếu thuật ngữ