티스토리 뷰

반응형

⚙️ 퀀트 전략 자동 리밸런싱 시스템 구축 (Python + Google Sheets 실습)

지난 글에서는 파이썬으로 팩터 데이터를 수집하고 백테스트를 수행했습니다.
이번엔 그 한 단계 위 — 자동 리밸런싱 시스템을 만들어봅시다.

이 시스템의 목표는 간단합니다.

“매일(혹은 매월) 팩터 데이터를 자동으로 갱신하고,
상위 종목을 자동으로 포트폴리오에 반영하기.”

이 과정은 실제 펀드 운용사들이 사용하는 방식과 거의 동일합니다.
단지 우리는 Python과 Google Sheets만으로 그 구조를 구현해볼 거예요.


1️⃣ 시스템 개요

[Step 1] 데이터 수집 → [Step 2] 팩터 점수 계산 → [Step 3] 상위 종목 선택  
→ [Step 4] 구글 시트에 자동 기록 → [Step 5] 다음 리밸런싱 주기 자동 실행

이 다섯 단계가 자동으로 돌면,
“매달 자동 종목 교체 + 리포트 생성 + 누적 수익률 기록”이 가능합니다.


2️⃣ 준비물

✅ 필수 라이브러리

pip install yfinance pandas numpy gspread oauth2client schedule

✅ Google API 연결 설정

  1. Google Cloud Console에서 “Google Sheets API” 활성화
  2. 서비스 계정 키(JSON) 생성
  3. 공유할 스프레드시트에 서비스 계정 이메일을 편집자 권한으로 추가

3️⃣ 기본 코드 구조

import yfinance as yf
import pandas as pd
import numpy as np
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import schedule, time

# 1. 구글시트 연결
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
client = gspread.authorize(creds)
sheet = client.open("Quant_Portfolio").sheet1

# 2. 데이터 수집
tickers = ["005930.KS", "000660.KS", "035420.KS", "068270.KQ"]

def rebalance():
    data = {}
    for t in tickers:
        df = yf.download(t, period="1y")
        df["returns"] = df["Close"].pct_change()
        momentum = (df["Close"].iloc[-1] / df["Close"].iloc[-120]) - 1
        vol = df["returns"].rolling(60).std().mean()
        roe = np.random.uniform(0.05, 0.2)
        score = (momentum * 0.5) + (roe * 0.3) - (vol * 0.2)
        data[t] = [momentum, vol, roe, score]

    df = pd.DataFrame.from_dict(data, orient="index", columns=["Momentum", "Volatility", "ROE", "Score"])
    df = df.sort_values("Score", ascending=False).head(5)
    sheet.update([df.columns.values.tolist()] + df.values.tolist())
    print("리밸런싱 완료 ✅")

# 3. 스케줄 설정 (매주 월요일 오전 9시)
schedule.every().monday.at("09:00").do(rebalance)

while True:
    schedule.run_pending()
    time.sleep(60)

4️⃣ 이 코드가 하는 일

  • 매주 월요일 오전 9시에 자동 실행
  • 주가 데이터를 가져와 팩터 점수를 계산
  • 상위 5개 종목을 자동으로 Google Sheet에 기록
  • 기록된 종목이 바로 “이번 주 포트폴리오”가 됨

💡 Google Sheet에선
=GOOGLEFINANCE() 함수를 이용해 실시간 주가/수익률 변동을 시각화할 수 있습니다.


5️⃣ 확장 아이디어

반응형

기능 설명

📈 성과 추적 시트에 누적 수익률, MDD, 샤프지수 자동 계산
🧠 알림 Slack Webhook, 이메일로 “리밸런싱 완료” 자동 전송
🧩 다중 포트 구성 멀티팩터 전략(가치·모멘텀·퀄리티) 별로 시트 탭 분리
☁️ 클라우드 실행 Google Cloud Functions / AWS Lambda에서 완전 자동화

6️⃣ 현실 적용 팁

  • 백테스트 기반 기준: 리밸런싱 주기를 너무 짧게(예: 1주일) 하면 거래비용 ↑
  • 데이터 품질 관리: 배당락·액면분할 시 데이터 정제 필요
  • 과최적화 방지: 최근 6개월보다 12개월 기준이 일반적으로 더 안정적

📌 정리

핵심 단계 설명

1 yfinance로 데이터 자동 수집
2 팩터 계산 및 점수화
3 상위 종목 자동 선별
4 구글 시트 업데이트
5 주기적 리밸런싱 자동 실행

👉 이 과정을 자동화하면, 더 이상 “오늘 종목 갈아타야 하나?” 고민이 줄어듭니다.
데이터가 스스로 판단하고, 여러분은 결과를 모니터링만 하면 됩니다.


📘 다음 글 예고

다음 편에서는 **“퀀트 투자 리포트 자동 생성 시스템 – PDF로 매월 수익률 보고서 만들기”**를 다룹니다.
자동으로 수익률 그래프와 주요 지표를 정리해주는 완전 자동화 레벨로 가봅시다.


 

퀀트자동화,리밸런싱시스템,파이썬퀀트,구글시트API,자동포트폴리오,데이터투자,퀀트전략,팩터투자,파이썬자동화,주식리포트


 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함
반응형