기본 콘텐츠로 건너뛰기

자산 비중을 자동으로 조정하는 방법 — 드리프트·밴드·주문 사이징 실전 가이드

포트폴리오가 좋아 보일수록 비중은 한쪽으로 기울었습니다. 

승자가 더 커지고, 위험은 조용히 커졌죠. 그래서 저는 매주 같은 시간에 자동 조정이 돌아가게 했습니다. 편차를 계산하고(드리프트), 밴드와 한도를 적용해 필요한 만큼만 주문이 나가도록요. 그 순간부터 그래프의 요동이 줄었습니다.

이번 글은 그 방법을 한 편에 정리합니다. 드리프트 계산 → 밴드/한도 적용 → 주문 사이징 → 실행·비용 → 운영 루틴 순서로, 바로 붙여 넣어 쓸 수 있는 템플릿과 의사코드를 제공합니다.


핵심 개념 정리

  • 목표 비중 wtarget: 전략이 원하는 자산 비율(예: 주식 50/채권 40/현금 10).
  • 현재 비중 wnow: 실시간 평가금액 기준 현재 비율.
  • 드리프트: drift = (w_now − w_target) / max(ε, w_target) (상대 편차).
  • 밴드: 조정 임계치(예: ±20% 상대 밴드) 밖일 때만 주문.
  • 노출 한도: 종목 1R, 섹터 2R, 고상관쌍 합산 25% 등 위험 캡.
  • 사이징(R): 1R=계좌 손실 1% 등 위험 단위로 주문 규모 제한.

리밸런싱의 목적은 수익 극대화가 아니라 위험과 행동의 일관성 유지입니다.

엔진 흐름(One-Pager)

입력: 보유목록, 가격, 목표비중, 밴드, 한도(R), 비용(수수료·슬리피지)
로직: 드리프트 계산 → 밴드 밖 자산 선별 → 한도/상관 체크 → 주문 사이징
출력: 주문 초안(수량·가격정책) + 로그 + 리포트(편차/노출/비용)
스케줄: 화·금 21:00 정기 실행 + 입출금/배당 시 보조 실행

수식 & 의사코드

# 드리프트 계산
for asset in universe:
  w_now   = value(asset)/portfolio_value
  drift   = (w_now - w_target[asset]) / max(0.01, w_target[asset])

# 밴드/한도 통과 자산만 주문 생성
if abs(drift) > band and within_limits(asset):
  delta_weight = clamp(w_target[asset] - w_now, -max_step, +max_step)
  cash_delta   = delta_weight * portfolio_value
  qty_target   = floor(cash_delta / price(asset), lot_size(asset))
  # R-기반 사이징
  qty = min_by_R(qty_target, R=0.01, vol=atr(asset))
  place(order(asset, qty, policy="limit/partial"))

max_step으로 한 번에 조정할 최대 비중을 제한하면 체결·세금 충격을 줄일 수 있습니다.


데이터 구조(추천)

테이블핵심 컬럼비고
positionsasset, qty, avg_price, sector, group현재 보유
targetsasset, w_target, band_rel, max_step자산별 목표·밴드
limitstype(sector/corr), key, cap_R/cap_w노출 한도
pricesasset, close, atr, lot사이징·체결정책
logsts, asset, action, qty, reason감사·리포트


미니 사례(4자산)

자산목표 w현재 w드리프트밴드(±20%)조치
KOSPI ETF0.400.48+20%경계밴드 초과 → 소폭 매도
KOSDAQ ETF0.100.06-40%초과매수 후보
Bond ETF0.400.39-2.5%유지
현금0.100.07-30%초과입금·매도자금 배분

결론: 과매수된 KOSPI를 줄여 KOSDAQ·현금 목표치로 이동. 섹터/상관 한도를 넘지 않는 범위에서 R-사이징으로 주문.


주문 사이징 — 비중→수량 변환

delta_w   = target_w - now_w
cash_delta= delta_w * 포트폴리오가치
raw_qty   = floor(cash_delta / 종가, 호가/수량 최소단위 반영)
R-제한    = min(raw_qty, qty_by_R(계좌가치*R, ATR, 가격))
실행정책  = 유동성 낮음→지정가 분할, 높음→시장가/조건부
  • 유동성 낮은 종목은 분할·시간차 체결로 슬리피지 완화.
  • 세금/수수료/미체결률을 모형에 반영해 주문 전 비용을 추정.


비용·회전율 관리

  • 회전율 상한: 월 100~120%를 KPI로 두고 초과 시 밴드 확대(+5~10%p).
  • 현금흐름 활용: 납입/배당 자금으로 부족 자산만 채우기(추가 체결 최소화).
  • 슬리피지 모델: ATR·스프레드·거래대금 기반 보수적 가정.

리밸런싱 이익보다 거래비용이 커지지 않도록, “필요할 때만”·“작게 나눠”가 원칙입니다.


노출 한도(리스크 캡) 설정

  • 종목 1R, 섹터 2R, 테마 2R, 고상관쌍 합산 25% 이내.
  • 변동성 급증 시 현금 쿠션 5~15% 자동 확대.
  • 한도 위반 시 증가 주문 금지, 감축 주문만 허용.


운영 루틴(모의→소액→확대)

  1. 모의 2주: 밴드·한도·주문 정책 로그 점검(체결/미체결·비용 기록).
  2. 소액 4주: 1R=0.5~1%로 실전 운용, 회전율·비용·드리프트 축소 효과 추적.
  3. 확대: KPI가 임계 내 유지되면 목표 비중으로 단계 확대.


체크리스트 12

  • 목표 w·밴드·max_step이 문서화되어 있는가?
  • 드리프트 계산에 결측/휴장/분할 조정이 반영되는가?
  • 종목/섹터/상관 한도가 시스템에 강제되는가?
  • R-사이징이 과도한 포지션을 자동 제한하는가?
  • 수수료·세금·슬리피지를 주문 전 추정하는가?
  • 유동성 낮은 종목은 분할·지정가 정책을 쓰는가?
  • 회전율이 월 상한을 넘으면 밴드를 자동 확대하는가?
  • 입출금/배당 시 현금으로 부족 자산만 채우는가?
  • 실행 로그·사유가 저널에 자동 기록되는가?
  • 리포트 1페이지(편차Top5·노출·비용·회전율)가 생성되는가?
  • 규칙 변경은 비시장시간에만 이루어지는가?
  • 중단 기준(월 -3R, 섹터 2R 초과 등)이 설정되어 있는가?


결론: 자동 비중 조정은 “많이 바꾸기”가 아니라 필요한 만큼만, 규칙대로 움직이는 일입니다. 오늘은 목표 비중·밴드·한도 3줄과 실행 시간을 문서화하고, 의사코드를 여러분의 도구에 맞게 옮겨 보세요. 내일의 흔들림이 줄어듭니다.

※ 교육용 정보이며, 특정 서비스·상품을 권유하지 않습니다.


다음 글 예고

다음 글에서는 자동화로 분산투자를 완성하는 법을 다룹니다. 자산군·지역·섹터·팩터 분산, 상관·변동성 타깃팅, 리스크 균형화(ERC) 아이디어를 실전형으로 정리합니다.

이제 자동 조정이 된다면, 남은 퍼즐은 분산입니다. 상관과 변동성을 데이터로 측정하고, 규칙으로 배분하면 흔들림에 강한 포트폴리오가 만들어집니다.

다음 글에서 다룰 것

  • 분산 축: 자산군·지역·섹터·팩터(가치/퀄리티/모멘텀)
  • 상관 관리: 고상관쌍 제한·히트맵 기반 노출 캡
  • 변동성 타깃팅: 포트 변동성을 일정 구간에 맞추는 규칙
  • ERC 아이디어: 리스크 균형 배분의 자동화 루틴
  • 운영: 월간 대시보드(상관·노출·MDD·회전율) 자동 생성

구독을 눌러 알림을 받아보세요.