

투자를 해야한다는 것은 알고 있지만, 실력과 시간이 부족해서 자동 투자를 시작하지 못하고 있었다.
오늘은 Claude Code + OpenClaw를 적극 활용하여 하루 만에 만든 자동 투자 시스템을 소개한다.
"AI한테 투자해줘~" 라고 하면 될 것 같지만, 현실은 다르다. 작동 안 할 확률이 높다.
핵심은 좋은 전략을 찾고, 백테스팅으로 검증하는 것이다. AI가 잘하는 건 코드를 빠르게 짜는 것이지, 마법처럼 수익을 내는 것이 아니다.
내가 한 과정:
1. 인터넷/논문에서 검증된 퀀트 전략들을 조사
2. Claude Code로 백테스팅 프레임워크를 구축
3. 수십 개의 전략 변형을 배치로 돌려 비교
4. Sharpe ratio, CAGR, MaxDD 기준으로 최적 전략 선별
5. 선별된 전략을 실전 투자 시스템에 배포
요즘에는 인터넷에서 쉽게 접할 수 있는 전략이 정말 많다. 중요한 것은 그걸 자기 상황에 맞게 파라미터를 조정하고, 과거 데이터로 검증하는 과정이다.
프로젝트는 크게 두 모듈로 나뉜다:
quanty/
├── backtest/ ← 백테스팅 프레임워크
│ ├── src/quanty/
│ │ ├── data/ ← 데이터 소스 (Yahoo, FRED, Upbit)
│ │ ├── strategy/ ← 전략 구현체들
│ │ ├── engine/ ← 백테스트 엔진, 포트폴리오, 메트릭스
│ │ └── report/ ← 리포트 생성
│ └── strategies/ ← TOML 설정 파일들
│
├── invest/ ← 실전 투자 시스템
│ ├── src/invest/
│ │ ├── broker/ ← KIS(한국투자증권), Upbit 브로커
│ │ ├── executor/ ← 매매 실행 엔진
│ │ ├── scheduler/ ← APScheduler 기반 스케줄러
│ │ ├── notify/ ← Telegram 알림
│ │ └── strategy/ ← 백테스트 전략을 실전에 연결하는 어댑터
│ └── docker-compose.yml
[백테스팅]
전략 TOML 작성 → 백테스트 엔진 실행 → 메트릭스 비교 → 최적 전략 선정
↓
[실전 투자]
스케줄러 (매주 화요일 10AM ET) → 시그널 생성 → 리스크 체크 → 매매 실행 → Telegram 알림
실전 매매 흐름 (상세):
1. MultiStrategyRunner가 각 전략의 시그널을 생성
2. 전략별 가중치를 배분 비율에 따라 병합: merged_weight[sym] = Σ(전략_weight × allocation)
3. 리스크 체크 통과 여부 확인
4. 마켓 시간 확인 (장 마감이면 다음 개장까지 대기)
5. 브로커별 독립 포트폴리오로 매매 계산:
invest/strategies/live.toml에서 여러 전략을 조합할 수 있다:
[[strategies]]
config = "strategies/macro_rotation_weekly.toml"
initial_balance = 3000 # 비율: 3000/(3000+1000) = 75%
rebalance_weekday = 1 # 화요일
[[strategies]]
config = "strategies/zscore_btc.toml"
initial_balance = 1000 # 25%
rebalance_weekday = 1
initial_balance는 실제 금액이 아니라 비율 계산용이다. 실제 매매는 브로커의 실시간 잔고를 기준으로 한다.
핵심 아이디어: 거시경제 지표를 feature로 사용해 자산별 수익률을 예측하고, 포트폴리오를 자동 배분한다.
| 항목 | 내용 |
|---|---|
| 투자 유니버스 | SPY(미국주식), GLD(금), BND(채권), BTC(비트코인) |
| 매크로 피처 | VIX(변동성), 10Y-3M 수익률 곡선, FFR(기준금리) |
| 모델 | RandomForest (n_estimators=100, max_depth=3) |
| 학습 윈도우 | 롤링 4년 |
| 리밸런싱 | 월간 / 주간 변형 |
| BTC 상한 | 10% (초과분은 ETF로 재분배) |
작동 방식:
1. 과거 4년 데이터로 각 자산의 N일 후 수익률을 학습
2. 현재 매크로 지표를 입력하여 각 자산의 미래 수익률을 예측
3. 양수 수익률이 예측된 자산에만 역변동성 가중으로 배분
4. 예측 수익률이 모두 음수면 → 전액 현금
핵심 아이디어: 가격의 Z-Score를 계산하여 추세를 추종한다. 상승 추세에 진입, 하락 전환 시 퇴장.
| 항목 | 내용 |
|---|---|
| 투자 유니버스 | BTC, ETH, XRP, SOL (개별 또는 조합) |
| 데이터 | Upbit 1시간봉 캔들 |
| 지표 | Z-Score = (가격 - EMA) / 표준편차 |
| 진입 기준 | Z > 0.5 (상승 추세) |
| 퇴장 기준 | Z < -0.5 (하락 추세) |
| EMA 기간 | 65 |
히스테리시스 설계로 빈번한 매매를 방지한다. 낮은 승률(~47%)이지만, 평균 수익 >> 평균 손실로 양의 기대값을 가진다.
핵심 아이디어: 매크로 로테이션(ETF)과 Z-Score(크립토)를 결합한다.
| 설정 | 매크로(ETF) | 크립토 |
|---|---|---|
| 95/5 | 95% | 5% |
| 90/10 | 90% | 10% |
| 85/15 | 85% | 15% |
| 80/20 | 80% | 20% |
매크로 부분은 월간/주간 리밸런싱, 크립토 부분은 Z-Score 기반 일간 신호.
핵심 아이디어: 절대 모멘텀 + 상대 모멘텀으로 크립토를 선별한다.
모든 전략을 한 번에 비교할 수 있다:
uv run python -m quanty --batch strategies/all.toml
결과는 Sharpe ratio 기준 내림차순으로 정렬되어 출력되고, results/comparison_<timestamp>.txt에 자동 저장된다.
================================================================
STRATEGY COMPARISON
================================================================
Strategy CAGR Sharpe Sortino MaxDD Vol Calmar Trades Final($)
----------------------------------------------------------------
macro_zscore 24.10% 0.26 0.10 -23.78% 2.52% 1.01 2602 465,406
macro_rotation 11.22% 0.85 1.34 -18.24% 9.01% 0.62 73 198,450
...
================================================================
(Sorted by Sharpe ratio, descending)
| 소스 | 용도 | API | 캐시 |
|---|---|---|---|
| FRED (연방준비은행) | VIX, 수익률곡선, 기준금리 | 공식 REST API (api.stlouisfed.org) | PostgreSQL |
| Upbit | 크립토 1시간봉 캔들 | REST API (api.upbit.com) | PostgreSQL |
| Yahoo Finance | 미국 ETF 일봉 | yfinance 라이브러리 | Parquet 파일 |
FRED 공식 API:
심볼 라우팅:
"FRED:VIXCLS" → FRED 공식 API → PostgreSQL 캐시
"UPBIT:BTC:60m" → Upbit REST API → PostgreSQL 캐시
"SPY" → Yahoo Finance → Parquet 파일 캐시
| 브로커 | 대상 | 인증 | 매매 방식 |
|---|---|---|---|
| 한국투자증권 (KIS) | SPY, GLD, BND | OAuth 2.0 (24시간 토큰) | 해외주식 시장가 주문 |
| Upbit | BTC | JWT (요청별 서명) | 시장가 주문 |
KIS: 실전/모의투자 계정 모두 지원 (KIS_ACCOUNT_TYPE=01 실전, 03 모의)
리밸런싱 시 알림 내용:
매일 4:30 PM ET에 일간 스냅샷도 전송한다.
Docker Compose로 배포한다:
services:
db:
image: postgres:16-alpine # 매매 기록, 시그널 저장
app:
build: invest/Dockerfile # Python 3.13 + uv
env_file: .env.deploy # API 키, 브로커 설정
restart: unless-stopped # 자동 재시작
스케줄러 (APScheduler):
현재는 직접 전략을 찾아서 구현하고 백테스트하는 구조다. 이걸 OpenClaw로 자동화하면 어떨까?
[Daily Quant Digest] ← 매일 퀀트 리서치/뉴스레터 수집
↓
[전략 추출] ← OpenClaw가 논문/기사에서 전략 로직 추출
↓
[자동 코딩] ← 백테스팅 코드 자동 생성 (TOML + Strategy 클래스)
↓
[백테스트 실행] ← 기존 프레임워크에서 자동 실행
↓
[결과 필터링] ← Sharpe > 0.8, MaxDD < -25% 등 기준으로 선별
↓
[Telegram 알림] ← "유의미한 전략 발견!" 사용자에게 통지
0 6 * * * /openclaw/daily_quant_digest.py # 매일 새벽 6시
0 7 * * * /openclaw/extract_strategies.py # 전략 추출
0 8 * * * /openclaw/auto_backtest.py # 자동 백테스트
0 9 * * * /openclaw/notify_findings.py # 결과 알림
기대 효과:
Claude Code로 하루 만에 백테스팅 프레임워크부터 실전 자동매매까지 구축했다. 핵심은:
다음 단계는 OpenClaw로 전략 발굴 자체를 자동화하는 것이다. AI가 매일 새로운 전략을 찾아서 검증하고, 유의미한 결과만 알려주는 시스템. 투자의 미래가 이런 방향이지 않을까.
Built with Claude Code + OpenClaw
Tech Stack: Python 3.13, uv, PostgreSQL, Docker, APScheduler, KIS API, Upbit API, FRED API, Telegram Bot API