MetaTrader 5에서 파라미터 최적화는 탐색입니다. 입력값마다 범위를 선언하면 전략 테스터가 모든 조합을 돌리고, 당신이 고른 지표를 기준으로 정렬한 표를 건네줍니다. 어려운 부분은 그것을 돌리는 일이 아닙니다. 어려운 부분은 그 표에 언제나 첫 줄이 있고, 그 첫 줄이 거의 언제나 틀렸다는 데 있습니다.
이 글에서 얻어 가는 것은 숫자가 아니라 결정을 만들어 내는 절차입니다. 변호할 수 있는 탐색, 두 번째 구간과 마주쳐도 살아남는 패스 그리드 읽는 법, 그리고 멈추는 기준입니다.
| 검증 조건 | |
|---|---|
| 실험 ID | EXP-PARAM-SEARCH-OUTCOMES-001 |
| 상위 실험 | EXP-BUILDER-TEMPLATE-BASELINE-001 |
| 출처 | ea-templates-manifest.js → bt.explored |
| 모집단 | 8 recorded searches of the 53 measured templates |
| 심볼 / 시간 프레임 | USDJPYm, M5 and H1 |
| 모델 | M1 OHLC (Model=1), Exness MT5, measured 2026-06-18 |
| 변화시킨 파라미터 | stop loss and take profit only |
| 최종 검증 | 2026-08-25 |
설정: 그리드, 분할, 그리고 데이터
탐색을 돌릴 값어치가 있는지를 결정하는 설정이 셋 있습니다. 이것을 잘못 잡으면 패스 그리드는 대단히 비싼 난수 발생기가 됩니다.
| 항목 | 위치 | 어떻게 둘 것인가 | 왜 |
|---|---|---|---|
| Optimisation | Settings 탭 | 그리드가 작으면 Slow complete algorithm | 유전 알고리즘 모드는 공간을 표본으로만 훑습니다. 조합이 12–32개라면 전부 들여다볼 여유가 있습니다 |
| Start / Step / Stop | Inputs 탭, 입력값마다 | 파라미터 둘, 성긴 스텝 | 체크하는 입력값마다 그리드가 곱해집니다. 우리는 둘만 움직였습니다 |
| Forward | Settings 탭 | 1/2, 1/3 또는 1/4 | 구간을 갈라 테스터가 뒷부분을 따로 채점하게 합니다. 애초에 이 탐색을 돌리는 이유가 되는 점검입니다 |
| Optimisation criterion | Settings 탭 | 그리드를 보기 전에 정할 것 | 테스터가 패스에 순위를 매기는 지표이므로, 어느 줄이 첫 줄이 되는지를 이것이 정합니다 |
| Modelling | Settings 탭 | 훑을 때는 거친 모드, 살아남은 것은 실제 틱으로 다시 | 훑는 모드는 후보에 순위를 매기는 용도이지, 공개할 수치를 내는 용도가 아닙니다 |
| Period | Settings 탭 | 국면이 하나 이상 들어갈 만큼 길게 | 추세 하나 안에서만 도는 탐색은 그 추세에 올라탄 설정을 찾아냅니다 |
이 기준은 기본값으로 둘 것이 아니라 결정해야 할 대상입니다. 순손익으로 순위를 매기면 가장 크게 위험을 진 패스가 상을 받고, 낙폭 기반 지표로 순위를 매기면 가장 적게 거래한 패스가 상을 받습니다. 리커버리 팩터라는 것이 존재하는 이유가 바로 그 두 답이 서로 어긋나기 때문입니다. 우리 탐색은 테스터의 순위로 판단하지 않았습니다. 살아남은 후보마다 서로 다른 세 구간에서 프로핏 팩터로 점수를 매겼고, 그중 어느 한 구간 안에서의 순위는 아무것도 결정하지 않았습니다.
데이터 품질이 먼저입니다. 나쁜 틱 위에서 도는 탐색은 그 빈 구멍을 최적화합니다. 짧게 말하면, 모델링 품질이 90% 아래면 당일 매매 패스 그리드는 쓸 수 없게 되고, 보간된 틱 데이터로 만든 실행은 봉 안쪽에 놓인 손절을 분해해 내지 못합니다.
- 먼저 기본값 그대로 백테스트를 한 번 돌리고 리포트를 남겨 두십시오. 기준선이 없으면 패스 그리드는 이길 대상이 없습니다. 백테스트 하는 법이 그 한 패스를 처음부터 끝까지 다룹니다.
- Settings 탭에서 Optimisation을 작은 그리드용 완전 탐색으로 두고, Forward를
1/3으로 설정해 테스터가 구간의 마지막 3분의 1을 남겨 두게 하십시오. - Inputs 탭에서는 실제로 테스트할 파라미터만 체크하고, 각각에 Start, Step, Stop을 주십시오. 성긴 스텝의 입력값 둘이 촘촘한 스텝의 넷보다 낫습니다.
- Start를 누르고 끝날 때까지 두십시오. Optimisation Results 탭은 표로 읽고, Optimisation Graph는 모양으로 읽으십시오. 뾰족한 봉우리 하나는 경고이고, 평평한 고원은 발견입니다.
- 이긴 것이 아니라 살아남은 것들을 골라, 각각을 최적화 구간보다 앞선 기간에서 단일 백테스트로 다시 돌리십시오. 우리 집합의 모든 부정적 판정이 나온 단계가 이것이고, 사람들이 건너뛰는 단계도 이것입니다.
결과 읽기: 한 구간이 아니라 세 구간
기록으로 남은 우리 집합 전체를, 각 탐색이 도달한 최고 인샘플 프로핏 팩터 순으로 정렬해 싣습니다. IS는 설정을 맞춰 넣은 구간, OOS는 홀드아웃, prior는 탐색이 한 번도 보지 못한 앞선 구간입니다.
| 템플릿 | 탐색한 그리드 | 최고 IS | OOS | 직전 구간 | 판정 |
|---|---|---|---|---|---|
ichimoku | 조합 12개 × 구간 3개 | 1.37 | 0.89 | 0.80 | no_robust_edge |
ma_crossover | 조합 20개 + 12개, 시간 프레임 2개 | 1.23 | 0.89–0.94 | 0.78 | no_robust_edge |
cci_level | 조합 12개 × 구간 3개 | 1.07 | 1.05 | 0.92 | no_robust_edge |
adx_trend | 조합 12개 × 구간 3개 | 1.04 | 0.91 | 0.80 | no_robust_edge |
breakout | 조합 12개 × 구간 3개 | 1.04 | 0.79–0.89 | 0.64–0.84 | no_robust_edge |
macd_signal | 조합 12개 × 구간 3개 | — | 1.14–1.15 | 0.74–0.77 | no_robust_edge |
rsi_reversal | 조합 12개 × 구간 3개 | 0.91 | — | — | no_robust_edge |
bb_bounce | 조합 12개 × 구간 3개 | 0.91 | — | — | no_robust_edge |
첫 숫자 열을 위에서 아래로 읽고, 그다음 가로로 읽으십시오. 이 집합에서 인샘플 성적이 가장 컸던 것이 가장 크게 무너졌습니다. ichimoku의 1.37은 0.89로, 다시 0.80으로 떨어졌습니다. 이 순서는 우연이 아닙니다. 한 구간에 가장 잘 들어맞는 설정은 구조적으로 그 구간의 잡음을 가장 많이 빨아들인 설정이기 때문입니다.
이제 실제로 가장 가까웠던 설정을 보십시오. 위 표에는 없습니다. 어디에서도 첫 줄이었던 적이 없기 때문입니다. 같은 ichimoku 그리드에서 SL50/TP150이 인샘플 1.18, 아웃오브샘플 0.99, 직전 구간 1.00을 냈습니다. 세 구간 모두 대체로 평평합니다. 가장 가까운 후보로 기록되었고, 그러고도 채택되지 않았습니다. 세 구간에 걸친 본전은 우위가 아니기 때문입니다. 그것은 우위가 없다는 사실을 조심스럽게 측정한 결과일 뿐입니다.
그에 비해 이 탐색들이 이기려 했던 기준선은 0.92에서 1.03 사이에 놓여 있습니다. 어떤 탐색도 이미 출고된 기본값을 움직이지 못했습니다.
피해야 할 함정
다섯 가지 밑에 깔린 실패 방식은 전부 같은 하나입니다. 과최적화는 탐색 끝에서 저지르는 실수가 아니라 탐색을 돌리면 기본으로 나오는 결과이며, 세 구간 규율은 그것을 행동에 옮기기 전에 눈에 보이게 만들려고 존재합니다.
개선과 반복: 무엇을 바꾸고, 언제 멈출 것인가
하나만 바꾸고, 다시 돌리고, 남겨 둔 기준선과 비교하십시오. 시간을 가장 적게 버리는 순서는 이렇습니다.
- 그리드를 넓히기 전에 기간을 넓히십시오. 조합을 늘리는 것보다 국면을 늘리는 편이 낫습니다. 추세 하나만 덮는 탐색은 해상도가 어떻든 그 추세에 올라탄 설정을 찾아냅니다.
- 그다음에는 스텝을 잘게 다듬지 말고 성기게 만드십시오. 어떤 결과가
SL47에서만 존재한다면, 그것은 존재하지 않는 것입니다. - 그런 뒤에야, 오직 그런 뒤에야 파라미터를 하나 더하십시오. 우리 탐색은 여기까지 간 적이 없습니다. 파라미터 둘이 이미 세 구간 기준을 넘지 못했기 때문입니다.
다음 중 하나가 참이 되면 멈추고, 어느 것이었는지 적어 두십시오.
- 살아남은 후보가 세 구간을 모두 통과했다. 내보내되, 남긴 패스만이 아니라 탐색한 그리드 전체를 기록하십시오.
- 인샘플 최고 성적이 1.0 아래다. 진짜 답을 얻은 것입니다. 우리 탐색 8건 중 둘이 여기서 끝났고, 평가 36회 만에 여기서 끝나는 것은 싼 값입니다.
- 살아남은 후보가 한 구간은 통과하고 다른 구간은 계속 떨어진다. 그 규칙은 국면에 의존합니다. 더 탐색해 봐야 국면에 의존하는 설정이 더 나올 뿐입니다.
- 직전 구간은 “쳐 주지 않아도 된다”고 설명하기 시작했다. 탐색이 테스트이기를 멈춘 순간이 바로 그때입니다.
탐색의 정직한 기록은 훑은 범위 와 판정을 함께 적은 것입니다. 우리 8건은 전부 그렇게 저장되어 있고, 그래서 애초에 이 글을 그 기록들로부터 쓸 수 있었습니다. 이긴 설정만 저장해 두었다면 아무것도 증명하지 못했을 것입니다.
다음 단계: 포워드 테스트, 그다음 결정
최적화는 네 단계 중 두 번째입니다. 순서는 백테스트 → 최적화 → 워크포워드 → 데모이며, 각 단계가 서로 다른 방식의 오류를 하나씩 걷어냅니다.
- 당신이 통제하는 대상에서 이 반복을 연습하십시오. Builder에서 전략을 만들고 그 손절과 목표를 직접 탐색해 보십시오. 남에게서 물려받은 그리드보다 당신이 직접 선언한 그리드가 훨씬 정직하게 읽히기 때문입니다.
- 세 구간 점검의 형식을 갖춘 판본이 워크포워드 분석이며, 분할 지점을 한자리에 고정하는 대신 앞으로 굴려 나갑니다.
- 탐색이 무엇을 돌려주든, 그것이 담겨 오는 리포트는 여전히 읽어야 합니다. MT5 백테스트 리포트 읽는 법이 대표 수치 하나하나가 실제로 어느 모집단에 대한 주장인지를 다룹니다.
- 숫자가 실제로 살아남았을 때 완성된 기록이 어떤 모습인지 보고 싶다면, 공개된 EA마다 완전한 청산 거래 목록과 실행 매니페스트가 붙어 있습니다.
- 이 모든 것을 우리가 어떻게 테스트하고 채점하고 기록하는지는 검증 방법에 밝혀 두었습니다.