MT5 백테스트 리포트는 하나의 특정한 가격 히스토리 위에서 만들어진, 하나의 특정한 거래 집합에 대한 주장입니다. 잘못 읽는 거의 모든 경우가 이 문장의 절반을 떨어뜨리는 데서 나옵니다. 대표 프로핏 팩터가 엑스퍼트 어드바이저의 성질로 읽히는 것입니다. 그것은 다른 두 가지의 성질입니다. 리포트가 담아낸 거래의 모집단, 그리고 테스터에게 먹인 틱입니다.
이 글은 결정을 만들어 내는 읽는 순서입니다. 리포트가 무엇 하나 찍기 전에 이미 가정한 것, 어느 지표가 어느 질문에 답하는지, 각 숫자가 어디에서 당신을 속이는지, 그리고 각 읽기가 무엇을 바꾸라고 말하는지입니다. 리포트를 만들어 내는 절차는 별개의 작업입니다. 백테스트 하는 법이 그것을 처음부터 끝까지 다룹니다.
| 검증 조건 | |
|---|---|
| 실험 ID | EXP-REPORT-READING-001 |
| 상위 실험 | EXP-BACKTEST-RUNBOOK-001 |
| 출처 | data/run-manifests/*.json → results, ledger_recomputed, shadow_runs |
| 모집단 | all 23 runs published on mt5depot at the time of derivation |
| MT5 빌드 | 6090 and 6140 |
| 모델 | Every tick generated from M1 bars (Model 0) and Every tick based on real ticks (Model 4) |
| 계좌 | 10,000 USD deposit on all 23 runs |
| 최종 검증 | 2026-08-26 |
아래의 모든 수치는 백테스트이며, 23건 전부가 PASS 판정을 달고 있습니다. 등재 기준을 통과한 실행들이기 때문입니다. 그래서 이것은 생존자 집합이고, 여기 있는 무엇도 백테스트가 얼마나 자주 통과하는지를 말해 주지 않습니다. 통과한 리포트가 안에서 어떻게 생겼는지를 말해 줄 뿐입니다.
설정: 리포트가 숫자를 찍기 전에 이미 가정한 것
MT5 리포트 맨 위의 Settings 블록은 머리말이 아닙니다. 그 아래의 모든 숫자가 물려받는 가정의 목록이고, 그중 여섯 가지가 나머지를 읽을 값어치가 있는지를 결정합니다. 브로커 이름과 빌드는 리포트 자신의 제목 줄에 있습니다. 우리 것은 Exness-MT5Trial5 (Build 6090)이라고 적혀 있었습니다.
| Settings 항목 | 실제로 무엇을 고정하는가 | 우리 기록은 무엇을 담고 있는가 |
|---|---|---|
Symbol: / Period: | 결과가 표본으로 삼는 국면 | 22건이 2019년 1월에 시작하고, cairn은 2021년 6월에 시작 |
| 모델(틱 생성) | 각 봉 안쪽의 틱을 어떻게 만들어 냈는가 | Model 0(M1 봉에서 생성) 12건, Model 4(실제 틱) 11건 |
Initial Deposit: | 페이지의 모든 비율이 올라앉는 분모 | 23건 모두 10,000 USD |
| 스프레드 | 모든 체결에서 빠져나가는 비용 | 23건 중 정확히 1건에서만 측정 — 나머지는 가격 히스토리가 지니고 있던 값을 그대로 물려받음 |
| 커미션 | 당신이 설정해야만 테스터가 적용하는 비용 | 23건 모두 0 |
Inputs: | 이것을 만들어 낸 설정 전부 | 실행마다 리포트와 대조해 검증 |
Inputs: 목록은 사람들이 건너뛰는 줄이고, 리포트를 재현 가능하게 만들어 주는 유일한 줄입니다. 같은 페이지를 다시 얻으려면 처음부터 다시 입력해야 하는 값의 완전한 집합이기 때문입니다.
이 중 두 줄은 잠시 머물 값어치가 있습니다. 커미션 0이라는 줄은 커미션이 무시되었다는 뜻이 아닙니다. 테스트한 심볼에서 커미션이 부과되지 않았다는 뜻입니다. 이 둘은 서로 다른 진술이고, 어느 쪽인지는 실행 기록만이 말해 줍니다. 그리고 측정되지 않은 스프레드는 0인 스프레드가 아닙니다. 우리 23건 중 22건에서 그 칸이 비어 있는 것은 테스트와 나란히 기록기가 돌지 않았기 때문입니다. 모든 체결은 그저 M1 히스토리가 지니고 있던 스프레드를 물려받았습니다. 자기 평균값을 말할 수 있는 것은 tidewell-slack 하나뿐이고, 19.14포인트입니다.
이름에 얽힌 함정이 하나 여기에 있습니다. 오래된 가이드들이 모델링 품질이라고 부르는 항목을 MT5는 Results 블록에서 Bars:, Ticks:, Symbols: 옆에 History Quality: 라는 이름으로 찍습니다. Build 6090 리포트에서 modelling quality를 찾아봐야 아무것도 나오지 않습니다. 우리 기록에서는 이 수치가 매니페스트 23건 중 2건에만 있는데, 원본 리포트가 값을 적어 두었을 때만 보관하기 때문입니다. 이것은 우리 기록의 성질이지, MetaTrader가 이 값을 얼마나 자주 찍는지를 잰 것이 아닙니다. 실질적으로는 당신이 직접 만들지 않은 리포트를 거르는 필터로는 쓸 수 없다는 뜻입니다. 그 밑에 깔린 질문은 틱 데이터의 출처이고, 그쪽은 언제나 답할 수 있습니다. 그 실행이 어느 히스토리를 썼는지 물으면 됩니다.
리포트 읽기: 지표 하나씩
이 순서로 페이지를 읽으십시오. MetaTrader가 찍어 놓은 순서와 일부러 다르게 두었습니다. 가장 값싸게 결격을 잡아내는 두 가지가 리포트 맨 아래에 있기 때문입니다.
Settings를 먼저 읽으십시오. 모델,Initial Deposit:, 스프레드, 커미션입니다. 아래의 모든 비율이 이것을 물려받으며, 스프레드가 측정되지 않은 실행은 스프레드가 없는 실행이 아닙니다.- 어떤 비율보다
Total Trades:를 먼저 읽으십시오. 비율과 그 표본 크기는 두 개의 사실이 아니라 하나의 사실입니다. 비율 옆에 건수를 적어 두십시오. - 대표 수치가 어떤 거래를 담고 있는지 물으십시오. 거래 원장이 함께 공개되어 있다면 그 합계가
Total Trades:와 맞는지 확인하십시오. 우리 리포트 23건 중 하나는 맞지 않습니다. - 잔고 줄이 아니라
Equity Drawdown Maximal:을 읽으십시오. 그리고Maximal을 가져왔는지Relative를 가져왔는지 적어 두십시오. 서로 다른 줄입니다. - 가격 히스토리를 찾으십시오. 어느 브로커, 어느 출처, 어느 기간인지입니다. 우리 기록에서 판정을 움직인 항목이 바로 이것이고, 틱 모델은 아니었습니다.
리포트가 실제로 찍는 이름을 그대로 써서, 읽기 전체를 표 하나에 담았습니다. 우리 집합에서 열은 공개된 실행 23건에 걸쳐 각 지표가 실제로 어땠는지입니다. 교과서적인 범위보다 이쪽이 낫습니다. 당신이 손에 들고 있는 것과 같은 종류의 리포트에서 측정한 값이기 때문입니다.
| 리포트 항목 | 그것이 답하는 질문 | 우리 집합에서 | 위험 신호 |
|---|---|---|---|
Total Trades: | 근거가 얼마나 있는가 | 실행당 108건에서 4,725건 | 100건 남짓 아래. 거래 20건 위의 비율은 소문입니다 |
Profit Factor: | 총이익을 총손실로 나눈 값(프로핏 팩터) | 23건 전체에서 1.22에서 1.59 | 짧은 구간에서 2.0 남짓 위. Total Trades:를 먼저 확인할 것 |
Profit Trades (% of total): | 승률 — 분포의 부호가 아니라 모양 | 30.80%에서 82.27%, 전부 수익 | 옆에 프로핏 팩터 없이 단독으로 인용된 경우 |
Total Net Profit: | 맥락 이전에, 벌어들인 금액 | 같은 10,000 USD 예치금에서 386.05에서 28,687.43 USD | Initial Deposit:와 햇수 없이 인용된 경우 |
Balance Drawdown Maximal: | 청산된 거래 기준 최악의 하락(최대 낙폭) | 0.67%에서 18.24% | 같은 페이지에 자산 줄이 있는데도 이쪽을 인용하는 경우 |
Equity Drawdown Maximal: | 열린 포지션까지 포함한 최악의 하락 | 23건 중 23건에서 잔고보다 깊음 | 무시되는 경우 — 당신의 증거금이 올라앉아 있는 수치입니다 |
Expected Payoff: | 거래 한 건당 평균 결과, 금액 기준 | 우리 매니페스트에는 없음 | 평균이 아니라 예측으로 읽는 경우 |
Recovery Factor: / Sharpe Ratio: | 고통 한 단위당 수익, 두 가지 방식 | 우리 매니페스트에는 없음 | 거래 건수가 다른 리포트끼리 비교하는 경우 |
History Quality: | 틱 계열이 당신의 손절을 분해할 수 있는가 | 23건 중 2건에만 기재 | 비어 있고 게다가 데이터 출처도 모르는 경우 |
그 블록에는 해석을 시작하기도 전에 사람들을 걸어 넘어뜨리는 관례가 둘 있습니다.
Total Trades:와 Total Deals:는 서로 다른 셈입니다. MetaTrader 5에서 한 번의 왕복은 두 개의 딜입니다. 들어갈 때 하나, 나올 때 하나입니다. 그래서 Total Trades: 50을 찍는 리포트는 그 옆에 Total Deals: 100을 찍고, 분할 청산은 거래를 늘리지 않은 채 딜만 늘립니다. 비율은 딜이 아니라 언제나 거래에 대고 읽으십시오.
낙폭 줄은 하나가 아니라 여섯 개입니다. 리포트는 잔고와 자산 각각에 대해 Absolute, Maximal, Relative를 찍습니다. 더 나쁜 것은 그중 둘 사이에서 금액과 비율의 자리가 뒤바뀐다는 점입니다. Balance Drawdown Maximal: 36.84 (0.37%)는 금액을 앞에 두고, Balance Drawdown Relative: 0.37% (36.84)는 비율을 앞에 둡니다. 두 리포트가 이웃한 줄에서 0.37%와 36.84를 각각 인용하고도 같은 사건을 뜻할 수 있습니다. 서로 다른 사건일 수도 있습니다.
Results 블록의 나머지 — Z-Score:, AHPR:, GHPR:, LR Correlation:, LR Standard Error:, Margin Level:, 그리고 MFE/MAE 상관 — 는 자산 곡선의 크기가 아니라 모양을 서술합니다. 그중 무엇도 거래 건수가 너무 적은 리포트를 구해 주지 못하고, 가격 히스토리가 바뀌었을 때 프로핏 팩터보다 더 잘 살아남지도 못합니다. 위의 다섯 단계를 마친 뒤에 읽거나, 아예 읽지 마십시오.
지표 줄 중 둘이 실제로 가장 큰 피해를 만들어 내므로, 차례로가 아니라 함께 읽으십시오.
순손익에는 분모와 달력이 함께 필요합니다. 우리 23건은 전부 같은 10,000 USD에서 시작하므로 유난히 비교하기 좋습니다. 그런데도 연 0.51%에서 57.38%까지 벌어집니다. 아래쪽 끝이 특히 교훈적입니다. orrery는 프로핏 팩터 1.46에 최대 낙폭 0.67%로, 카탈로그에서 가장 보기 좋은 한 쌍입니다. 그 실행이 7.58년 동안 번 돈은 386.05 USD입니다. 그 리포트에 정직하지 않은 구석은 없습니다. 대부분의 독자가 자기가 던지고 있다고 생각하는 질문과 다른 질문에 답하고 있을 뿐입니다.
여기서 승률과 프로핏 팩터는 사실상 독립입니다. 공개된 실행 23건에서 둘 사이의 상관은 0.37입니다. 따라서 EA가 돈을 버는지 아닌지를 결정하는 것의 대부분은 승률 줄에 보이지 않습니다. nautical은 거래의 30.80%를 이기고 프로핏 팩터 1.22를 냅니다. gyre는 82.27%를 이기고 1.59를 냅니다. 둘 다 수익이고, 두 승률은 51포인트 떨어져 있습니다.
리포트가 당신에게 보여 주지 않는 프로핏 팩터
이것은 어떤 리포트도 보여 주지 않는 부분이고, 우리가 우리 데이터로 이 글을 쓸 수 있었던 이유입니다. 공개된 실행은 모두 완전한 청산 거래 원장을 함께 보관하므로, 리포트마다 둘로 갈라집니다. EA를 고른 근거가 된 구간, 곧 등재 심사가 겨눈 개발 구간이 있습니다. 그리고 실전에 나간 뒤에 벌어진 거래들이 있는데, 이쪽에는 아무것도 맞춰 넣지 않았습니다. 우리 23건 중 20건이 두 구간을 모두 공개하고, 나머지 셋은 공개 후 구간이 아예 없습니다.
| EA | 개발 구간 | 공개 후 구간 | 대표 수치 |
|---|---|---|---|
orrery | 1.28 (거래 195건) | 6.43 (거래 15건) | 1.46 (거래 210건) |
windrose | 1.31 (거래 101건) | 3.58 (거래 7건) | 1.38 (거래 108건) |
cairn | 1.48 (거래 4,583건) | 1.64 (거래 142건) | 1.48 (거래 4,725건) |
gyre | 1.55 (거래 136건) | — (거래 5건, 손실 거래 없음) | 1.59 (거래 141건) |
tessera | 1.28 (거래 624건) | 0.88 (거래 21건) | 1.27 (거래 645건) |
zerqon | 1.53 (거래 232건) | 0.72 (거래 21건) | 1.43 (거래 253건) |
orrery 줄의 첫 열과 마지막 열을 함께 읽으십시오. 대표 수치는 1.46이라고 말하고, EA를 실제로 고른 구간은 1.28이라고 말합니다. 그 차이는 프로핏 팩터 6.43으로 돌아간 거래 15건, 곧 기록의 7%입니다. zerqon 줄을 같은 방식으로 읽으면 방향이 반대입니다. 개발 구간에서 1.53, 그 뒤 거래 21건에서 0.72, 그리고 둘 다 감추는 대표 수치 1.43입니다.
두 구간을 모두 공개하는 20건에서 대표 수치가 개발 구간보다 좋게 나온 것이 14건이고 나쁘게 나온 것이 6건입니다. 나머지 셋은 일부러 뺐습니다. 구간이 하나뿐이라 대표 수치와 개발 구간 수치가 정확히 같은 거래를 담고 있고, 따라서 둘의 차이는 애초에 모집단 효과가 아니기 때문입니다. 그것은 다시 계산한 원장에 대고 잰, 리포트 자신의 소수점 둘째 자리 반올림입니다. almanac은 원장이 1.5153으로 다시 계산되는 자리에 1.52를 찍습니다. 같은 반올림 하한을 그 20건에 적용해도 13건은 반올림으로 설명되지 않는 격차를 그대로 남기고, 그중 8건이 듣기 좋은 방향입니다.
그 비대칭은 스캔들이 아닙니다. 두 구간에 걸친 대표 수치는 그중 운이 좋았던 쪽으로 끌려가게 되어 있습니다. 다만 대표 수치는 미래의 행동에 대한 주장과 견줄 숫자가 결코 아니라는 뜻이기는 합니다.
함정: 이 숫자들이 사람을 속이는 방식
다섯 가지 밑에 깔린 실패 방식은 같은 하나입니다. 리포트는 모집단에 대한 측정이며, 페이지 위의 모든 지표는 테스터가 겨눈 모집단이 무엇이었든 그것을 말없이 물려받습니다.
개선: 각 읽기가 무엇을 바꾸라고 말하는가
한 번에 하나만 바꾸고, 매번 같은 세 수치를 다시 읽으십시오. 거래 건수, 프로핏 팩터, 자산 낙폭입니다. 아래 순서는 비용순입니다. 값싼 점검이 먼저인데, 그중 둘이 번번이 조사를 그 자리에서 끝내 주기 때문입니다.
- 거래 건수가 적다면 파라미터를 건드리지 말고 기간을 늘리십시오. 거래 100건 남짓 아래에서 만들어진 프로핏 팩터는 당신이 조정할 수 있는 어떤 설정보다 더 긴 구간에서 크게 움직입니다. 우리가 공개한 가장 작은 실행이 거래 108건이고, 그 비율을 우리가 가장 조심스럽게 인용하는 실행이기도 합니다.
- 대표 수치와 개발 구간이 어긋난다면 개발 구간만으로 다시 읽으십시오. 설정이 겨눠 고른 대상이 바로 그 수치입니다. 다른 어떤 후보와 견줄 것도 그쪽입니다.
- 자산 낙폭이 잔고 낙폭보다 한참 위에 있다면 자산 쪽 수치로 크기를 정하십시오. 그 격차가 EA가 같은 움직임 안으로 포지션을 몇 개나 들고 가는지를 말해 줍니다. chrysalis 실행은 그것을 그대로 적어 두었습니다. 한 번에 최대 일곱 개입니다.
- 리포트가 남의 데이터에서 나온 것이라면 다른 무엇보다 먼저 두 번째 출처에서 다시 돌리십시오. 우리 집합 전체에서 측정된 효과가 가장 큰 점검이고, 사람들이 가장 나중에 돌리는 점검입니다.
실제로 숫자를 움직인 것: 틱 모델이 아니라 데이터 소스
우리 EA 중 하나는 그 두 변수를 갈라내려고 일부러 다시 돌렸고, 실행 기록은 각 그림자 실행이 무엇을 분리하는지를 이름에 적어 두었습니다.
tidewell-slack 실행 | 무엇이 바뀌었는가 | 거래 | 프로핏 팩터 | 최대 낙폭 | 히스토리 품질 | 판정 |
|---|---|---|---|---|---|---|
| 공개본 | Exness M1 히스토리, Model 0 | 303 | 1.35 | 9.92% | 99% | PASS |
| 그림자 — 데이터 소스를 분리 | Dukascopy 히스토리, Model 0 | 351 | 1.13 | 18.18% | 99% | FAIL |
| 그림자 — 실제 틱을 분리 | Dukascopy 히스토리, Model 4 | 345 | 1.11 | 18.20% | 100% | FAIL |
서로 다른 두 실험으로 읽으십시오. 가격 히스토리만 바꾸자 — 첫 줄에서 둘째 줄로, 틱 모델은 같습니다 — 프로핏 팩터가 1.35에서 1.13으로 내려갔고, 낙폭은 거의 두 배가 되었으며, 판정이 통과에서 탈락으로 뒤집혔습니다. 그 새 히스토리 위에서 틱 모델만 바꾸자 — 둘째 줄에서 셋째 줄로 — 프로핏 팩터는 0.02, 낙폭은 0.02포인트 움직였습니다. 그리고 떨어진 두 실행의 히스토리 품질은 99%와 100%로 읽힙니다. 대부분의 사람이 걸러 내는 데 쓰는 그 항목은 내내 훌륭했습니다.
두 번째 EA가 다른 각도에서 같은 곳을 가리킵니다. kestrel-hover는 Dukascopy 실제 틱에서 프로핏 팩터 1.33에 낙폭 7.11%로 공개되어 있고, Exness M1 히스토리의 Model 0에서 돌린 그림자 실행은 1.30에 6.76%입니다. 출처와 모델이 한꺼번에 바뀌었는데도 결과는 거의 움직이지 않았습니다. 데이터 소스를 넘나드는 안정성은 있을 수 있는 일입니다. 다만 단 하나의 리포트가 보여 줄 수 있는 것이 아닐 뿐입니다.
실용적인 규칙은 이렇습니다. 리포트는 그 가격 히스토리가 옮겨 갈 수 있는 만큼만 옮겨 갈 수 있는 증거입니다. 두 번째 출처에서 다시 돌리는 데는 저녁 한 번이 듭니다. 우리 기록에서 이 글의 점검 중 실제로 결정을 바꾼 것은 그것 하나뿐입니다.
다음 단계: 리포트에서 결정으로
리포트를 잘 읽는 것은 네 단계 중 두 번째입니다. 순서는 백테스트 → 읽기 → 워크포워드 분석 → 데모이며, 각 단계가 서로 다른 방식의 오류를 하나씩 걷어냅니다. 네 단계를 모두 살아남은 리포트는 작은 포지션을 얻어낸 것이고, 앞의 둘을 살아남은 리포트는 테스트를 한 번 더 얻어낸 것입니다.
- 완전한 기록 위에서 연습하십시오. 공개된 EA는 저마다 완전한 청산 거래 목록과 실행 매니페스트를 함께 싣고 있으므로, 대표 수치를 직접 다시 계산해 어떤 거래가 그것을 만들어 냈는지 그대로 볼 수 있습니다. 읽는 법을 몸에 붙게 만드는 연습은 그것 하나입니다.
- 어떤 숫자가 당신을 테스트가 아니라 전략 쪽으로 돌려보낸다면, 규칙 자체가 바뀌는 자리는 Builder입니다. 설정을 훑는 탐색은 또 다른 작업이고, 파라미터 최적화에서 다룹니다.
- 방금 읽은 낙폭 수치로 무언가의 크기를 정하기 전에, EA 트레이더를 위한 리스크 관리가 그것을 예치금과 랏 크기로 바꿔 줍니다.
- 이 모든 것을 우리가 어떻게 만들고 채점하고 기록하는지는 검증 방법에 밝혀 두었습니다.
테스터에서의 과거 결과는 예측이 아니며, 위의 어떤 실행도 앞으로 12개월에 대한 약속이 아닙니다. 리포트를 제대로 읽는 목적은 예측보다 작고, 그래서 더 쓸모 있습니다. 무엇이 실제로 입증되었고 무엇이 그저 찍혀 나왔을 뿐인지를 알려 주는 것입니다.