MT5에서 백테스트를 돌리는 방법은 View > Strategy Tester(또는 Ctrl+R)로 전략 테스터를 열고, 엑스퍼트 어드바이저와 심볼, 시간 프레임, 날짜 범위, 모델링 모드를 고른 뒤 Start를 누르는 것입니다. 5분 뒤면 리포트가 손에 들어옵니다. 정작 급한 질문은 거기까지 가는 법이 아닙니다. 그 리포트의 숫자들 중 무엇이 당신이 생각하는 그 뜻인가입니다.
이 글은 양쪽을 모두 다룹니다. 절차, 그리고 읽는 법입니다. 이 페이지의 근거가 나오는 곳은 읽는 법 쪽입니다. 완료된 실행 23건이 파일로 남아 있고, 그 리포트들은 거의 아무도 확인하지 않는 방식으로 스스로와 어긋나 있기 때문입니다.
완료된 실행에서 손에 남는 것
산출물은 두 부분으로 이루어진 리포트입니다. 결과 블록(거래 건수, 프로핏 팩터, 낙폭, 순손익)과 그 뒤에 붙은 거래 목록입니다. 둘 다 중요한데, 인용되는 것은 언제나 앞쪽뿐입니다.
끝에 가서 할 수 있어야 하는 말은 “3,023달러를 벌었다”가 아닙니다. 이 규칙 집합이, 이 심볼과 시간 프레임에서, 이 기간 동안, 이 틱 모델로, 10,000 USD 계좌 위에서, 이만큼의 거래를 냈고, 프로핏 팩터는 이 값이었으며, 가장 나빴을 때 이만큼 물속에 잠겨 있었다입니다. 이 문장의 모든 절은 당신이 고른 설정이고, 그중 어느 하나만 바꿔도 답이 바뀝니다. 여기서 절차보다 설정을 먼저 다루는 이유입니다.
설정: 답을 결정하는 데이터와 값들
실제로 우리가 돌려서 공개한 실행 하나를 입력값과 출력값을 나란히 놓고 볼 수 있도록 인용합니다. 5분봉 차트의 롱 전용 USD/JPY 전략인 Stillwater 뒤에 있는 기록입니다.
| 설정 | 이 실행 | 왜 그렇게 두었는가 |
|---|---|---|
| Expert | Stillwater (입력값 19개) | 리포트가 지니고 있다고 검증된 모든 입력값 — 재현하려면 다시 입력해야 하는 표면 전체 |
| Symbol | USDJPY_DUKA | 실시간 호가 심볼과 분리해 둔 전용 틱 히스토리 심볼이라 실행을 반복할 수 있음 |
| Period | M5 | 규칙이 평가되는 차트. 추세 필터는 EA 안에서 M30을 읽음 |
| Date range | 2019-01-01 → 2026-07-01 | 7.5년, 국면이 하나 이상 들어갈 만큼 긴 구간 |
| Modelling | Every tick based on real ticks (Model 4) | 당일 안에서 거래하는 것이라면 봉 내부 경로를 보간이 아니라 실측해야 함 |
| Deposit | 10,000 USD | 여기 모든 실행에서 고정하여 낙폭 비율을 서로 비교할 수 있게 함 |
| Leverage | 요청 1:500 — 실제로는 1:100으로 실행됨 | 아래 참조. 이 줄은 보이는 그대로가 아님 |
| Optimisation | Disabled | 단일 패스. 파라미터 탐색은 함정이 다른 별개의 작업 |
이 중 두 줄은 표의 한 칸보다 더 많은 설명이 필요합니다.
데이터 품질은 결과 전체가 올라앉는 설정입니다. 리포트의 다른 모든 수치는 테스터가 쓴 가격 계열 위에서 계산되므로, 모델링 품질 수치가 리포트의 나머지가 애초에 당신 전략에 관한 이야기인지를 규정합니다. 위 실행의 공개 기록은 실제 틱 229백만 개에 대해 히스토리 품질 100%라고 적고 있으며, 테스터 리포트에서 그대로 읽은 값입니다. 보간된 봉 데이터로 돌렸다면 체결가만 달라지는 것이 아니라 거래 집합 자체가 달라졌을 것입니다. 테스터는 자기가 아는 가격들 사이를 매끄러운 경로로 잇는다고 가정하는데, 손절이 촘촘한 전략은 바로 그 가정 위에서 매매하기 때문입니다. 터미널이 그 심볼에 대해 실제로 어떤 틱 데이터를 들고 있는지 아직 읽어 보지 않았다면, 전략보다 먼저 확인할 것이 그것입니다.
레버리지 칸은 설정이 아니라 요청입니다. 파일로 남은 23건 모두에서 테스터에 1:500을 요청했고 테스트는 1:100으로 돌았습니다. 요청한 수치가 효력을 가진 것은 0건, 전체 23건 중 단 하나도 없었습니다. 칸을 되읽어 본 추측이 아닙니다. 테스트 안에서 포지션이 실제로 소모한 증거금 126.39 USD를 측정해 못 박은 것이고, 이는 레버리지 100 계산과 일치하며 500 계산과는 맞지 않습니다. 실질적인 결과는 이렇습니다. 증거금에 민감한 설계 — 그리드, 마틴게일, 포지션을 쌓는 모든 것 — 는 실제로는 결코 만나지 못할 레버리지에서 백테스트를 통과할 수도 있고, 쓰지도 않았을 레버리지에서 떨어질 수도 있습니다. 입력한 칸을 믿는 대신 리포트의 증거금 수치를 자기 계산과 대조하십시오.
단계별로 MT5에서 테스트 돌리기
- View > Strategy Tester(
Ctrl+R)를 엽니다. 패널은 터미널 아래쪽에 도킹되며 Settings, Inputs, Agents, Journal이 탭으로 붙어 있습니다. - Settings 탭에서 엑스퍼트 어드바이저를 고르고, 이어서 Symbol과 Period를 고릅니다. 실제로 매매할 심볼을 고르십시오. 가격만이 아니라 사양이 거기서 오고, 같은 통화쌍이라도 브로커의 변종에 따라 계약 크기와 증거금 규칙이 다릅니다.
- 날짜 범위를 정합니다. “Last month” 같은 것 대신 From과 To를 명시한 사용자 지정 기간을 쓰십시오. 그래야 당신의 리포트만 읽은 사람도 실행을 재현할 수 있습니다.
- Modelling 모드를 고릅니다. 당일 매매성이면 Every tick based on real ticks, 느린 시스템이면 M1 봉에서 생성한 Every tick입니다. 더 거친 모드들은 파라미터를 훑을 때 쓰는 것이지, 공개할 수치를 낼 때 쓰는 것이 아닙니다.
- Deposit과 통화, 레버리지를 정하고 첫 패스에서는 Optimisation을 꺼 두십시오. 요청한 레버리지를 적어 두십시오 — 가정하는 대신 리포트의 증거금 수치와 대조해 확인하게 됩니다.
- Inputs 탭을 열고 모든 값을 읽으십시오. 지난 실행의 수정 내역을 말없이 물고 오는 탭이 바로 이것이며, 우리 기록이 입력값을 불러왔다고 믿은 파일이 아니라 완료된 리포트와 대조해 검증하는 이유입니다. 이 집합의 한 실행은 입력값을 362개 지니고 있습니다.
- Start를 누릅니다. 진입 로직을 디버깅하는 중이 아니라면 Visual mode는 꺼 두십시오. 훨씬 느리고, 측정하는 대신 구경하고 싶게 만듭니다.
- 끝나면 Results, Graph, Backtest 탭을 열고, 리포트 안에서 우클릭해 저장하십시오. 나중에 비교하게 되는 것은 자산 곡선 스크린샷이 아니라 저장된 리포트입니다.
- 결과와 함께 터미널 빌드를 기록해 두십시오. 우리 23건은 빌드 6090과 6140에 걸쳐 있습니다. 같은 전략을 서로 다른 빌드에서 돌린 두 실행이 자동으로 같은 실험이 되지는 않습니다.
- 그 심볼이 실제로 어떤 히스토리를 들고 있는지 확인한다
- 보유 시간에 맞춰 모델링 모드를 고른다
- 심볼, 기간, 명시적인 날짜 범위를 정한다
- Inputs 탭의 모든 값을 읽는다
- 최적화를 끈 채로 한 번만 돌린다
- 스크린샷이 아니라 리포트를 저장한다
- 수익 줄보다 낙폭 두 줄을 먼저 읽는다
결과 읽기: 리포트의 숫자가 실제로 뜻하는 것
같은 실행의 출력을 보겠습니다. 돌아온 값은 이렇습니다.
| 결과 | 값 | 계속 가기 전에 넘어야 하는 선 |
|---|---|---|
| Total trades | 416 | 평균이 일화가 아니라 표본을 설명한다고 할 만큼의 수 |
| 프로핏 팩터 | 1.28 | 반영하지 않은 비용을 견디고도 1.0을 넘길 만한 여유 |
| Net profit | 3,023.01 USD | 예치금 10,000 기준 — 점수가 아니라 수익률 |
| Balance drawdown | 5.82% (747.57) | 청산된 거래 기준 최악의 하락 |
| Equity drawdown | 6.11% (787.60) | 열린 포지션까지 포함한 최악의 하락 — 당신이 실제로 지켜봤을 쪽 |
| Win rate | 60.82% | 단독으로는 무의미. 여기서는 손절 100핍, 목표 200핍과 함께 읽을 것 |
| 검증 조건 | |
|---|---|
| 실험 ID | EXP-BACKTEST-RUNBOOK-001 |
| 실행 ID | stillwater__gate_v2_duka_realticks__2019-01-01_2026-07-01 |
| MT5 빌드 | 6140 |
| 계약 사양 | Exness-MT5Trial5 |
| 심볼 / 시간 프레임 | USDJPY_DUKA M5 |
| 기간 | 2019-01-01 – 2026-07-01 |
| 모델 | Every tick based on real ticks (Model 4) |
| 예치금 | 10,000 USD |
| 요청 레버리지 | 1:500 |
| 실제 레버리지 | 1:100 |
| 측정 | 2026-08-23 |
| 최종 검증 | 2026-08-25 |
그 리포트에서 늘 잘못 읽히는 것이 셋 있습니다.
낙폭 두 줄은 서로 다른 질문입니다. 잔고 낙폭은 청산된 거래로 이루어진 자산 곡선을 재고, 자산 낙폭은 아직 열려 있던 포지션의 평가손익까지 포함합니다. 우리 23건 전부에서 자산 쪽이 더 깊었고, 그 격차의 크기는 전략 설명만 봐서는 예측할 수 없습니다. 가장 좁았던 것이 0.04포인트(0.67% 대 0.71%)였고 가장 넓었던 것이 11.10포인트(14.52% 대 25.62%, 비율로 1.76)였습니다. 빠르게 청산하는 전략은 격차가 작습니다. 불리한 움직임을 깔고 앉아 버티는 전략은 격차가 크고, 자금을 넣기 전에 낙폭을 가장 알아야 할 전략이 바로 그런 전략입니다.
MT5는 각 낙폭을 두 가지 정의로 두 번 찍습니다. Maximal 낙폭은 금액이 가장 컸던 순간에 측정되고, Relative는 비율이 가장 컸던 순간에 측정됩니다. 같은 실행 안의 서로 다른 순간이므로 두 수치는 한 사건을 두 각도에서 본 것이 아닙니다. 우리 실행 중 16건이 Maximal 정의로, 5건이 Relative로 기록되어 있으며, 그 기록을 쓰는 파이프라인은 Maximal 잔고 수치와 Relative 자산 수치를 짝지어 놓기를 거부합니다. 둘을 함께 보여 주는 페이지는 서로 다른 두 순간을 비교하는 셈이기 때문입니다. 낙폭을 인용할 때는 정의도 함께 밝히십시오.
리포트 자신의 합계는 반올림되어 있고, 그 기간이 당신이 뜻하는 기간이 아닐 수도 있습니다. 공개된 거래 목록에서 다시 계산하면 같은 실행의 프로핏 팩터는 리포트의 1.28이 아니라 1.2843입니다. 여기서는 무해하지만, 소수 셋째 자리에서 갈리는 후보 둘을 비교할 때는 무해하지 않습니다. 더 중요한 것은, 그 416건짜리 실행이 2026-04-01 공개 기준일까지의 404건과 그 이후의 12건으로 갈린다는 점입니다. 뒤쪽 12건의 프로핏 팩터는 2.3317이었습니다. 어느 쪽도 틀리지 않았습니다. 서로 다른 질문에 답할 뿐이고, 그 기준일은 테스터가 찍어 준 무엇이 아니라 사람이 고른 날짜입니다. 한 실행을 “내가 맞춰 넣은 부분”과 “그러지 않은 부분”으로 나눌 생각이라면, 뒤쪽을 들여다보기 전에 선이 어디인지 먼저 적어 두십시오. MT5 백테스트 리포트 읽는 법이 실행 23건 전부에 그 나눔을 적용해, 대표 수치가 얼마나 움직이는지를 보여 줍니다.
실행을 조용히 무효로 만드는 함정
개선하기: 하나만 바꾸고, 다시 돌리고, 비교하기
이 반복은 일부러 지루합니다. 변수를 하나만 바꾸고, 다시 돌리고, 두 결과를 모두 적어 두십시오. 한꺼번에 둘을 바꾸면 차이를 어느 쪽에도 귀속시킬 수 없습니다.
실행 한 번당 가장 많은 정보를 주는 순서는 이렇습니다.
- 전략보다 기간을 먼저 바꾸십시오. 2019
2022와 20222026을 따로 돌려 보십시오. 두 절반이 어긋난다면 그 파라미터는 한 시기를 설명하고 있는 것이며, 아무리 손봐도 고쳐지지 않습니다. - 심볼을 바꾸십시오. 한 통화쌍에서만 통하는 규칙은 그 통화쌍에 관한 사실입니다. 우리 집합이 USD/JPY, EUR/GBP, AUD/CAD, NZD/USD와 지수 하나, 암호화폐 쌍 하나에 걸쳐 같은 큰 접근법들을 담고 있는 이유가 정확히 이것입니다.
- 모델링 모드를 바꾸십시오. 살아남은 후보를 더 거친 모델에서 다시 돌리십시오. 결과가 무너진다면 그 우위는 봉 안쪽에 살고 있었던 것이고, 봉 내부 경로는 어떤 시뮬레이션에서든 가장 믿기 어려운 부분입니다.
- 그런 뒤에야 파라미터를 바꾸십시오 — 그리고 찾아 헤매서 얻어야 했던 설정은 미리 정해 둔 설정보다 약한 주장으로 다루십시오.
어떤 변경이 앞선 실행들의 잡음 범위 밖으로 결과를 더 이상 움직이지 못할 때, 또는 마지막 리포트가 한 말 때문에 설정을 고르고 있는 자신을 발견할 때 반복을 멈추십시오. 두 번째가 진짜 정지 조건이고, 사람들이 예상하는 것보다 일찍 찾아옵니다. 여기서는 백테스트 분석기가 쓸모 있습니다. 저장된 리포트의 대표 수치를 도로 읽어 주기 때문에, 두 실행을 비교하는 일이 기억이 아니라 산수가 됩니다.
다음 단계: 실전에 나가기 전에 포워드 테스트
깨끗한 백테스트 한 번은 결승선이 아니라 네 단계 중 첫 번째입니다.
규칙에 탐색할 값어치가 있는 파라미터가 있다면 최적화하십시오. 이긴 패스가 아니라 탐색 범위 전체를 기록하십시오. 찾아 헤매서 얻은 결과는 그 탐색에 관한 증거이고, 얼마나 열심히 찾았는지를 읽는 사람에게 말해 주는 것은 범위 쪽입니다. 파라미터 최적화가 그 패스를 따라가면서 기록으로 남은 우리 탐색 8건을 읽습니다. 조합 116개, 그리고 우리가 내보낼 만한 설정은 하나도 없었습니다.
그다음 워크포워드로 넘어가십시오. 한 구간에서 맞추고, 다음 구간에서 측정하고, 반복하십시오. 네 단계 중 과최적화를 정면으로 치는 유일한 단계이며, 더 긴 백테스트보다 값어치가 큰 이유가 그것입니다.
그다음 데모 계좌에서 포워드 테스트하십시오. 지연 시간, 리쿼트, 실제 스프레드 확대가 마침내 실험에 들어오는 곳이 여기입니다. 전략이 지는 것도 회복하는 것도 지켜볼 만큼 충분히 오래 돌리십시오. 정작 필요한 숫자는 수익률이 아니라, 위에서 측정한 낙폭을 당신이 견디고 앉아 있을 수 있는가이기 때문입니다.
그리고 결정하십시오. 어느 정도의 손실이면 이것을 끌 것인지 미리 적어 두십시오. 자금을 넣기 전에 정한 중단 기준은 결정이고, 낙폭 한가운데서 정한 것은 반응입니다.
직접 돌리기 전에 완성된 참고 사례를 보고 싶다면, 공개된 EA 카탈로그의 모든 항목에 완전한 청산 거래 목록과 낙폭 두 줄, 그 뒤의 실행 매니페스트가 붙어 있고, 검증 방법은 그 기록들이 지켜야 하는 기준을 밝힙니다. 나머지 백테스팅 가이드는 이 페이지가 가리키기만 한 최적화와 워크포워드 단계를 더 깊이 다룹니다. 여기 어디에도 결과에 대한 약속은 없습니다. 이 페이지의 모든 수치는 이미 벌어진 실행을 서술할 뿐입니다.