코딩 없이 MT5에서 MACD 엑스퍼트 어드바이저를 만드는 방법은 Start 노드 하나, MACD 블록 둘 — 하나는 메인선을 읽고 하나는 시그널선을 읽습니다 — 그 둘 사이의 Cross 조건, 그리고 주문 블록을 놓는 것입니다. 서버가 MQL5를 생성하고 컴파일해서 진짜 .ex5를 손에 쥐여 줍니다. 15분, 문법은 한 줄도 없습니다.
그다음에 오는 것이 이 파일에 값어치가 있는지를 결정합니다. 이 조립법에는 측정된 기록이 있고, 그중 가장 듣기 좋은 수치가 가장 믿지 말아야 할 수치입니다.
무엇을 만들게 되는가
한 통화쌍에서 포지션 하나만 잡는 EA입니다. MACD 선이 시그널선 위로 올라가면 매수하고 아래로 내려가면 매도하며, 고정 손절과 고정 목표를 달고, 진짜 .ex5로 컴파일됩니다. 블록 8개.
그 수 가운데 블록 둘은 오직 한 가지 이유로 존재합니다. MACD 지표 블록은 한 번에 하나의 선만 내보내기 때문입니다.
시작하기 전에: MACD가 알려 주는 것과, 당신이 읽고 있는 선
이메일 인증을 마친 무료 계정(설계는 무료이고 로그인도 필요 없지만, .ex5로 컴파일하려면 필요합니다), 15분쯤의 시간, 그리고 MetaTrader 5 터미널이 필요합니다.
MACD는 빠른 이동평균에서 느린 이동평균을 뺀 다음, 그 차이를 다시 한번 평균 냅니다. 그러므로 메인선은 두 평균이 얼마나 멀어졌는지를 재고, 시그널선은 그 측정값을 매끄럽게 다듬은 것입니다. MACD 규칙이 할 수 있는 모든 말은 두 평균 사이의 거리에 대한 진술입니다 — 다시 말해 이것은 오실레이터의 옷을 입은 추세 도구이고, 자신을 만들어 낸 두 평균의 지연을 그대로 물려받습니다.
빌더의 MACD 블록이 노출하는 설정은 다음과 같습니다.
| 블록 설정 | 기본값 | 무엇을 좌우하는가 |
|---|---|---|
fast_ema | 12 | 더 빠른 쪽 평균. 범위 1–999 |
slow_ema | 26 | 더 느린 쪽. 두 평균 사이의 간격이 신호의 전부입니다 |
signal_period | 9 | 비교하기 전에 그 차이를 얼마나 평활화할지 |
line | MODE_MAIN | 이 블록이 어느 선을 내보내는가 — MODE_MAIN 또는 MODE_SIGNAL |
applied_price | PRICE_CLOSE | 어떤 가격이 계산에 들어가는지 |
shift | 0 | 0은 형성 중인 봉, 1은 마지막으로 닫힌 봉 |
timeframe | 현재 차트 | M1부터 MN1까지 무엇이든, 차트와 무관하게 읽음 |
플로우의 모양을 바꾸는 줄은 line입니다. 값이 둘뿐인 선택 항목이므로, 블록 하나가 선 하나를 줍니다. 따라서 시그널선 교차에는 MACD 블록이 둘 필요하고, 제로선 교차에는 하나와 상수에 대고 재는 비교가 필요합니다.
단계별로: 빌더에서 MACD EA 만들기
- EA Builder를 열고 갤러리에서
macd_signal템플릿을 불러오거나, 빈 캔버스에서 직접 배선해 봅니다. - Utility 팔레트에서 Start 노드를 놓습니다. 이것이 없으면 검증이
EAB-E202로 빌드를 멈춥니다. - MACD 블록을 추가하고
line은MODE_MAIN그대로 둡니다. 첫 빌드에서는 아래 기준 실행과 비교할 수 있도록 12/26/9를 건드리지 마십시오. - 기간이 똑같은 두 번째 MACD 블록을 추가하고
line을MODE_SIGNAL로 정합니다. 같은 지표, 같은 설정, 다른 출력 — 사람들이 건너뛰는 단계가 바로 여기이고, 이것을 건너뛰기 때문에 그들의 플로우는 선 하나를 자기 자신과 견주게 됩니다. - 둘 다 Cross 조건으로 연결합니다. Cross는 입력 둘을 받아 이번 봉에서 하나가 다른 하나를 가로질렀는지를 묻습니다.
cross_type이crossover아니면crossunder이므로, 매수 쪽과 매도 쪽은 하나를 뒤집은 것이 아니라 서로 다른 두 개의 조건입니다. - 각 조건을 자기 몫의 Open Buy / Open Sell 블록에 연결합니다. 지표를 주문에 곧장 연결하면
EAB-E205로 거부됩니다 — 가공되지 않은 값은 결정이 아닙니다. - Settings 탭에서 위험을 정합니다. 공용 기본값은 50핍 손절, 100핍 목표, 그리고
0.01고정 랏입니다. 유효한 손절이 없는 플로우는 빌드되기 전에CRITICAL사전 진단을 띄웁니다. - Measure를 누르고, 패널이 찍어 주는 기준선에 대고 결과를 읽으십시오. 프로핏 팩터 1.2 이상, 거래 60건 이상, 낙폭은 20%보다 나쁘지 않을 것.
- Compile .ex5를 누르고, File > Open Data Folder를 거쳐 파일을
MQL5/Experts로 옮긴 뒤 내비게이터를 새로 고칩니다. 그리고 계좌 근처에 가기 전에 전략 테스터에서 검증하십시오.
- Start 노드
- MACD 블록, line = MODE_MAIN
- MACD 블록, line = MODE_SIGNAL
- Cross — 매수는 crossover, 매도는 crossunder
- Open Buy와 Open Sell
- 손절과 익절
- .ex5로 컴파일
대신 제로선 판본을 원한다면 두 번째 MACD 블록을 지우고 Cross를 Compare로 바꾸십시오. Compare의 연산자는 > < >= <= == !=이고 offset의 기본값은 0입니다. 「MACD 메인선이 0 위」는 빠른 평균이 느린 평균보다 위에 있기는 한가라는 진술이며, 두 선이 맞닿는 것보다 훨씬 드물고 훨씬 늦은 사건입니다. 팔레트에는 OsMA도 들어 있는데, 메인선에서 시그널선을 뺀 차이를 하나의 값으로 곧장 내보내므로 히스토그램 규칙은 블록 둘이 아니라 하나면 됩니다.
MACD 진입·청산·파라미터 설정
| 설정 | 템플릿 값 | 움직이면 일어나는 일 |
|---|---|---|
fast_ema | 12 | 낮추면 더 빨리 반응하고 훨씬 자주 교차합니다. 승률보다 거래 건수가 먼저 움직입니다 |
slow_ema | 26 | 높이면 빠른 선이 건너야 할 간격이 넓어지므로 신호가 더 늦게, 더 드물게 옵니다 |
signal_period | 9 | 비교 대상이 되는 선의 평활화 정도. 짧을수록 교차가 늘고, 그 대부분은 잡음입니다 |
line | MODE_MAIN | 조율 손잡이가 아닙니다 — 당신이 어떤 규칙을 만들었는지를 결정합니다 |
shift | 0 | 1로 두면 닫힌 봉에서만 판단합니다 |
| 손절 | 50핍 (공용 기본값) | 탐색된 범위는 30–80 |
| 익절 | 100핍 (공용 기본값) | 탐색된 범위는 60–250 |
지연에 대하여 — 이 지표를 향한 정직한 불평입니다. 여기 있는 모든 값은 평균 둘을 세 번째 평균 위에 쌓아 올린 결과입니다. 그러므로 교차는 이미 일어난 움직임에 대한 보고이고, 남는 질문은 얼마나 늦었는가뿐입니다. fast_ema를 짧게 하면 이름을 사고 거짓 교차로 값을 치릅니다. slow_ema를 길게 하면 신뢰성을 사고 움직임이 끝난 뒤에 도착하는 진입으로 값을 치릅니다. 이 템플릿 자신의 기록이 어디에 내려앉았는지를 알려 줍니다. 1년에 거래 698건, 동일한 조건에서 측정된 추세·모멘텀 템플릿 13개 가운데 두 번째로 많은 건수입니다. 쉬지 않고 발동하는 설계라는 뜻이고, 쉬지 않고 발동하는 것이 바로 짧은 지연의 대가입니다.
탐색이 건드린 것과 건드리지 않은 것. 기록된 파라미터 탐색은 손절과 목표만 움직였습니다 — H1에서 3개 구간에 걸친 SL30-80 × TP60-250, 12가지 조합입니다. fast_ema도 slow_ema도 signal_period도 한 번도 바꾸지 않았습니다. 그러니 12/26/9가 옳다거나, 틀렸다거나, 개선할 수 있다는 주장은 이 페이지 어디에서도 뒷받침되지 않습니다. 대신 훨씬 좁고 훨씬 쓸모 있는 주장을 뒷받침합니다. 어떤 손절·목표 조합도 이 설계를 구해 내지 못했다는 것입니다.
MACD EA 백테스트하기
이것은 빌더 자신이 측정해 둔 기록이며 다시 돌린 것이 아닙니다. 비교에 나오는 모든 템플릿은 아래의 단일한 조건 집합을 공유합니다. 검증 방법은 그 기록들이 지켜야 하는 기준을 밝힙니다.
macd_signal 기준 실행 | 값 |
|---|---|
| 프로핏 팩터 | 0.93 |
| 거래 건수 | 698 |
| 최대 낙폭 | -1.05% |
| 순손익 | -93.93 |
| 이웃 설계 중 프로핏 팩터 순위 | 13개 중 8위 |
| 이웃 설계 중 거래 건수 순위 | 13개 중 2위 |
| Measure 패널 자체의 통과선을 넘는가 | 아니오 |
| 검증 조건 | |
|---|---|
| 실험 ID | EXP-MACD-RECIPE-BASELINE-001 |
| 상위 실험 | EXP-BUILDER-TEMPLATE-BASELINE-001 |
| 심볼 / 시간 프레임 | USDJPYm M5 |
| 기간 | 2025-06-01 – 2026-06-09 |
| 모델 | M1 OHLC (Model=1) |
| 예치금 | 10,000 |
| 환경 | Exness MT5 |
| 기준 실행 측정 | 2026-06-18 |
| 최종 검증 | 2026-08-25 |
이 탐색 결과는 한 줄로 넘기기에는 아깝습니다. 갤러리의 템플릿 8개가 기록된 파라미터 탐색을 달고 있고, 여덟 개 전부가 no_robust_edge로 끝났습니다. 그런데 실패한 방식이 두 갈래로 갈렸고, 그 차이가 공유된 판정보다 더 중요합니다. 그중 둘은 탐색이 맞춰 넣은 그 기간에서조차 이기는 설정을 아예 만들어 내지 못했습니다. macd_signal은 표본 밖에서 1.0을 넘긴 설정을 만들어 낸 유일한 하나입니다 — 목표를 가장 넓게 잡았을 때 1.14에서 1.15까지 — 그리고 바로 앞 구간에서 0.74에서 0.77을 냈습니다. 매니페스트 자신이 이것을 부르는 말은 *국면 의존적(regime-dependent)*입니다.
이것이 검증에 대해 무엇을 뜻하는지 읽어 내십시오. 데이터를 한 번 잘라 앞쪽 절반에 맞추고 뒤쪽 절반에서 확인했다면, 이 템플릿은 당신에게 통과 결과를 건네주었을 것입니다. 그것을 붙잡은 유일한 방법은 탐색이 한 번도 보지 못한 세 번째 구간을 확인하는 것이었습니다. 그것이 구체적인 사례 하나로 본 워크포워드 분석의 논거이며, 과최적화에 대한 어떤 일반론적 경고보다 값어치가 큽니다.
MACD가 이웃들 사이에서 놓인 자리, 전부 위의 단일 조건 블록에서 측정되었습니다.
| 템플릿 | 블록 수 | 프로핏 팩터 | 낙폭 | 거래 건수 |
|---|---|---|---|---|
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 |
이 13개를 자기들의 거래 건수 중앙값 420에서 가르면 두 절반이 깨끗하게 갈립니다. 덜 거래한 6개는 거래 283건에서 프로핏 팩터 평균 1.00, 낙폭 -0.61%였습니다. 더 거래한 6개는 거래 569건에서 0.86, 낙폭 -1.23%였습니다 — 결과는 더 나쁘고 깊이는 두 배입니다. 1.0을 넘긴 설계 셋은 모두 조용한 절반에 앉아 있습니다. MACD는 분주한 쪽에 앉아 있습니다.
이것은 하나의 설정 아래 놓인 13개 설계에 대한 서술이지 법칙이 아닙니다. 진입 로직도, 노드 수도, 청산도 함께 다르므로 빈도가 원인이라는 것은 확립되지 않았습니다. 그러나 눈앞에 놓인 패턴이고, 기본 제공되는 MACD 템플릿은 그 패턴의 나쁜 쪽에 있습니다.
피해야 할 흔한 실수
표본 밖 통과를 믿기. 이 템플릿이 보여 주려고 존재하는 바로 그 실수입니다. 떼어 둔 구간 하나는 표본 하나이고, 모멘텀 규칙은 그 기간에 시장이 추세를 냈다는 이유만으로 표본 하나를 이길 수 있습니다. 어떤 수치를 믿기 전에, 탐색이 한 번도 보지 못한 세 번째 구간에서 검증하십시오.
선 하나를 자기 자신과 견주기. MACD 블록 둘이 모두 MODE_MAIN으로 남아 있으면 Cross 조건은 똑같은 값을 비교하므로 영원히 발동하지 않거나, 반올림 때문에 발동합니다. 거래 건수가 왜 0인지 궁금해하기 전에 두 블록의 line 설정부터 확인하십시오.
교차를 예측으로 읽기. MACD는 평균의 평균 둘입니다. 교차는 어떤 움직임이 이미 몇 개의 봉 동안 진행되어 왔다는 보고입니다. 설계에서 고를 수 있는 것은 늦음을 얼마나 받아들일지이지, 늦음을 받아들일지 말지가 아닙니다.
자산 곡선이 그럴듯해 보일 때까지 손절과 목표를 맞추기. 기록된 탐색이 이미 12가지 조합과 3개 구간에 걸쳐 그 일을 체계적으로 했고, no_robust_edge를 보고했습니다. 당신의 수동 조정이 체계적인 탐색을 이겼다면, 그 조정 쪽을 의심하십시오.
모멘텀 필터를 쌓아 올리기. 위의 조합 설계가 그 본능을 측정해 놓은 판본입니다. 프로핏 팩터는 조금 더 나빠졌는데 낙폭은 3.76배가 되었습니다.
분리하지 않은 채 다른 EA와 나란히 돌리기. 한 계좌 위의 각 EA에는 자기 몫의 매직 넘버가 필요합니다. 그러지 않으면 한 EA의 청산이 다른 EA의 포지션을 닫아 버립니다.
다음 단계와 변형
MACD를 쓰지 말아야 할 때. 박스권에서는 두 평균이 몇 번이고 교차하고 그 모든 교차가 잡음입니다 — 그리고 자주 발동하는 기본값은 박스권이 정확히 벌하는 것입니다. 평평한 구간에서 규칙을 멈추는 조건을 스스로 말할 수 없다면, 그 조건을 더하거나 두 평균이 벌어지는 데 기대지 않는 아이디어를 쓰십시오.
시도해 볼 값어치가 있는 변형을, 근거가 강한 순서대로. 먼저 제로선 판본을 시도하십시오. 블록이 하나 더 단순하고 훨씬 덜 발동하며, 1.0을 넘긴 결과는 모두 이웃 가운데 조용한 절반에 있습니다. 그다음 MACD 블록 안의 더 상위 timeframe에서 같은 규칙을 시도하십시오. 차트를 건드리지 않고 신호를 느리게 만들어 줍니다. 기간을 움직이는 것은 그 뒤이고, 한 번에 하나씩만 바꾸십시오.
그런 다음 제대로 검증하십시오. Measure 패널은 봉 단위이고 근사값입니다. 판결이 아니라 걸러 내는 체입니다. MT5 백테스트 하는 법은 실제 실행 한 건을 처음부터 끝까지 따라가며, 리포트의 두 낙폭 수치 중 어느 쪽을 믿어야 하는지도 다룹니다. RSI EA 만드는 법은 실패 방식이 정반대인 형제 조립법입니다 — 그쪽 탐색은 어디에서도 이긴 적이 없어서 물리치기는 더 쉽고, 배울 것은 이쪽보다 적습니다. 코딩 없이 MT5 EA 만들기는 더 넓은 블록 어휘를 다루고, 백테스팅 가이드는 이 페이지가 주장하는 워크포워드 단계를 더 깊이 파고듭니다.
그리고 기록으로 남은 사례가 어떤 모습인지 가늠하고 싶다면, 공개된 EA 각각에 완전한 청산 거래 목록과 실행 매니페스트가 붙어 있습니다. 어떤 전략이든 — 당신이 직접 만든 것을 포함해 — 믿기 전에 그중 하나를 위의 표와 견주어 보십시오.