안녕하세요, 흔한트레이더입니다.
누적수익률 40.72%와 39.16%를 기록한 두 전략이 있습니다. 수익률 차이는 1.56%포인트에 불과하지만 평균 시장 노출은 7.05%와 11.02%였습니다. 두 번째 전략이 자본을 시장에 노출한 비중은 첫 번째보다 1.56배 높았습니다.
반대로 거래 횟수는 첫 번째 전략이 더 많았습니다. 시장에 머문 시간은 짧았지만 더 자주 사고팔았기 때문입니다. 낮은 시장 노출과 낮은 회전율은 같은 뜻이 아닙니다.
이번 글에서는 같은 진입 조건에 20일선과 40일선 청산을 적용한 실제 백테스트로 시장 노출과 회전율을 계산하고, 자본 효율과 거래비용을 함께 확인합니다.
이번 글의 핵심 결론
- 누적수익률 차이는 1.56%포인트였지만 40일선 청산의 평균 시장 노출은 20일선보다 1.56배 높았습니다.
- 20일선 청산은 보유 기간이 짧아 노출은 낮았지만 거래가 많아 연간 총회전율은 3.20배로 더 높았습니다.
- 시장 노출은 자본을 묶은 정도를, 회전율은 자본을 교체한 정도를 보여주므로 따로 확인해야 합니다.
1. 시장 노출이란 무엇인가
시장 노출(Market Exposure)은 전체 자본 중 가격 변동에 노출된 포지션이 차지하는 비중입니다. 매수 포지션만 사용하는 전략은 다음처럼 계산할 수 있습니다.
일별 시장 노출 = 보유 포지션 평가금액 / 포트폴리오 평가금액
평균 시장 노출 = 일별 시장 노출의 평균
자본 1,000만 원 중 300만 원을 주식으로 보유했다면 그날의 시장 노출은 30%입니다. 전액 현금이면 0%, 전액 투자했다면 100%입니다.
이번 백테스트는 30개 종목에 같은 크기의 독립된 자본 구간을 배정했습니다. 따라서 30개 중 3개 종목의 구간이 투자 중이라면 포트폴리오 노출은 약 10%로 계산됩니다. 모든 거래일의 값을 평균해 평균 노출을 구했습니다.
공매도와 레버리지를 사용하면 총노출과 순노출을 구분해야 합니다.
총노출 = (매수 포지션 절댓값 + 매도 포지션 절댓값) / 자본
순노출 = (매수 포지션 - 매도 포지션) / 자본
매수 100%, 공매도 100%인 시장중립 전략은 순노출이 0%에 가까워도 총노출은 200%입니다. 이 글의 사례는 매수 전용이므로 두 개념을 따로 계산하지 않았습니다.
2. 회전율은 자본이 얼마나 자주 교체됐는가
회전율(Turnover)은 일정 기간에 매수·매도한 금액이 평균 자본의 몇 배인지 나타냅니다. 계산 방식은 보고서마다 다르므로 매수와 매도를 모두 더했는지, 한쪽만 사용했는지 반드시 확인해야 합니다.
이 글에서는 매수와 매도를 모두 합산한 연간 총회전율을 사용합니다.
연간 총회전율
= 연간 매수·매도 금액 합계 / 평균 포트폴리오 자본
이번 백테스트는 30개 동일 비중 구간에서 한 번 진입하면 해당 종목 구간을 전부 사용하고, 한 번 청산하면 전부 매도합니다. 따라서 완료 거래 수로 다음처럼 근사할 수 있습니다.
연간 총회전율
= 2 × 완료 거래 수 ÷ 종목 수 ÷ 검증 연수
앞의 2는 한 번의 완료 거래에 매수와 매도가 한 번씩 발생한다는 뜻입니다. 매수와 매도 중 한쪽만 세는 편도 회전율은 이 값의 절반입니다.
3. 같은 수익률, 다른 시장 노출
비교에는 누적수익률은 비슷한데 낙폭은 달랐던 SYSTEM LAB 04의 결과를 사용했습니다. 30개 종목, 진입 조건, 검증 기간과 비용 조건은 같고 청산 이동평균만 다릅니다.
| 항목 | 20일선 청산 | 40일선 청산 |
|---|---|---|
| 누적수익률 | 40.72% | 39.16% |
| CAGR | 4.37% | 4.22% |
| MDD | -7.83% | -12.35% |
| 완료 거래 | 384회 | 346회 |
| 평균 시장 노출 | 7.05% | 11.02% |
| 비노출 비중 | 92.95% | 88.98% |
40일선 청산은 가격이 장기 이동평균 아래로 내려갈 때까지 더 오래 기다립니다. 완료 거래는 적었지만 한 번 진입한 자본이 더 오래 시장에 남았습니다. 그 결과 평균 노출은 11.02%로, 20일선 청산의 7.05%보다 1.56배 높았습니다.
20일선 청산은 더 빨리 포지션을 정리해 노출과 MDD가 낮았습니다. 이 실험에서는 누적수익률도 1.56%포인트 높아 자본을 시장에 노출한 정도에 비해 결과가 효율적이었습니다.

다만 CAGR을 평균 노출로 나눈 값은 20일선 0.62, 40일선 0.38이지만 이를 실제 연 수익률로 해석하면 안 됩니다. 노출되지 않은 자본을 항상 다른 전략에 투입할 수 있다는 보장이 없고, 여러 전략의 신호가 동시에 몰리면 필요한 현금도 달라집니다. 이 비율은 같은 구조의 전략을 진단하는 보조값에 가깝습니다.
4. 노출이 낮아도 회전율은 높을 수 있다
검증 기간은 8년이고 종목은 30개였습니다.
| 항목 | 20일선 청산 | 40일선 청산 |
|---|---|---|
| 종목당 연평균 완료 거래 | 1.60회 | 1.44회 |
| 연간 편도 회전율 | 1.60배 | 1.44배 |
| 연간 총회전율 | 3.20배 | 2.88배 |
20일선 청산은 평균 시장 노출이 더 낮지만 연간 총회전율은 더 높았습니다. 포지션을 빨리 닫아 자본이 시장에 머무는 시간은 짧아졌고, 같은 기간에 다시 진입할 기회는 늘었기 때문입니다.
반대로 40일선 청산은 포지션을 오래 보유해 시장 노출은 높았지만 완료 거래가 적어 회전율은 낮았습니다. 시장 노출은 얼마나 오래 보유했는가, 회전율은 얼마나 자주 교체했는가에 더 가깝습니다.
5. 회전율이 높으면 비용에 더 민감하다
원본 백테스트는 매수와 매도에 각각 0.05%의 비용 예시를 반영했습니다. 연간 총회전율에 편도 비용률을 곱하면 회전율로 인한 연간 비용 차감 규모를 단순 추정할 수 있습니다.
연간 비용 차감 추정치 = 연간 총회전율 × 편도 거래비용률
| 편도 비용 가정 | 20일선 청산 | 40일선 청산 |
|---|---|---|
| 0.05% | 연 -0.16%p | 연 -0.14%p |
| 0.15% | 연 -0.48%p | 연 -0.43%p |
| 0.30% | 연 -0.96%p | 연 -0.86%p |
비용이 편도 0.30%라면 20일선 청산의 단순 차감 추정치는 연 0.96%포인트입니다. 원래 CAGR 4.37%와 비교하면 무시하기 어려운 크기입니다.
이 계산은 회전율과 고정 비용률을 곱한 1차 추정치입니다. 실제 체결에서는 거래 시점의 자본 변화, 종목별 호가 간격, 주문 크기에 따른 시장 충격과 세금이 달라집니다. 정확한 순성과는 거래별 체결 금액에 비용을 직접 반영해 다시 계산해야 합니다.
6. 파이썬으로 시장 노출과 회전율 계산하기
일별 포지션 비중과 완료 거래 수가 있다면 다음처럼 계산할 수 있습니다.
def calculate_exposure_and_turnover(
daily_position_weights,
completed_trades,
ticker_count,
elapsed_years,
one_way_cost=0.0005,
):
average_exposure = sum(
abs(weight) for weight in daily_position_weights
) / len(daily_position_weights)
annual_round_trips_per_ticker = (
completed_trades / ticker_count / elapsed_years
)
annual_gross_turnover = (
2.0 * annual_round_trips_per_ticker
)
estimated_annual_cost = (
annual_gross_turnover * one_way_cost
)
return {
"average_exposure": average_exposure,
"annual_gross_turnover": annual_gross_turnover,
"estimated_annual_cost": estimated_annual_cost,
}
strategies = {
"20일선 청산": {"trades": 384, "exposure": 0.070527},
"40일선 청산": {"trades": 346, "exposure": 0.110238},
}
for name, values in strategies.items():
daily_weights = [values["exposure"]] * 100
result = calculate_exposure_and_turnover(
daily_weights,
completed_trades=values["trades"],
ticker_count=30,
elapsed_years=8.0,
)
print(
f'{name}: 노출 {result["average_exposure"]:.2%}, '
f'총회전율 {result["annual_gross_turnover"]:.2f}배, '
f'비용 추정 {result["estimated_annual_cost"]:.2%}'
)
실행 결과는 다음과 같습니다.
20일선 청산: 노출 7.05%, 총회전율 3.20배, 비용 추정 0.16%
40일선 청산: 노출 11.02%, 총회전율 2.88배, 비용 추정 0.14%
예제에서는 평균 노출값을 반복해 계산 과정을 단순화했습니다. 실제 백테스트에서는 날짜별 종목 비중을 먼저 합산한 뒤 전체 거래일의 평균을 사용해야 합니다.
7. 시장 노출과 회전율의 해석 함정
평균 노출은 신호 집중을 숨깁니다
평균 노출이 10%라도 대부분의 기간에는 0%였다가 특정 구간에 100%가 될 수 있습니다. 평균뿐 아니라 최대 노출, 노출 분위수와 동시에 열린 포지션 수를 함께 확인해야 합니다.
비노출 자본이 항상 자유로운 것은 아닙니다
다음 신호에 대비해 현금을 확보해야 하거나, 여러 전략의 신호가 동시에 발생할 수 있습니다. 평균 노출이 낮다는 이유만으로 남은 자본에 단순히 레버리지를 적용하면 최대 노출 구간에서 자본이 부족해질 수 있습니다.
현금 수익률 가정이 결과를 바꿉니다
이번 백테스트는 비노출 현금의 이자 수익을 0%로 두었습니다. 현금성 자산의 수익을 반영하면 노출이 낮은 전략의 전체 성과가 달라질 수 있습니다. 비교할 때는 현금 수익률 조건을 통일해야 합니다.
회전율 계산식을 확인해야 합니다
매수와 매도를 모두 합치는 총회전율, 매수와 매도 중 작은 쪽만 사용하는 방식, 포지션 절댓값 변화량을 더하는 방식은 결과가 다릅니다. 숫자만 인용하지 말고 분자와 분모, 연환산 방법을 함께 기록해야 합니다.
낮은 노출이 낮은 위험을 보장하지 않습니다
짧은 시간에 고변동 종목이나 레버리지 상품을 보유하면 평균 노출은 낮아도 큰 손실이 날 수 있습니다. MDD와 낙폭 기간, 변동성과 손실 꼬리를 함께 확인해야 합니다.
8. 함께 확인할 성과지표
- CAGR은 자본 전체가 실제로 얼마나 성장했는지 보여줍니다. 노출이 낮아도 CAGR이 낮다면 남은 현금을 효율적으로 쓰지 못한 전략일 수 있습니다.
- MDD는 노출된 기간에 발생한 최대 손실을 확인합니다.
- Profit Factor는 반복된 거래의 총이익과 총손실을 비교합니다. Profit Factor 계산법에서는 대형 수익 거래의 집중도까지 확인했습니다.
- 거래비용은 회전율을 실제 순수익으로 연결합니다. 수수료뿐 아니라 세금, 슬리피지와 시장 충격을 포함해야 합니다.
9. 정리
시장 노출은 자본이 가격 변동에 노출된 정도를, 회전율은 포지션이 교체된 정도를 보여줍니다. 둘은 관련이 있지만 같은 지표가 아닙니다.
이번 결과에서는 20일선 청산이 더 빨리 포지션을 정리해 평균 노출과 MDD가 낮았고 누적수익률은 조금 높았습니다. 대신 거래가 많아 총회전율과 비용 민감도는 더 높았습니다.
전략을 비교할 때는 수익률과 MDD 다음에 평균·최대 노출을 확인하고, 연간 회전율에 자신의 실제 비용률을 적용하는 순서가 좋습니다. 그래야 수익률이 비슷한 전략 중 자본을 덜 묶는 전략과 비용을 덜 쓰는 전략을 구분할 수 있습니다.
다음 글에서는 손실 분포의 꼬리를 측정하는 VaR와 CVaR를 살펴보겠습니다. 같은 변동성을 가진 전략도 극단 손실의 크기가 어떻게 달라지는지 확인합니다.