기술적 분석 12장: 백테스트에서 살아남는 전략은 무엇인가?
앞 장의 후보 목록은 분석 대상을 줄여줄 뿐, 실제 투자 성과를 보여주지 않습니다. 기술적 분석의 마지막 질문은 “어떤 지표가 가장 유명한가?”가 아니라 “같은 조건과 비용을 적용했을 때 어떤 전략이 남는가?”입니다. 이번 장에서는 300개 종목에 같은 기간과 같은 비용 가정을 적용해 이동평균, MACD, 복합 신호를 비교합니다.
백테스트의 실행 규칙
Section titled “백테스트의 실행 규칙”state = df["close"] > df["ma20"]state &= df["ma20"] > df["ma60"]
# 당일 신호로 다음 거래일부터 보유position = state.groupby(df["code"]).shift(1).fillna(False)gross_return = position * df["return_1d"]turnover = position.groupby(df["code"]).diff().abs().fillna(position)net_return = gross_return - turnover * 0.0015실제 포트폴리오 계산에서는 해당 날짜에 보유 중인 종목의 수익률을 동일 비중으로 평균냈습니다. 거래비용은 포지션 변경 시 0.15%를 차감했습니다.
검증 구간 결과
Section titled “검증 구간 결과”검증 구간은 2026년 1월 1일부터 9월 4일까지입니다.
| 전략 | 누적수익률 | 연환산수익률 | 변동성 | 최대낙폭 | Sharpe 근사 |
|---|---|---|---|---|---|
| MA 추세 | +63.55% | +111.03% | 52.43% | -31.05% | 2.12 |
| MACD 추세 | +58.15% | +100.55% | 50.36% | -33.52% | 2.00 |
| 복합 신호 | +5.11% | +7.86% | 63.69% | -46.21% | 0.12 |
| 코스피 | +33.62% | +55.69% | 61.14% | -38.63% | 0.91 |
이번 검증 구간에서는 MA와 MACD 추세 전략이 코스피를 앞섰습니다. MA 추세는 코스피보다 누적수익률이 높고 최대낙폭도 작았지만, -31.05%의 하락을 감수해야 했습니다. 반면 복합 신호 전략은 조건이 더 많았음에도 누적수익률이 +5.11%에 그쳤고 최대낙폭은 -46.21%였습니다.
이 표는 9장의 사건별 결과와 12장의 포트폴리오 결과가 다를 수 있다는 점도 보여줍니다. 복합 신호는 사건별 20일 평균수익률이 +7.03%였지만, 실제 진입·보유·거래비용을 적용한 전략의 누적수익률은 +5.11%였습니다. 신호가 발생한 사례의 평균과 투자자가 보유한 포트폴리오의 성과는 진입 시점, 신호 중복, 보유 종목 수, 거래비용에 의해 달라집니다.
이번 데이터에서 확인한 핵심은 다음과 같습니다.
- 거래량 돌파와 MACD 골든크로스는 20일 선행수익률에서 상대적으로 강했습니다.
- RSI 회복과 볼린저 하단 반등은 평균보다 중앙값이 낮아 일부 급등 사례의 영향을 크게 받았습니다.
- 높은 변동성 종목은 복합 신호가 나와도 양수 비율과 중앙값이 낮았습니다.
- 같은 기술 신호라도 산업별 결과가 달랐습니다.
- 조건을 많이 결합한다고 전략 성과가 자동으로 좋아지지는 않았습니다.
- 높은 수익률에는 항상 최대낙폭과 표본 편향을 함께 표시해야 합니다.
따라서 이번 분석에서 얻은 실전적인 순서는 다음과 같습니다.
- MA·MACD로 상승 추세에 있는 종목을 먼저 구분합니다.
- 거래량 돌파와 OBV로 추세에 거래량 확인이 붙었는지 봅니다.
- RSI·볼린저 반등은 단독 매수 신호가 아니라 시장·산업 조건과 함께 해석합니다.
- ATR로 종목별 포지션 크기와 손실 폭을 조정합니다.
- 산업·시장 국면으로 후보를 다시 나눈 뒤, 백테스트에서 거래비용과 최대낙폭을 확인합니다.
기술적 분석은 미래를 맞히는 주문이 아니라, 가격·거래량에서 반복적으로 관찰되는 조건을 정의하고 그 조건의 성과와 실패 범위를 측정하는 방법입니다. 이번 결과는 이 표본과 검증 기간에 대한 증거이지, 어떤 지표도 항상 작동한다는 보장은 아닙니다.
전체 원자료는 OHLCV, 신호 결과, 전략 결과, Python 코드에서 확인할 수 있습니다. 과거 검증 결과는 미래 수익을 보장하지 않으며, 실제 투자 전에는 체결 가능성·세금·슬리피지·생존자 편향을 추가로 검토해야 합니다.