백테스트 실험

미너비니 방식을 국내 주식 11년 데이터로 백테스트해 봤다: 겉으로는 KOSPI를 크게 앞서는데

readtest 2026. 10. 1. 07:06
반응형

정정 안내 (2026-10-03): 백테스트를 다시 점검하다가 국내 주가 데이터의 거래량이 액면분할 전후로 보정되지 않은 문제를 발견했다. 분할 직후 거래량이 부풀려져 "거래량을 동반한 돌파"로 잘못 잡힌 신호가 섞여 있었다. 분할과 장기 거래정지 이후 구간을 제외하고 다시 계산해서, 이 글의 수치를 모두 바꿨다. 기본 규칙의 연 수익률은 21.4%에서 18.9%로 낮아졌고, 결론(성과가 설정과 시기에 크게 의존한다)은 더 분명해졌다. 점검 과정은 별도 글에 정리했다.

앞선 글에서 마크 미너비니의 『초수익 성장주 투자』를 읽고 후기를 남겼다. 책의 방식이 실제 데이터에서는 어땠을지 궁금해서, 국내 주식 전 종목을 대상으로 직접 백테스트해 봤다. 먼저 결론부터 말하면, 겉으로 드러난 성과는 좋았지만 조건을 조금만 바꿔도 크게 흔들렸고, 현실적인 비용을 넣으면 KOSPI와 비슷해졌다.

앞선 글: 미너비니 『초수익 성장주 투자』 후기

먼저 밝혀 둘 것

  • 종목 추천이나 투자 권유가 아니다. 어떤 종목도 언급하지 않는다.
  • 이 실험은 책의 기술적 조건(추세, 돌파, 손절)만 구현한 것이다. 이익 성장 같은 펀더멘털 조건은 이후 글(연간, 분기)에서 따로 검증했다.
  • 일부 설정값(과열 상한, 추적 기준 등)은 같은 데이터를 보면서 조정한 것이라, 결과가 실제보다 낙관적일 수 있다. 이 점은 아래에서 따로 다룬다.

어떻게 테스트했나

기간 2015년 6월 ~ 2026년 9월 (약 11.3년)
대상 현재 상장된 보통주 2,472개 중, 매일 그날 기준 거래대금 상위 300종목 (미래 정보를 쓰지 않도록 시점별로 고름)
종목 조건 장기 상승 추세 조건(이동평균 정렬, 저점 대비 상승, 고점 근접)을 충족하고, 상대강도(최근 수익률 기준)가 대상 300종목 중 상위 30% 이내인 종목
진입 직전 20일 고가를 넘는 돌파 + 거래량이 평균의 1.5배 이상. 신호는 종가 기준이고, 체결은 다음 날 시가
시장 필터 KOSPI와 KOSDAQ이 모두 50일선 위에 있을 때만 신규 진입
운용 최대 10종목 동일 비중
청산 매수가 대비 -10% 손절. 수익이 +10%를 넘으면 손절선을 본전 이상으로 올리고, +25%를 넘으면 50일선 근처를 따라가는 추적 손절로 전환. 손절가 아래로 갭하락하면 시가에 체결
비용 수수료, 매도 시 거래세 0.20%, 슬리피지 0.1% (아래에서 0.3%, 0.5%도 시험)
데이터 보정 액면분할·병합이나 장기 거래정지 뒤 거래가 재개된 날부터 60거래일은 거래량을 쓰지 않았다(거래량이 분할 보정되지 않은 데이터 문제)
비교 대상 KOSPI 지수

결과 1. 기본 규칙

구분 연 수익률 최대 낙폭 샤프 승률 손익비(PF) 평균 이익 / 평균 손실 거래 수
구현 규칙 18.9% -31.9% 0.83 42.9% 1.96 +21.3% / -9.1% 681
KOSPI 10.8% -43.9% 0.57 - - - -

수익률은 KOSPI보다 연 8%p 높았고 낙폭은 더 작았다. 승률은 43%로 절반이 안 되지만, 이긴 거래의 평균 이익(+21%)이 진 거래의 평균 손실(-9%)보다 두 배 넘게 커서 전체적으로 수익이 났다. "작게 잃고 크게 버는" 추세 추종의 전형적인 모습이다.

결과 2. 슬리피지가 커지면

슬리피지(매수·매도 각각) 연 수익률 최대 낙폭 샤프 손익비(PF)
0.1% 18.9% -31.9% 0.83 1.96
0.3% 15.0% -39.8% 0.70 1.68
0.5% 10.9% -43.6% 0.55 1.48

슬리피지는 체결 가격이 기대와 어긋나는 정도다. 돌파 매매는 가격이 튀는 순간에 사기 때문에 이 영향이 크다. 0.5%가 되면 수익률은 10.9%까지 떨어져 KOSPI(10.8%)와 같아지고, 낙폭도 KOSPI와 비슷해진다. 소형주가 많이 섞인 전략이라면 0.3~0.5%도 비현실적인 가정이 아니다.

결과 3. 어느 시기의 덕을 봤나

구간 구현 규칙 연 수익률 KOSPI 연 수익률
2015-06 ~ 2019 4.4% 1.0%
2020 ~ 2022 1.7% 0.9%
2023 ~ 2026-09 59.2% 34.8%
2026년 제외 (~2025) 14.9% 6.8%
2024년 이후 제외 (~2023) 9.0% 2.8%
연도 구현 규칙 KOSPI 연도 구현 규칙 KOSPI
2015 -9.5% -6.7% 2021 -6.3% +3.6%
2016 +24.7% +3.3% 2022 -18.8% -24.9%
2017 +19.0% +21.8% 2023 +62.2% +18.7%
2018 -16.3% -17.3% 2024 +32.6% -9.6%
2019 +8.5% +7.7% 2025 +57.4% +75.6%
2020 +39.1% +30.8% 2026(9월까지) +62.3% +59.6%

구간별로는 모두 KOSPI를 앞섰지만, 2015~2022년의 앞선 폭은 연 1~3%p에 불과했다. 2023년 이후의 강세장이 전체 성과를 크게 끌어올렸다. 2024년 이후를 빼면 연 9.0%로 내려간다. 또 2017년, 2021년, 2025년처럼 시장이 강한 해에는 오히려 KOSPI보다 못했다.

결과 4. 설정을 조금 바꾸면

설정 연 수익률 최대 낙폭 샤프 슬리피지 0.3%일 때
기본 (상위 300종목, 10종목 보유) 18.9% -31.9% 0.83 15.0%
대상 상위 200종목 10.8% -32.0% 0.59 8.5%
대상 상위 400종목 21.9% -31.2% 0.92 16.2%
6종목 보유 25.7% -34.6% 0.92 18.8%
15종목 보유 13.9% -31.1% 0.73 13.6%

거래대금 상위 200종목으로 줄이면 수익률이 10.8%로 KOSPI와 같아졌다. 같은 전략인데 대상 범위를 바꿨을 뿐이다. 더 눈에 띄는 것은 설정값을 바꿔 본 결과다. 진입 조건 중 과열 상한(50일선 대비 얼마나 벌어진 종목까지 살지)과 상대강도 하한을 바꿔서 20가지 조합을 돌려 봤다.

  • 연 수익률은 0.7%에서 21.7%까지 퍼졌고, 중앙값은 12.4%였다.
  • KOSPI(10.8%)를 이긴 조합은 20개 중 12개였다.
  • 내가 쓴 기본 설정(과열 상한 30%, 상대강도 70)은 가장 좋은 구역(과열 상한 30%) 안에 있었다. 같은 상대강도 70에서 과열 상한을 20%나 40%로 바꾸면 12.2%, 14.1%로 내려갔다.

좋은 성과가 나온 설정 주변이 넓게 좋았던 것이 아니라 좁은 구간에서만 좋았다는 뜻이고, 같은 데이터로 설정을 골랐다는 점을 감안하면 18.9%도 낙관적인 숫자로 봐야 한다. 설정을 고를 때 쓴 2015~2020년 구간은 연 9.9%, 그 이후(2021년~)는 28.2%였다. 이후 구간에서도 KOSPI를 넘었지만 시장 전체가 같이 좋아진 시기라서, 설정이 잘 일반화된다는 증거로 보기는 어렵다.

결과 5. 사라진 종목이 있다면 (생존 편향 근사)

이 테스트는 지금 상장된 종목만 대상이라, 그동안 상장폐지되거나 거래정지된 종목은 빠져 있다. 돌파 매매는 급등하는 소형주를 많이 사기 때문에 그런 사고를 겪었을 가능성이 있다. 전체 거래 중 일부가 -60% 손실로 끝났다고 가정하고 근사해 봤다. (포지션 비중은 종목당 1/10로 보고 무작위로 30번 반복한 평균이며, 정확한 재계산이 아니라 근사치다.)

-60% 사고로 끝난 거래 비율 연 수익률(평균) 범위
0% (기본) 18.9% -
0.5% 16.4% 10.8% ~ 18.9%
1% 14.1% 4.9% ~ 17.7%
2% 10.1% -1.2% ~ 14.2%

이 결과를 어떻게 읽을까

  1. 책의 기술적 조건만으로도 KOSPI를 앞서는 구간이 많았다. 작게 잃고 크게 버는 구조가 실제로 작동했다.
  2. 하지만 기대 수익은 숫자보다 훨씬 낮게 봐야 한다. 슬리피지 0.5%에서 10.9%, 사고 종목 2% 가정에서 10.1%, 2024년 이후 제외 시 9.0%였다. 현실적인 조건을 겹치면 KOSPI와 비슷한 연 10% 안팎이 더 안전한 기대치로 보인다.
  3. 결과가 설정, 시기, 데이터에 민감했다. 대상 범위, 보유 종목 수, 진입 조건 몇 가지만 바꿔도 1%에서 26%까지 흔들렸고, 데이터 한 가지(분할 종목의 거래량)를 바로잡자 2.5%p가 달라졌다. 튜닝이 잘 된 전략이라기보다 같은 데이터에 맞춘 전략일 가능성을 열어 둬야 한다.
  4. 손절 규칙과 시장 필터가 낙폭 관리에는 도움이 된 것으로 보인다. 최대 낙폭(-32%)이 KOSPI(-44%)보다 작았고, 평균 손실(-9%)도 손절선(-10%) 안쪽이었다. (다만 갭하락 때는 손절선보다 큰 손실이 난 거래도 있었다.)

한계

  • 펀더멘털 미포함: 이 글은 기술적 조건만의 결과다. 펀더멘털 조건은 별도 글에서 다뤘다.
  • 설정 튜닝: 일부 설정값을 같은 기간의 데이터로 조정했다.
  • 생존 편향: 상장폐지 종목이 없다. 위 근사는 대략적인 추정일 뿐이다.
  • 체결 가정: 일봉 기준이라 상한가·하한가 근처의 체결 불가 상황이나 장중 호가 공백을 완전히 반영하지 못했다.
  • 데이터 처리: 종가가 비어 있는 날은 직전 종가로 평가했다. 액면분할 뒤 거래량이 보정되지 않은 문제는 분할·장기 정지 뒤 60거래일의 거래량을 빼는 방식으로 대응했고, 정확한 분할 비율로 보정한 것은 아니다.
  • 거래 수 681건: 표본이 아주 작지는 않지만, 큰 수익이 소수의 급등 종목에서 나왔다. 최고 거래 몇 건이 전체 성과에 미치는 영향이 크다.

정리

책의 기술적 조건을 국내 시장에 적용하면 KOSPI를 앞서는 결과가 나왔다. 하지만 성과의 상당 부분이 최근 강세장과 설정값 선택, 낮은 거래 비용 가정에서 나왔다. 이 방식을 실전에 쓴다면 연 20%가 아니라 KOSPI와 비슷한 연 10% 안팎을 기대하고, 손실 구간이 길게 이어질 수 있다는 점을 미리 받아들여야 한다. 책이 말하는 "유지하는 것이 어렵다"는 말이 이 백테스트에서도 그대로 맞았다.

이어지는 글: 같은 규칙을 손대지 않고 미국 주식에 적용하면 어떻게 될까? 결과는 여기에 정리했다.


※ 본 글은 과거 데이터를 이용한 개인 학습 기록이며 특정 종목의 매수·매도를 권유하지 않습니다. 백테스트 결과는 미래 수익을 보장하지 않으며, 투자 판단과 책임은 투자자 본인에게 있습니다.

반응형