Bạn dựng một Expert Advisor MACD trong MT5 mà không cần lập trình bằng cách đặt một node Start, hai khối MACD — một khối đọc đường main, một khối đọc đường signal — một điều kiện Cross giữa chúng, và một khối lệnh. Máy chủ sinh rồi biên dịch MQL5 và trao cho bạn một file .ex5 thật. Mười lăm phút, không một dòng cú pháp.
Rồi mới tới phần quyết định xem cái file kia có đáng gì hay không. Công thức này có một bản ghi đã đo, và con số hào nhoáng nhất của nó lại chính là con số bạn nên tin ít nhất.
Bạn sẽ dựng ra cái gì
Một EA giữ một vị thế duy nhất trên một cặp, mua khi đường MACD cắt lên trên đường signal của nó và bán khi cắt xuống dưới, với mức cắt lỗ và mục tiêu cố định, được biên dịch thành một file .ex5 thật. Tám khối.
Hai khối trong số đó tồn tại vì đúng một lý do: khối chỉ báo MACD mỗi lần chỉ trả về một đường.
Trước khi bắt đầu: MACD báo cái gì, và bạn đang đọc đường nào
Bạn cần một tài khoản miễn phí có địa chỉ email đã xác minh (thiết kế thì miễn phí và không cần đăng nhập; biên dịch ra .ex5 thì cần), khoảng mười lăm phút, và một terminal MetaTrader 5.
MACD lấy một trung bình động chậm trừ đi một trung bình động nhanh, rồi lại lấy trung bình của chính hiệu số đó. Vậy nên đường main đo xem hai trung bình đã tách xa nhau tới đâu, còn đường signal là chính phép đo ấy sau khi được làm mượt. Mọi điều một quy tắc MACD có thể nói ra đều là một phát biểu về khoảng cách giữa hai trung bình — nghĩa là nó là một công cụ xu hướng khoác áo dao động, và nó thừa hưởng độ trễ của cả hai trung bình đã tạo ra nó.
Khối MACD của Builder mở ra những thiết lập sau:
| Thiết lập của khối | Mặc định | Nó điều khiển gì |
|---|---|---|
fast_ema | 12 | Trung bình nhanh hơn. Dải 1–999 |
slow_ema | 26 | Trung bình chậm hơn. Khoảng cách giữa hai đường chính là toàn bộ tín hiệu |
signal_period | 9 | Hiệu số được làm mượt bao nhiêu trước khi bạn đem đi so sánh |
line | MODE_MAIN | Khối này xuất ra đường nào — MODE_MAIN hay MODE_SIGNAL |
applied_price | PRICE_CLOSE | Giá nào được đưa vào phép tính |
shift | 0 | 0 là cây nến đang hình thành; 1 là nến đã đóng gần nhất |
timeframe | biểu đồ hiện tại | Bất kỳ khung nào từ M1 tới MN1, đọc độc lập với biểu đồ |
line là dòng làm thay đổi hình dáng của cả luồng. Nó là một ô chọn hai giá trị, nên một khối cho bạn một đường. Vì vậy một cú cắt đường signal cần hai khối MACD; một cú cắt đường zero chỉ cần một khối, cộng thêm một phép so sánh với hằng số.
Từng bước: dựng EA MACD trong Builder
- Mở EA Builder rồi nạp mẫu
macd_signaltừ thư viện, hoặc bắt đầu từ một canvas trắng để tự tay đấu nối. - Đặt một node Start lấy từ bảng Utility. Thiếu nó, phần xác thực sẽ chặn bản dựng lại với
EAB-E202. - Thêm một khối MACD và để nguyên
lineởMODE_MAIN. Cứ để yên 12/26/9 ở lần dựng đầu tiên để kết quả của bạn còn so được với tham chiếu bên dưới. - Thêm một khối MACD thứ hai với các chu kỳ giống hệt và đặt
linethànhMODE_SIGNAL. Cùng chỉ báo, cùng thiết lập, khác đầu ra — đây là bước người ta hay bỏ qua, và bỏ qua nó chính là lý do luồng của họ đem một đường đi so với chính nó. - Nối cả hai vào một điều kiện Cross. Cross nhận hai đầu vào và hỏi xem đường này có cắt đường kia trên cây nến này hay không;
cross_typecủa nó làcrossoverhoặccrossunder, nên phía mua và phía bán là hai điều kiện riêng biệt, chứ không phải một điều kiện đảo ngược. - Nối mỗi điều kiện vào khối Open Buy / Open Sell riêng của nó. Nối một chỉ báo thẳng vào khối lệnh sẽ bị bác với
EAB-E205— một giá trị thô không phải là một quyết định. - Đặt phần rủi ro trong tab Settings. Mặc định dùng chung là mức cắt lỗ 50 pip, mục tiêu 100 pip và khối lượng cố định
0.01lot; một luồng không có mức cắt lỗ hợp lệ sẽ dựng lên một chẩn đoán preflightCRITICALtrước khi nó chịu dựng. - Bấm Measure và đọc kết quả đối chiếu với ngưỡng mà chính bảng đó in ra: hệ số lợi nhuận ít nhất 1,2, ít nhất 60 lệnh, sụt giảm không tệ hơn 20%.
- Bấm Compile .ex5, chuyển file vào
MQL5/Expertsqua File > Open Data Folder, làm mới Navigator, rồi kiểm thử nó trong Strategy Tester trước khi nó chạm tới một tài khoản.
- Node Start
- Khối MACD, line = MODE_MAIN
- Khối MACD, line = MODE_SIGNAL
- Cross — crossover cho phía mua, crossunder cho phía bán
- Open Buy và Open Sell
- Cắt lỗ và chốt lời
- Biên dịch ra .ex5
Nếu bạn muốn phiên bản cắt đường zero thay vào đó, hãy xóa khối MACD thứ hai và thay Cross bằng Compare, với các toán tử > < >= <= == != và offset mặc định bằng 0. “MACD main nằm trên mức zero” là một phát biểu rằng trung bình nhanh đang nằm trên trung bình chậm, chấm hết — một sự kiện hiếm hơn và muộn hơn nhiều so với việc hai đường chạm nhau. Bảng khối cũng có sẵn OsMA, thứ xuất thẳng hiệu số main trừ signal ra thành một giá trị duy nhất, nên một quy tắc dựa trên histogram chỉ cần một khối thay vì hai.
Thiết lập vào lệnh, thoát lệnh và tham số của MACD
| Thiết lập | Giá trị của mẫu | Đổi nó thì có gì xảy ra |
|---|---|---|
fast_ema | 12 | Thấp hơn thì phản ứng sớm hơn và cắt nhau nhiều hơn hẳn; số lệnh dịch chuyển trước khi tỷ lệ thắng dịch chuyển |
slow_ema | 26 | Nâng lên thì nới rộng khoảng cách mà đường nhanh phải đi qua, nên tín hiệu tới muộn hơn và hiếm hơn |
signal_period | 9 | Độ làm mượt trên đường đem ra so sánh. Ngắn hơn nghĩa là nhiều lần cắt hơn, phần lớn là nhiễu |
line | MODE_MAIN | Không phải một núm tinh chỉnh — nó quyết định bạn đã dựng ra quy tắc nào |
shift | 0 | Đặt thành 1 để chỉ quyết định trên nến đã đóng |
| Cắt lỗ | 50 pip (mặc định dùng chung) | Dải đã dò là 30–80 |
| Chốt lời | 100 pip (mặc định dùng chung) | Dải đã dò là 60–250 |
Về độ trễ, lời phàn nàn trung thực nhất dành cho chỉ báo này. Mọi giá trị ở đây đều là đầu ra của hai trung bình chồng lên một trung bình thứ ba. Vì vậy một cú cắt nhau là bản báo cáo rằng một nhịp giá đã xảy ra — câu hỏi chỉ còn là muộn tới đâu. Rút ngắn fast_ema mua lấy sự sớm sủa và trả giá bằng những cú cắt giả; kéo dài slow_ema mua lấy độ tin cậy và trả giá bằng những lệnh vào sau khi nhịp giá đã đi. Chính bản ghi của mẫu này gợi ý nó đã đáp xuống chỗ nào: 698 lệnh trong một năm, số lệnh cao thứ nhì trong mười ba mẫu xu hướng và động lượng được đo dưới điều kiện giống hệt nhau. Đó là một thiết kế bắn liên tục, và bắn liên tục chính là cái giá của độ trễ ngắn.
Cuộc dò đã đụng vào gì và không đụng vào gì. Cuộc dò tham số được ghi lại chỉ dịch chuyển mức cắt lỗ và mục tiêu — SL30-80 × TP60-250, 12 tổ hợp qua ba cửa sổ trên khung H1. Nó chưa một lần nào đổi fast_ema, slow_ema hay signal_period. Nên không có gì trên trang này ủng hộ tuyên bố rằng 12/26/9 là đúng, là sai, hay là cải thiện được. Nó chỉ ủng hộ một tuyên bố hẹp hơn nhiều và hữu ích hơn nhiều: không tổ hợp cắt lỗ và mục tiêu nào cứu nổi thiết kế này.
Backtest EA MACD
Đây là chính bản ghi đã đo của Builder, không phải một lần chạy lại, và mọi mẫu trong phần so sánh đều dùng chung đúng một khối điều kiện nằm ở bảng bên dưới. Cách chúng tôi kiểm thử nêu tiêu chuẩn mà các bản ghi đó phải chịu.
Tham chiếu macd_signal | Giá trị |
|---|---|
| Hệ số lợi nhuận | 0,93 |
| Số lệnh | 698 |
| Sụt giảm tối đa | -1,05% |
| Lãi ròng | -93,93 |
| Xếp hạng trong nhóm theo hệ số lợi nhuận | hạng 8/13 |
| Xếp hạng trong nhóm theo số lệnh | hạng 2/13 |
| Vượt ngưỡng đạt của chính bảng Measure | không |
| Điều kiện kiểm thử | |
|---|---|
| ID thí nghiệm | EXP-MACD-RECIPE-BASELINE-001 |
| Thí nghiệm gốc | EXP-BUILDER-TEMPLATE-BASELINE-001 |
| Cặp / khung thời gian | USDJPYm M5 |
| Giai đoạn | 2025-06-01 – 2026-06-09 |
| Mô hình | M1 OHLC (Model=1) |
| Tiền nạp | 10,000 |
| Môi trường | Exness MT5 |
| Tham chiếu đo ngày | 2026-06-18 |
| Kiểm chứng lần cuối | 2026-08-25 |
Kết quả của cuộc dò xứng đáng được hơn một dòng. Tám mẫu trong thư viện mang theo một cuộc dò tham số được ghi lại, và cả tám đều kết thúc ở no_robust_edge. Nhưng chúng thất bại theo hai kiểu khác nhau, và sự khác biệt đó quan trọng hơn cả phán quyết chung. Hai mẫu chưa từng cho ra một thiết lập thắng nào, kể cả trên đúng giai đoạn mà cuộc dò được khớp vào. macd_signal là mẫu duy nhất cho ra một thiết lập vượt được 1,0 ngoài mẫu — 1,14 tới 1,15 ở mục tiêu rộng nhất — rồi sau đó chỉ đạt 0,74 tới 0,77 trên cửa sổ ngay trước nó. Từ mà chính manifest dùng cho chuyện này là regime-dependent (phụ thuộc vào trạng thái thị trường).
Hãy đọc xem điều đó hàm ý gì về việc kiểm thử. Nếu bạn chia dữ liệu đúng một lần, khớp trên nửa đầu rồi kiểm tra trên nửa sau, mẫu này đã trao cho bạn một kết quả đạt. Thứ duy nhất bắt được nó là việc kiểm tra thêm một giai đoạn thứ ba mà cuộc dò chưa từng nhìn thấy. Đó là lập luận cho phân tích walk-forward trong một trường hợp cụ thể, và nó đáng giá hơn mọi lời cảnh báo chung chung về tối ưu hóa quá mức.
MACD đứng ở đâu giữa những hàng xóm của nó, tất cả đều được đo dưới đúng một khối điều kiện ở trên:
| Mẫu | Số khối | Hệ số lợi nhuận | Sụt giảm | Số lệnh |
|---|---|---|---|---|
ma_perfect_order_trend | 10 | 1,07 | -0,36% | 305 |
mtf_osc_filter | 27 | 1,04 | -0,64% | 187 |
consecutive_bars_momentum | 7 | 1,03 | -0,36% | 377 |
ao_ama_trend | 14 | 0,97 | -0,95% | 239 |
adx_trend | 12 | 0,96 | -0,76% | 534 |
multi_tf_trend | 15 | 0,96 | -0,51% | 247 |
ma_crossover | 9 | 0,95 | -0,84% | 420 |
macd_signal | 8 | 0,93 | -1,05% | 698 |
ma_slope_trend | 7 | 0,92 | -1,00% | 478 |
mtf_adx_filter | 14 | 0,92 | -0,84% | 343 |
elder_ray | 9 | 0,90 | -1,34% | 529 |
pitch_trail_trend | 9 | 0,77 | -1,61% | 467 |
dynamic_sl_trend | 9 | 0,68 | -1,62% | 708 |
Chia mười ba mẫu đó tại chính số lệnh trung vị của chúng là 420, và hai nửa tách ra rất rõ. Sáu mẫu giao dịch ít hơn có hệ số lợi nhuận trung bình 1,00 trên 283 lệnh với mức sụt giảm -0,61%. Sáu mẫu giao dịch nhiều hơn trung bình đạt 0,86 trên 569 lệnh với -1,23% — kết quả tệ hơn và độ sâu gấp đôi. Cả ba thiết kế vượt trên 1,0 đều nằm ở nửa trầm lặng hơn. MACD nằm ở nửa bận rộn.
Đó là lời mô tả về mười ba thiết kế dưới một thiết lập duy nhất, không phải một định luật: logic vào lệnh, số node và cách thoát lệnh cũng khác nhau, nên tần suất chưa được xác lập là nguyên nhân. Nhưng đó là khuôn mẫu đang bày ra trước mắt bạn, và mẫu MACD xuất xưởng thì nằm ở phía sai của nó.
Những lỗi thường gặp cần tránh
Tin vào một lần đạt ngoài mẫu. Đây chính là sai lầm mà mẫu này tồn tại để minh họa. Một giai đoạn được giữ lại chỉ là một mẫu duy nhất, và một quy tắc động lượng có thể thắng một mẫu duy nhất chỉ vì thị trường có xu hướng trong lúc đó. Hãy kiểm thử một cửa sổ thứ ba mà cuộc dò chưa từng thấy trước khi bạn tin vào một con số.
Đem một đường đi so với chính nó. Nếu cả hai khối MACD đều bị để nguyên ở MODE_MAIN, điều kiện Cross sẽ so sánh hai giá trị y hệt nhau và không bao giờ bắn — hoặc bắn do làm tròn. Hãy kiểm tra thiết lập line trên cả hai khối trước khi thắc mắc vì sao số lệnh bằng không.
Đọc một cú cắt nhau như một lời tiên đoán. MACD là hai trung bình của một trung bình. Một cú cắt nhau báo rằng một nhịp giá đã diễn ra được vài cây nến rồi. Lựa chọn thiết kế nằm ở chỗ bạn chấp nhận muộn tới mức nào, chứ không phải có chấp nhận muộn hay không.
Tinh chỉnh mức cắt lỗ và mục tiêu cho tới khi đường cong vốn trông đẹp. Cuộc dò được ghi lại đã làm đúng chuyện đó một cách có hệ thống qua 12 tổ hợp và ba cửa sổ, rồi báo về no_robust_edge. Nếu phép tinh chỉnh thủ công của bạn đánh bại một cuộc dò có hệ thống, hãy nghi ngờ phép tinh chỉnh.
Chồng thêm các bộ lọc động lượng. Bản kết hợp ở trên chính là phiên bản đã đo của bản năng đó: sụt giảm gấp 3,76 lần để đổi lấy một hệ số lợi nhuận tệ đi một chút.
Chạy nó cạnh một EA khác mà không tách chúng ra. Mỗi EA trên cùng một tài khoản cần magic number riêng, nếu không logic thoát lệnh của EA này sẽ đóng vị thế của EA kia.
Bước tiếp theo và các biến thể
Khi nào thì đừng dùng MACD. Trong một thị trường đi ngang, hai trung bình cắt nhau liên tục và mọi cú cắt đều là nhiễu — mà một mặc định bắn nhanh chính là thứ mà thị trường đi ngang trừng phạt. Nếu bạn không phát biểu nổi một điều kiện tắt quy tắc đó đi trong những giai đoạn phẳng, thì hoặc là thêm một điều kiện như vậy, hoặc là dùng một ý tưởng không phụ thuộc vào việc hai trung bình tách nhau.
Các biến thể đáng thử, xếp theo mức độ bằng chứng. Hãy thử phiên bản cắt đường zero trước: nó đơn giản hơn một khối và bắn ít hơn hẳn, mà nửa trầm lặng hơn của nhóm hàng xóm mới là nơi đặt mọi kết quả trên 1,0. Rồi hãy thử đúng quy tắc đó trên một timeframe cao hơn ngay bên trong khối MACD, thứ làm chậm tín hiệu lại mà không cần động vào biểu đồ. Chỉ sau đó mới dịch chuyển các chu kỳ — và mỗi lần chỉ đổi một cái.
Rồi kiểm thử nó cho tử tế. Bảng Measure ở mức cây nến và chỉ gần đúng; nó là một bộ lọc, không phải một phán quyết. Cách chạy backtest trong MT5 đi hết một lần chạy thật từ đầu tới cuối, kể cả chuyện trong hai con số sụt giảm của báo cáo thì nên tin con số nào. Cách tạo EA RSI là công thức anh em với kiểu hỏng ngược lại — cuộc dò của nó chưa từng thắng thứ gì, điều đó khiến nó dễ loại bỏ hơn và ít dạy được điều gì hơn mẫu này. Cách tạo EA MT5 không cần lập trình bao quát bộ từ vựng khối rộng hơn, còn các hướng dẫn backtesting đi sâu hơn vào bước walk-forward mà trang này lập luận cho.
Và để hiệu chỉnh xem một bản ghi có tài liệu trông ra sao, mỗi EA đã công bố đều mang theo một danh sách lệnh đã đóng đầy đủ và một manifest chạy. Hãy đối chiếu một trong số đó với bảng ở trên trước khi tin bất kỳ chiến lược nào, kể cả chiến lược do chính bạn dựng ra.