5 분 분량

지난 글에서 60/40 포트폴리오를 만들면서 “매월 리밸런싱”을 아무 설명 없이 전제로 깔았습니다. 사실 그 한 줄이 결과를 꽤 많이 좌우합니다. 리밸런싱을 아예 안 하면 어떻게 되는지, 매월 대신 매년 하면 어떤지, 같은 데이터로 확인해 봤습니다.

시작하기 전에 저는 “매월 리밸런싱이 가장 좋고, 자주 할수록 비용이 늘어나니 적당히 타협하는 문제”라고 짐작했습니다. 결과는 두 군데서 예상과 달랐습니다.

실험 설계

지난 글과 같은 데이터입니다. 실러 교수의 미국 월별 자료에서 S&P500 총수익률과 10년물 국채 수익률을 뽑아, 1950년 2월부터 2023년 9월까지 884개월(사본에 배당 값이 없는 2023년 7~9월은 가격 변화만 반영). 목표 비중은 주식 60 / 채권 40으로 고정하고 다섯 가지 규칙을 비교했습니다.

  • 방치(none) — 처음에 60/40으로 사고 그 뒤로 아무것도 안 함
  • 매월 / 분기 / 매년 — 정해진 주기마다 60/40으로 되돌림
  • 밴드(band) — 주식 비중이 55% 아래나 65% 위로 벗어날 때만 되돌림

핵심은 드리프트(drift)입니다. 주식이 오르면 가만히 있어도 주식 비중이 저절로 늘어납니다. 이걸 코드로 옮기면 이렇게 됩니다.

def simulate(r, target=0.6, rule="monthly", band=0.05, cost=0.0):
    w = target                       # 현재 주식 비중
    rets, weights, n = [], [], 0
    for i, (date, row) in enumerate(r.iterrows()):
        # 이번 달 수익률은 '직전 달 말 비중'으로 결정된다
        gross = w * (1 + row["Stock"]) + (1 - w) * (1 + row["Bond"])
        # 두 자산의 수익률이 다르므로 비중이 저절로 움직인다
        w_drift = w * (1 + row["Stock"]) / gross

        due = (rule == "monthly"
               or (rule == "quarterly" and (i + 1) % 3 == 0)
               or (rule == "annual" and (i + 1) % 12 == 0)
               or (rule == "band" and abs(w_drift - target) > band))

        turnover = abs(w_drift - target) if due else 0.0   # 사고판 비율
        rets.append(gross - 1 - turnover * cost)
        w = target if due else w_drift
        weights.append(w)
        n += 1 if due and turnover > 0 else 0
    return pd.Series(rets, index=r.index), pd.Series(weights, index=r.index), n

turnover가 실제로 사고판 금액의 비율입니다. 비중을 65%에서 60%로 되돌린다면 자산의 5%만 옮기면 되므로, 비용도 그 5%에만 붙습니다. 전체 자산을 다 팔았다 사는 것이 아니라는 점이 뒤에서 중요해집니다. 데이터를 읽고 표와 그림까지 만드는 전체 코드는 rebalancing_test.py에 있습니다. 데이터를 읽는 함수를 asset_allocation_basics.py에서 가져오므로 두 파일을 같은 폴더에 두고 실행합니다.

결과

  방치 매월 분기 매년 밴드
CAGR 10.54% 9.09% 9.17% 9.27% 9.25%
연 변동성 11.2% 7.8% 7.8% 7.8% 7.8%
MDD -47.0% -27.0% -26.5% -24.7% -26.5%
샤프비율 0.69 0.78 0.79 0.80 0.80
최장 침체 73개월 41개월 40개월 40개월 40개월
매매 횟수 0회 884회 294회 73회 40회

첫 번째 예상 밖: 방치가 수익률 1위

방치한 쪽이 연 10.54%로 가장 높습니다. 매년 리밸런싱보다 1.3%p 위입니다. 73년을 굴리면 이 차이는 어마어마해집니다.

그런데 이걸 “리밸런싱은 손해”라고 읽으면 완전히 틀립니다. 방치했을 때 주식 비중이 어떻게 됐는지 보면 압니다.

방치했을 때 주식 비중의 표류

1950년에 60%로 시작한 주식 비중이 10년 만에 87%가 되고, 2000년에는 97%, 마지막에는 98.9%입니다. 73년 평균 비중이 92%입니다. 즉 이 포트폴리오는 어느 시점부터 60/40이 아니라 그냥 주식 포트폴리오였습니다.

자산 배분 글에서 주식 100%의 CAGR이 11.29%, MDD가 -49.0%였습니다. 방치한 60/40은 10.54%에 -47.0%. 거의 주식 100%와 같은 숫자입니다. 수익률이 높은 게 아니라, 어느새 다른 포트폴리오가 되어 있었던 것입니다.

낙폭 그림이 이걸 더 분명하게 보여줍니다.

방치 vs 매년 리밸런싱 낙폭

2003년과 2009년, 방치한 쪽은 -40%, -47%까지 파였습니다. 매년 리밸런싱한 쪽은 같은 시기에 -25% 안쪽입니다. 60/40을 선택한 사람이 감당하기로 한 위험은 -25% 수준이었을 텐데, 방치하면 본인도 모르게 -47%짜리 포트폴리오를 들고 있게 됩니다.

그래서 리밸런싱의 목적은 수익률을 높이는 것이 아닙니다. 내가 고른 위험 수준을 그대로 유지하는 것입니다. 위험을 그대로 유지한다면 위험조정 수익률로 비교해야 하고, 그 기준(샤프비율)에서는 리밸런싱한 쪽이 0.78~0.80으로 방치의 0.69보다 확실히 낫습니다.

하락장이 있었던 해만 떼어 첫해 1월부터 마지막 해 12월까지의 누적 수익률을 비교하면 차이가 더 눈에 띕니다.

구간 방치 매년 리밸런싱
1973~1974 오일쇼크 -35.4% -21.7%
2000~2002 IT 거품 붕괴 -32.8% -9.1%
2007~2009 금융위기 -14.9% +2.9%
2022 인플레이션 -15.0% -14.9%

금융위기 3년을 통틀어 매년 리밸런싱한 쪽은 오히려 플러스입니다. 2008년에 주식이 폭락하면서 비중이 목표 아래로 떨어지고, 연말에 되돌리면서 싸진 주식을 더 사게 되고, 2009년 반등을 그 늘어난 비중으로 맞았기 때문입니다. 리밸런싱은 구조적으로 “오른 걸 팔고 내린 걸 사는” 행동이 됩니다.

2022년만 예외입니다. 주식과 채권이 같이 떨어진 해라 되돌릴 것이 없었고, 그래서 차이도 0.1%p뿐입니다. 지난 글에서 본 상관계수 문제가 여기서도 그대로 나타납니다.

두 번째 예상 밖: 자주 할수록 나쁘다

표를 다시 보면 매월이 CAGR 9.09%로 넷 중 꼴찌이고, 매년이 9.27%로 1위입니다. 변동성은 넷 다 7.8%로 사실상 같은데 수익률만 다릅니다. 샤프비율도 매년(0.80)이 매월(0.78)보다 높습니다.

위 표는 거래 비용을 넣기 전 결과입니다. 비용까지 넣으면 어떨까 싶어 왕복 0.2%(매도·매수 각 0.1%)를 붙여 봤는데, 차이가 예상보다 훨씬 작았습니다.

  방치 매월 분기 매년 밴드
비용 후 CAGR 감소 0.000%p 0.018%p 0.012%p 0.007%p 0.007%p

매월 884번을 매매해도 연 수익률이 0.018%p 줄어드는 데 그칩니다. 앞서 짚었듯 되돌릴 때 옮기는 금액이 자산의 평균 0.7% 정도뿐이라, 매매 횟수는 많아도 실제 거래액이 작기 때문입니다. 거래 비용 글의 절대 모멘텀 백테스트에서 비용이 0.5%p 넘게 성과를 갉아먹던 것과 대조적입니다.

그러면 매월이 왜 더 나쁠까요. 이 자료에서는 한 달 동안 한 자산이 다른 자산보다 많이 오르면 다음 달에도 그 자산이 앞서는 경향이 있었습니다. 두 자산의 월수익률 차이와 그 한 달 전 값 사이의 상관계수(1차 자기상관)가 +0.24이고, 2~12개월 전 값과의 상관은 -0.08~+0.05로 이보다 훨씬 작습니다. 매월 되돌리면 이 한 달짜리 흐름을 매번 잘라내고, 1년쯤 두면 그 흐름을 탄 채로 지나갑니다. 그런데 이것을 앞서 다룬 모멘텀의 증거로 읽기는 어렵습니다. 실러 자료의 주가와 금리는 월말 값이 아니라 그달의 평균값이고, 평균값으로 수익률을 계산하면 실제로는 아무 경향이 없어도 이웃한 두 달의 수익률이 비슷해져 1차 자기상관이 0.25 안팎으로 생깁니다. 여기서 나온 +0.24는 그 크기와 거의 같습니다.

다만 이 차이는 0.18%p입니다. 73년이라는 한 표본에서 나온 값이고, 데이터를 다른 시장이나 다른 기간으로 바꾸면 순위가 뒤집힐 수 있는 크기입니다. “매년이 매월보다 우월하다”고 단정할 근거로는 약합니다. 안전하게 말할 수 있는 것은 자주 할수록 좋아지지는 않는다는 정도입니다.

밴드 방식은 40번만 매매하고도 매년과 거의 같은 성과를 냈습니다. 손이 가장 덜 가는 선택지입니다.

실전에서 고른다면

이 데이터에서 굳이 하나를 고르라면 연 1회 또는 밴드 방식입니다. 성과가 가장 좋아서라기보다, 매월과 차이가 없으면서 손이 훨씬 덜 가고, 세금이 붙는 계좌에서는 실현이익을 미루는 이점까지 있기 때문입니다. 이 실험에는 세금이 전혀 반영되지 않았는데, 한국의 과세 계좌라면 매매할 때마다 세금이 붙어서 매월 방식의 불리함이 여기서 본 것보다 훨씬 커집니다. 어떤 상품을 어떤 계좌에서 사느냐에 따라 매매차익에 세금이 붙는지, 손실을 다른 이익과 상계할 수 있는지가 달라지는데, 그 내용은 세금 글에 정리했습니다.

정리하면 이렇습니다. 리밸런싱은 수익을 늘리는 장치가 아니라 위험을 처음 정한 자리에 묶어 두는 장치입니다. 안 하면 포트폴리오는 조용히 다른 물건으로 변해 있습니다. 그리고 그 장치는 1년에 한 번이면 충분합니다.

지금까지 두 편에 걸쳐 “상관계수가 낮으면 섞는 게 이득”이라는 말을 숫자로만 확인했습니다. 다음 글에서는 그 관계가 왜 성립하는지, 상관계수와 포트폴리오 변동성 사이의 식을 직접 뜯어보겠습니다.

2026-09-28 수정: 거래 비용 가정을 “편도 0.2%”에서 “왕복 0.2%(매도·매수 각 0.1%)”로, 리밸런싱 때 옮기는 금액을 “자산의 1~2%”에서 “평균 0.7% 정도”로 바로잡았습니다.

2026-10-04 수정: 오르던 것이 더 오르는 경향이 나타나는 기간을 “1~12개월”에서 모멘텀 글과 같은 “3~12개월”로 바로잡았습니다.

2026-10-22 수정: 매월 리밸런싱이 불리했던 이유를 “모멘텀 때문”이라고 단정했던 문단을 이 자료에서 확인되는 1개월 자기상관과 월평균 자료의 한계를 밝히는 설명으로 바꾸고, 2023년 7~9월은 배당 없이 가격 변화만 반영했다는 점을 밝혔습니다.


이 글은 학습과 정보 공유 목적으로 작성되었으며, 특정 종목이나 상품에 대한 투자 권유가 아닙니다. 투자의 판단과 책임은 투자자 본인에게 있습니다.

최종 수정: