티스토리 뷰
반응형
⚙️ 퀀트 전략 자동 리밸런싱 시스템 구축 (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 연결 설정
- Google Cloud Console에서 “Google Sheets API” 활성화
- 서비스 계정 키(JSON) 생성
- 공유할 스프레드시트에 서비스 계정 이메일을 편집자 권한으로 추가
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,자동포트폴리오,데이터투자,퀀트전략,팩터투자,파이썬자동화,주식리포트
'주식' 카테고리의 다른 글
| 🧮 퀀트 전략 최적화 – 백테스트 기반 ‘가중치 자동 조정 시스템’ 구축하기 (0) | 2025.10.20 |
|---|---|
| 📊 퀀트 투자 리포트 자동 생성 시스템 – Python으로 PDF 보고서 만들기 (0) | 2025.10.20 |
| 💻 팩터 백테스트 자동화 – 파이썬으로 팩터별 성과를 시각화하기 (0) | 2025.10.15 |
| 🔄 팩터 로테이션(Factor Rotation) 전략 – 시장 국면에 따라 팩터는 달라진다 (0) | 2025.10.14 |
| 🧠 멀티팩터(Multi-Factor) 전략 – 팩터를 조합해 시장을 이기는 법 (0) | 2025.10.13 |
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- CI/CD
- 웹개발
- ai철학
- JAX
- 딥러닝
- seo 최적화 10개
- kotlin
- PostgreSQL
- Express
- 백엔드개발
- SEO최적화
- Prisma
- DevOps
- nextJS
- rag
- Python
- llm
- 압박면접
- Next.js
- 개발블로그
- 프론트엔드개발
- 쿠버네티스
- Redis
- REACT
- JWT
- fastapi
- flax
- Docker
- NestJS
- node.js
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함
반응형

