보유비중이 무엇이고 왜 수익률보다 먼저 보는가
보유비중(time in market, exposure)은 백테스트 기간 전체 거래일 중 실제로 주식을 들고 있던 날의 비율이다. 252거래일을 돌렸는데 그중 60일만 포지션이 있었다면 보유비중은 23.8퍼센트다. 나머지 192일은 현금이었다는 뜻이다.
이 숫자가 왜 먼저인가. 시장에 절반만 들어가 있으면 수익도 손실도 대략 절반만 따라간다. 그러니까 상승장에서 전략 수익률이 낮게 나오는 건 판단이 틀려서가 아니라 그냥 자리에 없었기 때문일 수 있고, 하락장에서 손실이 적은 것도 잘 피해서가 아니라 마찬가지로 없었기 때문일 수 있다. 수익률 한 숫자만 보면 이 둘이 완전히 섞인다.
그래서 백테스트 결과표를 받으면 수익률 옆 칸에 보유비중을 강제로 세운다. 여기서부터 실력과 부재가 갈린다.
검증 대상 — 널리 알려진 기술적 기법 다섯 개
대상은 해외 트레이딩 교육에서 자주 다뤄지는 다섯 가지다. 각각이 무엇인지부터 풀어 둔다.
엘더 BBP는 알렉산더 엘더가 만든 불베어파워를 EMA 배열·ADX와 묶은 것이다. 20일 지수이동평균이 50일 위에 있으면 상승 배열로 보고, ADX가 25 이상이면 추세가 충분히 강하다고 판단한 뒤, 매수세와 매도세의 힘 차이가 바뀌는 지점을 진입 타이밍으로 잡는다.
슈퍼트렌드 풀백은 ATR 기반 추세선인 슈퍼트렌드로 방향을 정하고, RSI로 과열 구간을 걸러 내고, 스토캐스틱으로 눌림목을 포착하고, MACD로 큰 추세를 재확인하는 4중 필터다. ICT IFVG는 캔들 세 개 사이에 생긴 가격 공백(페어 밸류 갭)이 반대로 뚫리면 그 구간이 지지·저항으로 뒤집힌다고 보는 기법이다.
나머지 둘은 데이 트레이딩 강사로 알려진 로스 카메론의 규칙이다. 하나는 RSI 과매도와 볼린저 하단 이탈에 쌍바닥을 겹쳐 보는 반전 기법, 다른 하나는 가격은 저점을 낮추는데 RSI는 저점을 높이는 다이버전스에 MACD 크로스를 확인 신호로 붙인 기법이다.
어떻게 돌렸나 — 워크포워드 백테스트 절차
먼저 일봉을 모은다. 국내 종목은 네이버 금융의 시세 JSON, 해외 종목은 Tiingo의 수정주가(adjusted OHLC)를 썼다. 배당과 액면분할이 반영된 수정주가여야 한다. 미조정 종가를 쓰면 분할일에 가격이 뚝 떨어져 없던 매도 신호가 생긴다.
다음이 이 검증의 핵심이다. 시그널은 그날 종가까지의 데이터만 보고 계산하고, 실제 체결은 다음 날 시가로 넣는다. 같은 날 종가로 체결했다고 치면 아직 알 수 없는 정보로 매매한 셈이 되고, 그 백테스트는 통째로 무의미해진다. 이걸 룩어헤드 편향이라고 한다.
지표 워밍업도 필요하다. 50일 이동평균을 쓰는 기법이 있으니 측정 구간 앞에 최소 150거래일을 더 확보해 두고, 매 시점의 시그널은 직전 400봉만 잘라 계산했다.
마지막으로 종료 시점을 하나로 고정하지 않았다. 오늘 하루를 기준으로 재면 직전에 급락장이 있었는지 없었는지가 결과를 통째로 흔든다. 그래서 종료일을 21거래일씩 과거로 밀며 최대 36개 시점에서 같은 측정을 반복했다.
// 시그널은 t-1일 종가까지만 보고 산출한다
const want = signals[t - 1]?.direction === 'LONG' ? 1 : 0
if (pos === 0 && want === 1) {
// 진입: 다음 날 시가에 체결 → 그날 종가까지 보유
equity *= (1 - buyCost) * (rows[t].close / rows[t].open)
} else if (pos === 1 && want === 1) {
// 유지: 전일 종가 → 당일 종가
equity *= rows[t].close / rows[t - 1].close
} else if (pos === 1 && want === 0) {
// 청산: 다음 날 시가에 체결
equity *= (rows[t].open / rows[t - 1].close) * (1 - sellCost)
}
pos = want결과 1 — 다섯 개 전부 바이앤홀드를 못 이겼다
16종목에 종료 시점 롤링을 곱하면 기간별로 수백에서 천 단위의 비교 셀이 나온다. 거래가 한 번이라도 발생한 셀만 세어 승패를 집계했다.
전 전략 승률이 50퍼센트 아래다. 그리고 보유 기간이 길어질수록 더 내려간다. 1개월 창에서 38.5퍼센트였던 승률이 1년 창에서는 18.7퍼센트가 된다.
거래 비용을 빼고 다시 돌려도 결과는 뒤집히지 않았다. 최고가 12승 12패였다. 거래 빈도 자체가 낮아 비용 민감도가 크지 않다는 뜻이고, 동시에 성과 부진의 원인이 수수료가 아니라는 뜻이기도 하다.
| 기간 | 비교 셀 | 전략 승률 | 초과수익 중앙값 | 전략 중앙값 | 바이앤홀드 중앙값 |
|---|---|---|---|---|---|
| 1개월 | 722 | 38.5% | -2.7%p | +0.5% | +3.2% |
| 6개월 | 1,061 | 27.7% | -17.6%p | +2.9% | +19.5% |
| 1년 | 1,159 | 18.7% | -39.0%p | +6.0% | +44.9% |
결과 2 — 승패를 가른 건 그 자산이 올랐는지였다
표를 종목별로 뜯어 보니 규칙이 하나 있었다. 그 자산이 그 구간에 오른 폭과 전략의 초과수익이 반대 방향으로 붙어 있었다. 상관계수가 1개월 마이너스 0.808, 6개월 마이너스 0.905, 1년 마이너스 0.945다.
바이앤홀드 수익률 구간으로 잘라 보면 더 분명하다. 자산이 20퍼센트 넘게 빠진 구간에서 전략 승률은 89.1퍼센트, 100퍼센트 넘게 오른 구간에서는 1.8퍼센트다.
즉 전략이 이기는 조건은 전략 자체가 아니라 자산이다. 그리고 그 구간에 자산이 오를지 내릴지는 지나고 나서야 안다. 미리 알 수 있다면 애초에 기법이 필요 없다.
| 구간 바이앤홀드 수익 (1년 창) | 비교 셀 | 전략 승률 | 초과수익 중앙값 |
|---|---|---|---|
| -20% 미만 | 256 | 89.1% | +25.1%p |
| -20 ~ 0% | 258 | 62.0% | +5.2%p |
| 0 ~ 20% | 504 | 14.9% | -13.7%p |
| 20 ~ 50% | 799 | 3.8% | -30.2%p |
| 50 ~ 100% | 555 | 3.1% | -61.9%p |
| 100% 이상 | 552 | 1.8% | -167.7%p |
결과 3 — 레버리지 ETF에서는 통한다는 가설도 기각됐다
처음 여섯 종목만 돌렸을 때는 2배 레버리지 ETF 하나에서만 전략이 이겼다. 장기 보유가 구조적으로 깨지는 자산이라 그런가 싶어 레버리지 ETF 여섯 종과 같은 기초자산의 무레버리지 ETF 네 종을 추가로 돌렸다.
레버리지 그룹 안에서 결과가 정반대로 갈렸다. 3배 ETF 네 개 중 둘은 이기고 둘은 참패했다. 이긴 쪽의 공통점은 배수가 아니라 그 구간 바이앤홀드 수익률이 마이너스였다는 것이다.
무레버리지 대조군에서도 같았다. 바이앤홀드가 가장 덜 오른 종목에서만 승률이 튀었다. 결국 레버리지는 변수가 아니었고, 결과 2의 규칙이 그대로 관통했다.
| 종목 | 배수 | 1년 승률 | 초과수익 중앙값 | 바이앤홀드 중앙값 |
|---|---|---|---|---|
| TSLL | 2배 | 62.7% | +23.8%p | -11.7% |
| LABU | 3배 | 55.5% | +5.8%p | -16.5% |
| NVDL | 2배 | 18.7% | -49.1%p | +45.5% |
| SOXL | 3배 | 21.0% | -78.9%p | +79.2% |
| TQQQ | 3배 | 3.8% | -67.1%p | +67.5% |
| SPXL | 3배 | 3.3% | -45.5%p | +40.1% |
노출 보정 알파를 직접 계산하는 법
여기까지가 진단이고, 다음이 독자가 자기 백테스트에 바로 적용할 절차다. 필요한 값은 세 개뿐이다. 전략 수익률, 같은 구간 바이앤홀드 수익률, 그리고 보유비중.
먼저 보유비중을 구한다. 시뮬레이션 루프에서 포지션이 1인 날을 세어 전체 거래일로 나누면 된다. 그다음 전략 수익률에서 보유비중 곱하기 바이앤홀드 수익률을 뺀다. 남는 값이 시장 노출만으로는 설명되지 않는 몫이다.
표본이 여러 개면 회귀로 한 번 더 본다. 초과수익을 바이앤홀드 수익에 회귀시키고 절편을 읽는다. 이 절편이 곧 평균적인 알파다. 기울기는 참고용인데, 노출 말고 다른 게 없다면 기울기가 대략 보유비중 빼기 1에 수렴한다.
이번 표본의 숫자는 이랬다. 실측 기울기 마이너스 0.845, 평균 보유비중 23.8퍼센트로 예측한 기울기 마이너스 0.762. 거의 겹친다. 그리고 절편이 마이너스 0.52퍼센트포인트였다. 노출 보정 초과수익의 중앙값은 마이너스 5.73퍼센트포인트, 양수 비율은 33.3퍼센트였다.
정리하면 이 다섯 기법이 판 것은 초과수익이 아니라 시장에서 빠져 있던 시간이다. 통계물리학자 김범준 교수가 이동평균 기반 전략에 과학적 근거가 없다고 말한 것과 같은 방향인데, 한 칸 더 들어가면 틀렸다기보다 애초에 다른 상품이었다는 쪽에 가깝다.
// 1) 보유비중
const exposure = daysInMarket / totalDays
// 2) 노출로 설명되는 몫을 뺀 나머지 = 알파
const alpha = strategyReturn - exposure * buyHoldReturn
// 3) 표본이 여럿이면 회귀 절편으로 확인
// excess = a + b * buyHold (a가 알파, b는 노출 예측치 -(1-exposure)에 수렴)
//
// 실측: b = -0.845, -(1 - 0.238) = -0.762, a = -0.52%p
// 노출 보정 알파 중앙값 -5.73%p, 양수 비율 33.3%이 검증의 한계
표본은 16종목이다. 개별주 다섯, 레버리지 ETF 일곱, 무레버리지 ETF 넷. 기술적 분석 일반에 대한 결론이 아니라 이 다섯 기법, 이 표본, 이 규칙에 대한 결론이다.
규칙도 단순화했다. 롱온리로 통일했고 손절·목표가·분할매수 같은 실전 운용 규칙은 넣지 않았다. 매도 신호는 공매도로 쓰지 않고 현금으로 처리했다. 신호 자체의 성질을 보려는 설계지만, 운용 규칙이 붙으면 숫자는 달라질 수 있다.
거래 비용은 국내 매수 0.065퍼센트, 매도 0.215퍼센트(증권거래세 포함), 해외 편도 0.12퍼센트로 잡았다. 슬리피지 가정이 들어간 값이라 증권사와 체결 상황에 따라 달라진다. 앞선 글에서 다뤘듯 체결 가정 한 줄이 결과를 크게 흔들 수 있으므로, 남의 백테스트를 볼 때도 이 네 가지(판정 시점, 체결 가격, 거래 비용, 데이터 구간)를 함께 확인하는 편이 안전하다.