📚 시리즈: 직장인의 주식 스크리너 개발기
안녕하세요, 육성라이프입니다 😊
1편에서 ‘거래량은 3배 터졌는데 주가는 ±3% 안에 머문 종목’을 찾는 흡수 거래량 스크리너를 만들었습니다. 매일 그럴듯한 종목이 수십 개씩 걸렸고, 차트를 열어 보면 오른 종목도 꽤 보였습니다.
그런데 투자에서 가장 위험한 말이 “차트 몇 개 보니까 되더라”입니다. 그래서 같은 규칙을 10년치 코스피·코스닥 실제 데이터 전체에 기계적으로 적용하는 백테스트를 돌렸습니다. 결과는 한마디로 불편했습니다. 이번 글에서는 패턴 매매가 왜 무너졌는지, 그리고 그 과정에서 배운 주식 백테스트 과최적화의 함정을 정리합니다.
가격·거래량 모양만으로 고른 종목은 10년 검증에서 무작위로 고른 종목과 통계적으로 구분되지 않았습니다. 한 기간에서 잘 맞던 패턴은 다른 기간에서 뒤집혔습니다.
1. 백테스트를 어떻게 설계했나
백테스트는 “과거에 이 규칙대로 매매했다면 어떻게 됐을까”를 계산하는 일입니다. 쉬워 보이지만 설계를 잘못하면 무엇이든 좋게 보이게 만들 수 있습니다. 그래서 처음부터 다음 기준을 정했습니다.
| 기준 | 내용 |
|---|---|
| 기간 | 최대 10년, 코스피·코스닥 전 종목 |
| 비용 | 매매 수수료, 거래세, 슬리피지 차감 |
| 현실 제약 | 100만 원 기준 1주 단위 매수, 최대 3종목 동시 보유 |
| 비교 대상 | 같은 날 무작위로 고른 종목의 성과 |
| 검증 방식 | 앞 기간에서 찾은 규칙을 뒤 기간에 그대로 적용(기간 분리) |
마지막 두 줄이 핵심입니다. 상승장에서는 아무 종목이나 사도 돈을 법니다. 그래서 “벌었냐”가 아니라 “무작위보다 나았냐”를 봐야 합니다. 또 규칙을 만든 기간에서 성적이 좋은 건 당연하니, 규칙을 만들 때 쓰지 않은 기간에서도 통하는지 확인해야 합니다.

사진: Alex Luna · Pexels (Pexels 라이선스)
2. 결과: 흡수 신호는 왜 실패했나
10년 실제 데이터에 돌려 본 결과는 이랬습니다.
- 기본 조건, 강화 조건 모두 비용을 빼고 나면 수익이 마이너스이거나 무작위 종목 선택과 통계적으로 차이가 없었습니다.
- 어떤 해에는 강화 조건이 좋았는데, 다른 해에는 오히려 기본 조건보다 나빴습니다.
- 조건을 조금씩 바꿔 가며 다시 돌려도, 앞 기간에서 좋았던 조합이 뒤 기간에서는 뒤집히는 일이 반복됐습니다.
처음엔 조건이 부족해서라고 생각했습니다. 그래서 방향을 여러 번 바꿨습니다.
| 시도 | 아이디어 | 10년 검증 결과 |
|---|---|---|
| 흡수 스크리너 v2 | 강화 조건(종가 위치·바닥권·시장 추세) 추가 | 무작위와 구분 안 됨 |
| 상승주 패턴 추천 | 최근 3개월 상승주의 공통 가격·거래량 패턴 학습 | 검증 기간에서 패턴 성적 역전 |
| 캔들로 기관 매집 추정 | 캔들 모양으로 기관 매수 흔적 추정 | 효과 확인 안 됨 |
| 장기 매집 보유 전략 | 매집 흔적 종목을 길게 보유 | 무작위 대비 우위 없음 |
3. 과최적화 — 백테스트가 거짓말을 하는 방식
이 과정에서 가장 크게 배운 건 과최적화(오버피팅)의 무서움입니다. 과최적화란 과거 데이터에 너무 잘 맞도록 규칙을 다듬다가, 실제로는 우연에 불과한 패턴까지 규칙에 넣어 버리는 현상입니다.
예를 들어 볼게요. 거래량 배수 2배·3배·4배, 등락률 ±2%·±3%·±5%, 보유 기간 10일·20일·40일을 조합하면 27가지입니다. 이 중 하나는 순전히 운으로도 좋은 성적이 나옵니다. 그 조합을 골라 “찾았다!”라고 외치는 순간, 실전에서는 무너질 규칙을 들고 시장에 들어가게 됩니다.

사진: Vanderlei Longo · Pexels (Pexels 라이선스)
과최적화를 피하려고 제가 지킨 원칙은 세 가지입니다.
- 기간 분리: 규칙은 앞 기간에서만 고르고, 뒤 기간은 채점용으로만 씁니다. 뒤 기간을 보고 규칙을 다시 고치면 그 순간 뒤 기간도 오염됩니다.
- 유형을 잘게 쪼개지 않기: 분류를 너무 세분하면 한 칸에 들어가는 사례가 몇 개 안 되고, 그 몇 개가 우연히 좋으면 패턴처럼 보입니다.
- 엔진부터 검증: 일부러 효과를 심은 가짜 데이터에서는 그 효과를 찾아내야 하고, 완전히 무작위인 데이터에서는 ‘효과 없음’이 나와야 합니다. 이걸 통과하지 못하면 실제 데이터 결과도 믿을 수 없습니다.
4. 숫자가 좋아 보일 때 의심해야 할 신호
백테스트 결과를 볼 때 아래 중 하나라도 해당되면 의심부터 하는 습관이 생겼습니다.
| 의심 신호 | 왜 위험한가 |
|---|---|
| 수익률이 지나치게 높다 | 대부분 미래 정보가 섞였거나, 비용을 빠뜨렸거나, 운 좋은 조합을 고른 경우입니다. |
| 특정 1~2년이 성과를 다 만든다 | 그 시기의 시장 분위기 덕일 가능성이 큽니다. 연도별로 플러스인 해가 얼마나 되는지 봐야 합니다. |
| 사례 수가 적다 | 수십 건짜리 결과는 몇 건의 대박이 평균을 끌어올릴 수 있습니다. |
| 조건을 바꿀 때마다 결과가 크게 출렁인다 | 규칙이 구조가 아니라 우연에 기대고 있다는 뜻입니다. |
| ‘승률’만 보여준다 | +10% 목표 같은 터치 기준은 변동성이 큰 종목을 좋아 보이게 만듭니다. |

사진: AlphaTradeZone · Pexels (Pexels 라이선스)
5. 실패에서 얻은 것
몇 주 동안 만든 프로그램들이 연달아 ‘효과 없음’을 받았을 때는 허탈했습니다. 그래도 돌아보면 이 결과는 실패가 아니라 진단이었습니다.
- 누구나 보는 가격·거래량 데이터로 ‘오를 종목’을 맞히는 건, 같은 데이터를 보는 수많은 펀드와 경쟁하는 일입니다. 신호가 있어도 이미 가격에 반영돼 있을 가능성이 큽니다.
- 그렇다면 모양이 아니라 다른 종류의 정보를 더해야 합니다. 그 첫 후보가 “누가 샀는가”, 즉 기관·외국인 수급이었습니다.
- 무엇보다 돈을 넣기 전에 이걸 알게 됐다는 게 가장 큰 수확입니다.

사진: Alesia Kozik · Pexels (Pexels 라이선스)
정리 — 10년 백테스트가 알려준 것
- 흡수 거래량 신호는 10년 실제 데이터에서 무작위 종목 선택보다 낫다는 근거가 없었습니다.
- 상승주 패턴, 캔들 기반 매집 추정 등 모양 기반 전략은 모두 기간을 바꾸면 성적이 뒤집혔습니다.
- 백테스트는 무작위 대비 초과수익, 비용 차감, 기간 분리 세 가지가 없으면 믿기 어렵습니다.
- 다음 편에서는 ‘누가 샀는가’ — 기관·외국인 순매수를 더하면 달라지는지 검증합니다.
자주 묻는 질문
Q. 백테스트에서 수익이 났는데 왜 무작위와 비교해야 하나요?
10년 중 상당 기간은 시장 전체가 올랐습니다. 그 기간에는 아무 종목이나 사도 수익이 납니다. 내 규칙이 시장 덕을 본 건지, 실제로 더 나은 종목을 고른 건지는 무작위와 비교해야만 알 수 있습니다.
Q. 그럼 기술적 분석은 다 쓸모없나요?
제 데이터와 제 규칙에서는 우위가 확인되지 않았다는 뜻입니다. 다만 “효과가 있다”는 주장을 들으면 같은 방식으로 검증해 볼 것을 권합니다.
📌 함께 읽으면 좋은 글
“주식 백테스트 과최적화 | 10년 검증으로 본 패턴 매매의 실패”에 대한 7개의 생각