리서치 › 백테스트를 읽는 법
백테스트 수익률을 올리는 일은 생각보다 훨씬 쉽습니다. 조건을 하나씩 바꿔가며 제일 좋게 나온 값을 고르면 됩니다. 저희도 실제로 그렇게 해서 30일 수익률을 +4.27%에서 +6.53%로 끌어올린 적이 있습니다. 그 과정을 그대로 공개하고, 그렇게 나온 숫자를 왜 믿으면 안 되는지 같은 데이터로 보여드립니다.
← 앞선 글: 5년 평균 +5.37%는 두 해가 만들었다기준(BASE)이 된 조건은 이렇습니다. 시가총액 5,000억 이상·거래대금 상위 50위 종목 중 장기 추세가 살아 있고(종가 > 200일선, 60일선 > 200일선) 최근 10일 안에 RSI가 45 아래로 눌렸다가 20일선을 상향 돌파한 날에 사는 조건입니다. 5년 성적은 30일 보유 +4.27%, 승률 48.5%였습니다.
여기서 파라미터를 계열별로 하나씩만 바꿔가며 22가지 설정을 돌렸습니다.
| 설정 | 신호수 | 30일 수익 | 승률 |
|---|---|---|---|
| RSI<40, 10일, 돌파 | 349 | +4.13% | 47.1% |
| RSI<45, 10일, 돌파 (BASE) | 762 | +4.27% | 48.5% |
| RSI<50, 10일, 돌파 | 1,165 | +3.41% | 48.3% |
| RSI<45, 5일, 돌파 | 598 | +3.10% | 47.9% |
| RSI<45, 20일, 돌파 | 851 | +4.71% | 49.2% |
| RSI<50, 20일, 20일선 위 유지 | 9,887 | +5.42% | 48.8% |
| 설정 | 신호수 | 30일 수익 | 승률 |
|---|---|---|---|
| 중20 / 장60 | 544 | +3.45% | 46.9% |
| 중20 / 장120 | 674 | +5.40% | 51.8% |
| 중60 / 장120 | 696 | +5.79% | 51.2% |
| 중60 / 장200 (BASE) | 762 | +4.27% | 48.5% |
| 중120 / 장200 | 756 | +4.51% | 48.4% |
| 설정 | 신호수 | 30일 수익 | 승률 |
|---|---|---|---|
| 거래대금 상위 30 | 486 | +3.70% | 47.9% |
| 상위 50 (BASE) | 762 | +4.27% | 48.5% |
| 상위 100 | 1,397 | +4.70% | 50.2% |
| 제한 없음 | 4,363 | +4.09% | 51.0% |
이제 각 계열에서 가장 좋았던 값만 골라 합칩니다. 그러면 이렇게 됩니다.
| 설정 | 신호수 | 30일 수익 | 승률 |
|---|---|---|---|
| BASE | 749 | +4.27% | 48.5% |
| 개선A — 중60장120 · 상위100 · 20일선 위 | 5,648 | +5.38% | 51.1% |
| 개선B — A + 눌림 룩백 20일 | 11,643 | +6.02% | 51.3% |
| 개선C — B + 게이트 강화 | 10,468 | +6.53% | 52.5% |
수익률 +53%, 승률 +4.0%p 상승입니다. 발표 자료로 쓰기 딱 좋은 그림이고, 실제로 이런 형태의 표는 유료 강의나 종목 추천 서비스에서 흔히 보입니다.
세 가지가 걸립니다.
22가지 설정을 2021~2026년 데이터로 돌려보고, 그중 제일 좋은 것을 골라서, 같은 2021~2026년 성적을 성과로 적었습니다. 시험 문제를 미리 보고 답을 고른 뒤 그 시험 점수를 실력이라고 말하는 것과 구조가 같습니다.
설정을 22개 시도하면 그중 가장 좋은 하나는 실력이 아니라 우연으로도 꽤 좋게 나옵니다. 시도 횟수가 많을수록 1등의 성적은 부풀려집니다.
왜 그런지는 간단합니다. 아무 효과도 없는 조건 22개를 돌려도 성적은 우연히 흩어집니다. 어떤 것은 평균보다 위, 어떤 것은 아래에 놓입니다. 거기서 가장 위에 있는 하나를 고르면 그 값은 정의상 평균보다 높습니다. 조건이 좋아서가 아니라 고르는 행위 자체가 높은 쪽을 집어 올리기 때문입니다. 저희가 한 일이 정확히 그것입니다 — 계열마다 1등을 뽑아서 합쳤습니다.
이 편향을 걷어내는 방법은 정해져 있습니다. 튜닝에 쓰지 않은 기간을 미리 떼어 두고, 조건을 다 고른 뒤 그 기간에서 한 번만 확인하는 것입니다. 거기서도 성적이 유지되면 우연이 아닐 가능성이 커집니다. 저희는 그러지 않았습니다. 위 표에는 그 검증이 빠져 있고, 그래서 +6.53%는 "이 조건의 실력"이 아니라 "이 5년에 가장 잘 맞았던 설정의 성적"입니다.
신호수를 보면 BASE는 5년간 749건인데 개선C는 10,468건입니다. 14배입니다. "개선"의 상당 부분은 조건이 정교해진 게 아니라 느슨해진 것입니다. 20일선을 "돌파한 날"에서 "위에 있는 동안"으로, 룩백을 10일에서 20일로, 유니버스를 상위 50에서 100으로 넓혔습니다.
느슨해진 게 무조건 나쁘다는 뜻은 아닙니다. 오히려 표본이 늘어 추정이 안정된 이점은 실제로 있습니다. BASE는 2022년 한 해 신호가 9건뿐이었습니다. 9건으로 낸 그해 수익률 −3.93%는 사실상 아무것도 말해주지 않습니다. 그런 불안정한 기준선과 비교해서 이긴 것을, 조건이 좋아졌다고 부르기는 어렵습니다.
이게 가장 중요합니다. 네 설정의 30일 수익률을 연도별로 나란히 놓으면 이렇습니다.
| 연도 | KOSPI | BASE | 개선A | 개선B | 개선C |
|---|---|---|---|---|---|
| 2022 | −25.2% | −3.93% | +2.10% | −0.93% | −0.91% |
| 2023 | +19.3% | −3.53% | −0.97% | +0.49% | +0.73% |
| 2024 | −10.1% | +4.83% | +1.84% | +1.15% | +1.78% |
| 2025 | +75.7% | +10.91% | +13.90% | +14.30% | +14.48% |
| 2026 | +52.3% | +1.79% | +4.65% | +7.27% | +8.35% |
| 전체 | — | +4.27% | +5.38% | +6.02% | +6.53% |
2026년은 9월 2일까지. KOSPI는 연초 종가 대비 연말(또는 최근) 종가 기준.
2024년에는 개선이 오히려 손해였습니다. BASE가 +4.83%인데 개선C는 +1.78%로 절반 아래입니다. 2022년도 개선A가 유일하게 플러스였고 B·C는 다시 마이너스로 내려갔습니다. 단조롭게 좋아진 해는 2023·2025·2026년뿐입니다.
그리고 전체 격차 +2.26%p가 어디서 왔는지 보면, 2025년(+3.57%p)과 2026년(+6.56%p)입니다. 앞선 글에서 본 것과 같은 구조입니다. 개선의 이득도 결국 두 강세장에 몰려 있습니다.
"매년 더 좋아진 조건"이 아니라 "강세장에서 더 크게 벌고 2024년에는 더 못 번 조건"입니다. 5년을 통으로 평균 내면 앞의 문장이 뒤의 문장을 덮어버립니다.
현재 전략 페이지에 공개 중인 정배열 눌림목은 이 과정에서 나온 조건의 후손입니다. 다만 개선C 그대로는 아니고 게이트와 회복 조건을 조정한 형태이며, 표시하는 숫자도 절대수익 하나가 아니라 승률·평균·중앙값·리프트·연도별 성적을 함께 놓았습니다. 한 줄로 요약될수록 위험하다고 보기 때문입니다.
파라미터 탐색 자체가 잘못이라는 이야기는 아닙니다. 어떤 조건이 어느 방향으로 민감한지 아는 것은 필요합니다. 문제는 탐색 결과의 최고값을 그대로 성과로 발표하는 것입니다.
남의 백테스트든 저희 것이든, 이 세 가지를 물으면 대부분 걸러집니다.
screen_sweep.py, 연도별 대조는 screen_yearly_compare.py로 계산했습니다. 두 스크립트 모두 공개되어 있습니다