백테스트 리얼리티 체크

리서치 노트

통계는 완벽한데 돈은 잃는다 — 신호가 전략으로 이어지지 않는 이유

t값이 151인 신호를 그대로 전략으로 만들었더니 손실이 났습니다. 네 번 반복해서 겪고 나서야 원인을 알았습니다.

작성
백테스트 리얼리티 체크
게시일
2026-08-25
검토일
2026-09-29

먼저 결론

  • 종목 전체를 놓고 재면 아주 강한 신호가 나옵니다. 그런데 그걸로 포트폴리오를 만들면 손실이 납니다.
  • 네 번 다 같은 일이 일어났습니다. 우연이 아니라 구조입니다.
  • 원인은 평균과 중앙값이 다른 방향을 가리키기 때문입니다.

네 번의 실패

전 종목을 놓고 "이 조건에 해당하는 종목이 이후 얼마나 올랐나"를 재면 뚜렷한 차이가 나옵니다. 통계적으로는 의심할 여지가 없는 크기였습니다.

신호 전 종목 기준 실제 전략으로 만들면
매도 시점 조정 건당 +1.85% (t=97) 차이 없음
장 열기 전 보유 하루 +0.25% (t=151) 지수에서는 절반 이하
신고가 근처 종목 60일 +2.45%p (t=30.5) 연 -13%
크게 오를 종목 예측 적중률 1.78배 연 -33%

t값 151은 통계적으로 "우연일 확률이 사실상 0"이라는 뜻입니다. 그런데 네 번 다 전략에서는 무너졌습니다.

원인 — 평균은 소수가 만든다

네 번째 사례를 뜯어보니 답이 나왔습니다.

조건에 맞는 종목들의 60일 수익을 보면 평균은 +2.61% 인데 중앙값은 -5.12% 였습니다. 절반 이상이 손실인데 평균이 양수인 겁니다.

몇몇 종목이 크게 오르면서 평균을 혼자 끌어올린 결과입니다. 조건에 맞는 종목이 2,000개라면 그중 스무 개쯤이 평균을 만듭니다.

포트폴리오는 그 스무 개를 놓칩니다. 20종목만 담으면 2,000개 중에서 고르는 것이라 큰 승자가 들어올 확률이 낮고, 못 잡으면 중앙값(-5%)에 가까운 결과가 납니다.

더 근본적인 문제

"그러면 크게 오를 종목을 골라내면 되지 않나" 싶습니다. 그것도 재봤습니다.

크게 오를 종목을 예측하는 특징을 44가지 조합으로 찾았습니다. 가격 움직임, 재무 상태, 기관·외국인 매매까지 세 종류의 정보를 다 썼습니다.

결과는 이렇습니다. 크게 오를 확률이 높은 종목은 크게 빠질 확률도 높습니다. 그것도 두 배로요.

특징 크게 오를 확률 크게 빠질 확률
장기 상승 추세 1.60배 3.19배
변동성 큼 1.36배 3.22배
최근 상승 1.39배 2.66배

44가지 중 한 방향만 예측하는 특징은 하나도 없었습니다.

결국 이 특징들이 골라내는 건 "오르는 종목"이 아니라 "많이 움직이는 종목" 입니다.

그래서 무엇을 해야 하나

세 가지로 정리했습니다.

전 종목 통계는 아이디어를 찾는 데만 씁니다. 크기는 반드시 실제 포트폴리오 구조로 다시 재야 합니다. 몇 종목을 담을지, 얼마나 자주 바꿀지에 따라 같은 신호가 전혀 다른 결과를 냅니다.

평균만 보지 말고 중앙값을 같이 봅니다. 중앙값이 음수인데 평균이 양수라면, 그 수익은 소수 종목에 몰려 있다는 뜻입니다. 적게 담는 전략에서는 잡히지 않습니다.

적게 담을수록 크게 잃을 각오를 해야 합니다. 소수 종목에 집중하는 것은 큰 상승을 노리는 구조입니다. 그런데 큰 상승을 노리면 큰 하락이 따라옵니다. 둘을 분리할 방법을 44번 찾아봤지만 없었습니다.

한계

한 운영자가 한국 주식으로 검증한 기록입니다. 다른 시장이나 다른 성격의 전략에서는 다를 수 있습니다.

다만 네 번의 실패가 모두 같은 원인으로 설명된다는 점, 그리고 44가지 조합에서 예외가 하나도 없었다는 점은 우연으로 보기 어렵습니다.

담는 개수가 평균을 어떻게 놓치는지 — 셈만 하는 합성 예시

이 절의 2,000과 20은 새 백테스트가 아닙니다. 본문에 이미 적은 "평균은 소수가 만들고, 포트폴리오는 그 소수를 놓친다"를 개수로만 다시 보여주는 합성 예시입니다. 이름을 고르라는 뜻이 아닙니다.

조건에 맞는 종목이 2,000개이고, 그중 20개만 평균을 양수로 끌어올린다고 합시다. 이 20개는 본문이 말한 "스무 개쯤"의 자릿수입니다. 포트폴리오에 20칸이 있으면, 그 칸이 2,000개 중 20개의 큰 승자와 겹칠 확률은 칸의 개수와 같지 않습니다. 20칸을 채운다는 것은 2,000개에서 20개를 뽑는 일이고, 큰 승자 20개와 정확히 같은 집합을 뽑는 일은 훨씬 드뭅니다. 거의 겹치지 않으면 남은 분포는 중앙값 쪽에 붙습니다. 중앙값이 음수라면 평균이 양수여도 담은 결과는 음수에 가깝습니다. t값이 크다는 문장은 2,000개의 평균에 대한 문장이지, 20칸의 중앙값에 대한 문장이 아닙니다.

칸을 200개로 늘리면 큰 승자를 포함할 기회는 늘어납니다. 동시에 많이 움직이는 이름도 더 들어옵니다. 본문의 표에서 크게 오를 확률을 높인 특징은 크게 빠질 확률도 같이 높였습니다. 평균에 다가가는 동안 낙폭의 재료도 같이 담깁니다. 그래서 "칸을 늘려 전 종목 통계에 맞춘다"는 해결은, 통계를 재현하는 대신 변동을 재현할 수 있습니다. 어느 쪽이 되는지는 칸의 수와 교체 주기를 고정한 뒤에만 측정됩니다. 고정하기 전의 t값은 그 측정을 대신하지 못합니다.

확인할 순서는 본문의 세 문장을 절차로 바꾼 것입니다. 첫째, 같은 조건에서 평균과 중앙값을 나란히 적습니다. 부호가 다르면 평균만으로 전략을 만들지 않습니다. 둘째, 실제로 담을 칸 수로 다시 집계합니다. 전 종목 집계를 칸 수의 집계인 것처럼 부르지 않습니다. 셋째, 그 집계의 부호가 규칙을 다듬을 때 보지 않은 구간에서도 유지되는지 봅니다. 하나라도 빠지면 t값이 커도 전략의 근거가 되지 않습니다. 넷째, 크게 오를 확률만 보고 고른 특징이 크게 빠질 확률도 높이는지 같은 표에 적습니다. 한쪽만 있는 표는 이 글이 이미 기각한 읽기입니다.

이 순서는 네 번의 실패를 한 원인으로 묶기 위한 것입니다. 매도 시점을 조정한 경우, 장 시작 전의 보유를 본 경우, 신고가 근처를 본 경우, 크게 오를 쪽을 예측한 경우가 서로 다른 규칙처럼 보여도, 전 종목 평균과 담는 칸의 결과가 갈라진다는 점에서는 같습니다. 다음 아이디어가 나와도 평균의 t값부터 발표하지 않고 칸 수의 중앙값부터 계산하면, 같은 실패를 다섯 번째로 반복하는 일은 줄어듭니다. 줄어든다는 말은 다음 아이디어가 맞다는 뜻이 아닙니다. 같은 착각의 입구를 막는다는 뜻입니다.

가설 원장에는 이 실패가 몇 번째 시도였는지가 모여 있습니다. 시도의 번호를 빼면 네 번의 실패는 네 개의 불운처럼 보이고, 번호를 두면 한 구조의 반복으로 보입니다. 이 글의 표와 원장의 번호를 같이 읽는 것이 다음 단계입니다. 파라미터와 종목은 여전히 적지 않습니다. 적지 않아도 평균과 중앙값의 부호 차이는 재현할 수 있는 점검이 됩니다.