Phát triển EA & Builder beginner 12 phút đọc

Cách tạo EA MACD trong MT5 không cần lập trình (và vì sao kết quả đẹp nhất của nó lại là kết quả nguy hiểm nhất)

Cách tạo EA MACD trong MT5 không cần lập trình: nối một chiến lược cắt đường MACD từ các khối ngay trên trình duyệt, biên dịch ra một file .ex5 thật, rồi đọc các con số của nó một cách trung thực. Kèm theo kết quả đáng lo nhất: chính cuộc dò tham số của Builder đã tìm ra một thiết lập MACD đạt 1,14 ngoài mẫu, rồi sụp xuống 0,74 trên cửa sổ ngay trước đó.

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

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ốiMặc địnhNó điều khiển gì
fast_ema12Trung bình nhanh hơn. Dải 1–999
slow_ema26Trung 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_period9Hiệu số được làm mượt bao nhiêu trước khi bạn đem đi so sánh
lineMODE_MAINKhối này xuất ra đường nàoMODE_MAIN hay MODE_SIGNAL
applied_pricePRICE_CLOSEGiá nào được đưa vào phép tính
shift00 là cây nến đang hình thành; 1 là nến đã đóng gần nhất
timeframebiểu đồ hiện tạiBấ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

  1. Mở EA Builder rồi nạp mẫu macd_signal từ thư viện, hoặc bắt đầu từ một canvas trắng để tự tay đấu nối.
  2. Đặ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.
  3. Thêm một khối MACD và để nguyên lineMODE_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.
  4. Thêm một khối MACD thứ hai với các chu kỳ giống hệt và đặt line thành MODE_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ó.
  5. 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_type của nó là crossover hoặc crossunder, 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.
  6. 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.
  7. Đặ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.01 lot; 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 preflight CRITICAL trước khi nó chịu dựng.
  8. 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%.
  9. Bấm Compile .ex5, chuyển file vào MQL5/Experts qua 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
Vì sao công thức cắt đường signal cần hai khối MACD còn công thức cắt đường zero thì không

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ử > < >= <= == !=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ậpGiá trị của mẫuĐổi nó thì có gì xảy ra
fast_ema12Thấ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_ema26Nâ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_period9Độ 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
lineMODE_MAINKhông phải một núm tinh chỉnh — nó quyết định bạn đã dựng ra quy tắc nào
shift0Đặ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ời100 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_signalGiá trị
Hệ số lợi nhuận0,93
Số lệnh698
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ậnhạng 8/13
Xếp hạng trong nhóm theo số lệnhhạng 2/13
Vượt ngưỡng đạt của chính bảng Measurekhông
Điều kiện kiểm thử
ID thí nghiệmEXP-MACD-RECIPE-BASELINE-001
Thí nghiệm gốcEXP-BUILDER-TEMPLATE-BASELINE-001
Cặp / khung thời gianUSDJPYm M5
Giai đoạn2025-06-01 – 2026-06-09
Mô hìnhM1 OHLC (Model=1)
Tiền nạp10,000
Môi trườngExness MT5
Tham chiếu đo ngày2026-06-18
Kiểm chứng lần cuối2026-08-25
1,14Hệ số lợi nhuận ngoài mẫu tốt nhất mà cuộc dò được ghi lại tìm ra
0,74Điểm số của chính thiết lập đó trên cửa sổ ngay trước nó
hạng 8/13Vị trí của mẫu MACD giữa các thiết kế xu hướng và động lượng được đo giống hệt nhau

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ẫuSố khốiHệ số lợi nhuậnSụt giảmSố lệnh
ma_perfect_order_trend101,07-0,36%305
mtf_osc_filter271,04-0,64%187
consecutive_bars_momentum71,03-0,36%377
ao_ama_trend140,97-0,95%239
adx_trend120,96-0,76%534
multi_tf_trend150,96-0,51%247
ma_crossover90,95-0,84%420
macd_signal80,93-1,05%698
ma_slope_trend70,92-1,00%478
mtf_adx_filter140,92-0,84%343
elder_ray90,90-1,34%529
pitch_trail_trend90,77-1,61%467
dynamic_sl_trend90,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.

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

Cắt đường signal và cắt đường zero của MACD khác nhau ở chỗ nào?
Đó là hai câu hỏi khác nhau, và trong Builder là hai cách đấu nối khác nhau. Cắt đường signal hỏi xem đường MACD có cắt qua trung bình 9 chu kỳ của chính nó hay không, nên nó cần hai khối MACD — một khối đặt MODE_MAIN, một khối đặt MODE_SIGNAL — cùng đưa vào một điều kiện Cross. Cắt đường zero chỉ hỏi xem động lượng có đổi dấu hay không, nên nó cần một khối MACD ở MODE_MAIN cộng với một phép Compare với 0. Bản cắt đường signal bắn nhiều hơn hẳn và sớm hơn; bản cắt đường zero thì hiếm khi bắn và bắn muộn. Mẫu xuất xưởng dùng dạng cắt đường signal, và nó là thiết kế bận rộn thứ nhì trong cả nhóm hàng xóm của mình.
Thiết lập MACD nào là tốt nhất cho một EA?
Không có gì trên trang này trả lời được điều đó, và cần nói thẳng như vậy. Khối MACD của Builder mặc định lấy 12/26/9 trên giá đóng cửa, còn cuộc dò tham số được ghi lại trên mẫu này chỉ dịch chuyển mức cắt lỗ và mục tiêu — SL30-80 × TP60-250, 12 tổ hợp qua 3 cửa sổ. Nó chưa một lần nào đổi fast_ema, slow_ema hay signal_period. Bất kỳ bài viết nào nêu ra một bộ chu kỳ tốt nhất là đang nêu một sở thích, không phải một phép đo. Thứ mà cuộc dò thật sự xác lập được là: không tổ hợp cắt lỗ và mục tiêu nào làm cho thiết kế này trở nên bền vững.
Chiến lược cắt nhau của MACD có sinh lời không?
Không, ít nhất là ở dạng xuất xưởng tại đây. Đo trên USD/JPY khung M5 suốt một năm, mẫu macd_signal của Builder đóng ở hệ số lợi nhuận 0,93 qua 698 lệnh — thiết kế bận rộn 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, và xếp thứ tám trên mười ba theo kết quả. Hữu ích hơn là cuộc dò được ghi lại của nó đã tìm ra một thiết lập đạt 1,14 tới 1,15 ngoài mẫu, rồi rơi xuống 0,74 tới 0,77 trên cửa sổ trước đó. Đó là câu trả lời trung thực: những kết quả trông có lãi là có thật, và chúng đã không đứng vững khi trạng thái thị trường đổi.
Có nên thêm chỉ báo để lọc cho EA MACD của tôi không?
Hãy xem bản kết hợp đó thật sự đã làm gì trước khi cho rằng nó có ích. Thư viện có sẵn một bản kết hợp chứa đúng mẫu này — macd_signal cộng một quy tắc ngưỡng CCI cộng Elder Ray — và dưới điều kiện giống hệt nhau, nó đóng ở hệ số lợi nhuận 0,91 so với 0,93 của MACD đơn lẻ, với mức sụt giảm sâu gấp 3,76 lần qua 2.016 lệnh. Cả ba thành phần đều là những phép đọc động lượng trên cùng một chuỗi giá, nên chúng có xu hướng đồng ý với nhau và bắn cùng lúc chứ không đa dạng hóa. Một bộ lọc chỉ có ích khi đôi lúc nó bất đồng với điểm vào lệnh của bạn; ba phiên bản của cùng một ý tưởng thì không.