기본 콘텐츠로 건너뛰기

매달 자동으로 자산 비중 조정하는 방법

리밸런싱은 “자주”가 아니라 “일관되게” 하는 것이 핵심입니다. 이번 글은 코딩이 익숙하지 않은 분도 따라 할 수 있도록, 구글 시트 + 알림 + 간단 규칙만으로 월 1회 자동 리밸런싱 루틴을 만드는 방법을 정리했습니다.


1) 먼저 수치로 잠그는 가드레일

  • 현금 버퍼: 계좌가치의 10~15%
  • 리밸런싱 밴드(상대): ±20% (편차율이 20% 넘을 때만 조정)
  • 노출 캡: 주식 합산 ≤ 55%, 상관 0.8↑ 쌍 합산 ≤ 25%, 섹터 ≤ 20%
  • 실행 시간: 매월 1일 21:00 (장중 변경 금지)
  • 비용·회전율: 월 회전율 ≤ 100%, 연 비용 ≤ 0.6%p


2) 시트 구조(복붙용)

아래 표를 그대로 구글 시트에 붙여넣고, ‘계좌가치(₩)’만 입력하면 나머지는 자동 계산되게 설계합니다.

자산 목표w 현재w 편차율=(현재-목표)/목표 밴드 조정액(₩)
국내주식 0.25 =현재가치/계좌가치 =(C2-B2)/B2 0.20 =IF(ABS(D2)>E2, (B2-C2)*계좌가치, 0)
해외주식 0.25 =현재가치/계좌가치 =(C3-B3)/B3 0.20 =IF(ABS(D3)>E3, (B3-C3)*계좌가치, 0)
채권 0.30 =현재가치/계좌가치 =(C4-B4)/B4 0.20 =IF(ABS(D4)>E4, (B4-C4)*계좌가치, 0)
현금 0.20 =현재가치/계좌가치 =(C5-B5)/B5 0.20 =IF(ABS(D5)>E5, (B5-C5)*계좌가치, 0)

노트: 계좌가치는 합계(국내주식+해외주식+채권+현금), 현재가치는 각 자산 항목의 현재 평가금액입니다.


3) 실행 규칙 — ‘필요한 자산만, 조금만’

  • |편차율| > 밴드(0.20)인 자산만 조정
  • max_step: 1회 비중 이동 ≤ 3%p (과도한 체결·비용 방지)
  • 주식 합산 ≤ 55%, 섹터 ≤ 20%, 상관쌍(0.8↑) 합산 ≤ 25%
  • 비용 추정(수수료+슬리피지) > 기대 이익이면 보류
  • 매도 → 매수 순서, 현금 버퍼 10~15% 유지


4) 월 1회 자동 알림(코딩 초보용) — Apps Script

시트 → 확장 프로그램 > Apps Script에서 아래 코드를 붙여넣고, 시간 기반 트리거를 매월 1일 21:00(Asia/Seoul)로 설정합니다.

function rebalanceAlert(){
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('리밸런싱'); // 위 표가 있는 시트명
  const rows = [[2,'국내주식'],[3,'해외주식'],[4,'채권'],[5,'현금']];
  const account = sh.getRange('H1').getValue(); // H1=계좌가치
  let lines = [];
  rows.forEach(r=>{
    const asset = r[1];
    const target = sh.getRange(r[0],2).getValue(); // B=목표w
    const current = sh.getRange(r[0],3).getValue(); // C=현재w
    const drift = (current - target)/target;
    const band  = sh.getRange(r[0],5).getValue(); // E=밴드
    if (Math.abs(drift) > band){
      const adj = (target - current) * account;
      lines.push(`${asset}: 편차율 ${(drift*100).toFixed(1)}% → 조정액 ${Math.round(adj).toLocaleString()}원`);
    }
  });
  if(lines.length===0){ lines.push('조정 없음(모든 자산 편차율 ≤ 밴드)'); }
  const body = [
    '[리밸런싱 알림]',
    `계좌가치: ${Math.round(account).toLocaleString()}원`,
    ...lines,
    '규칙: max_step 3%p, 주식합산 ≤55%, 비용>이익 시 보류'
  ].join('\n');
  MailApp.sendEmail(Session.getActiveUser().getEmail(), '월간 리밸런싱 알림', body);
}
  

결과: 이메일로 “조정 필요 자산과 금액”이 도착합니다. 실제 주문은 본인 앱/증권사에서 수동 확인 후 진행하세요.


5) 체크리스트(월 10분)

  • ① 편차율>밴드 자산만 조정했는가?
  • ② 주식 합산 ≤55%, 섹터 ≤20%, 상관쌍 ≤25%인가?
  • ③ 회전율 ≤100%/월, 알림 ≤10건/일, 조치율 ≥70% 유지?
  • ④ 20일 변동성 >12% 또는 누적손익 ≤ -3R이면 보수 모드 전환했는가?
  • ⑤ 저널에 날짜·사유·조치·비용을 기록했는가?(5분)


6) 자주 묻는 질문

Q. 월 1회 vs 주 2회, 무엇이 좋나요?
초기엔 월 1회가 비용·체력 면에서 유리합니다. 알림 과다·편차 누적이 크면 주 2회로.

Q. 밴드 ±20%는 고정인가요?
시작값일 뿐입니다. 경보가 과다하면 ±25%, 너무 뜸하면 ±15%로 조정하세요.

Q. 자동 주문까지 가능한가요?
증권사 API가 있어야 합니다. 본 글은 알림·의사결정 자동화까지 다룹니다(주문은 본인 확인 후 실행).


마무리

리밸런싱은 규칙 → 알림 → 10분 실행의 반복입니다. 오늘은 시트에 목표 비중·밴드·노출 캡을 입력하고, 매월 1일 21:00 알림을 걸어보세요. 내려갈 때 덜 잃고, 오를 때는 놓치지 않는 구조가 만들어집니다.

※ 교육용 정보이며 특정 상품 권유가 아닙니다. 수수료·세율·앱 기능은 기관 최신 공지를 확인하세요.


다음 글 예고

다음 글에서는 리밸런싱 후 성과를 점검하고, 필요한 조정을 결정하는 절차를 제시합니다. “잘했다/못했다”가 아니라 무엇을 바꿀지가 핵심입니다.

  • 📈 KPI 대시보드: 수익률, 변동성, MDD, 회전율, 비용
  • 🧪 롤링 12개월 성과와 벤치마크 비교
  • 🧩 드리프트·노출·알림 데이터로 원인 분석
  • 🛠 조정 룰: 밴드·노출 캡·현금 버퍼·리밸런싱 주기

월 10분 알림 + 분기 30분 리뷰만으로도 포트폴리오의 체력이 달라집니다.