Quant Trading with Claude Code (feat: OpenClaw)

이투식·2026년 2월 15일
post-thumbnail


투자를 해야한다는 것은 알고 있지만, 실력과 시간이 부족해서 자동 투자를 시작하지 못하고 있었다.
오늘은 Claude Code + OpenClaw를 적극 활용하여 하루 만에 만든 자동 투자 시스템을 소개한다.

목차

  1. AI 자동 투자에서의 중요한 점 — 전략과 백테스팅
  2. 시스템 구조와 현재 워크플로우
  3. 전략 소개
  4. 사용한 API와 데이터 소스
  5. 발전 방향 — OpenClaw 자동화

1. AI 자동 투자에서의 중요한 점 — 전략과 백테스팅

"AI한테 투자해줘~" 라고 하면 될 것 같지만, 현실은 다르다. 작동 안 할 확률이 높다.

핵심은 좋은 전략을 찾고, 백테스팅으로 검증하는 것이다. AI가 잘하는 건 코드를 빠르게 짜는 것이지, 마법처럼 수익을 내는 것이 아니다.

내가 한 과정:
1. 인터넷/논문에서 검증된 퀀트 전략들을 조사
2. Claude Code로 백테스팅 프레임워크를 구축
3. 수십 개의 전략 변형을 배치로 돌려 비교
4. Sharpe ratio, CAGR, MaxDD 기준으로 최적 전략 선별
5. 선별된 전략을 실전 투자 시스템에 배포

요즘에는 인터넷에서 쉽게 접할 수 있는 전략이 정말 많다. 중요한 것은 그걸 자기 상황에 맞게 파라미터를 조정하고, 과거 데이터로 검증하는 과정이다.


2. 시스템 구조와 현재 워크플로우

프로젝트는 크게 두 모듈로 나뉜다:

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. 브로커별 독립 포트폴리오로 매매 계산:

  • KIS: SPY/GLD/BND의 USD 주식 매매
  • Upbit: BTC의 KRW 암호화폐 매매
  1. 매도 먼저 실행 → 매수 실행 (시장가 주문)
  2. Telegram으로 결과 알림 (포트폴리오 현황, 목표 비중, 체결 내역, 백테스트 벤치마크 비교)

멀티 전략 지원

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는 실제 금액이 아니라 비율 계산용이다. 실제 매매는 브로커의 실시간 잔고를 기준으로 한다.


3. 전략 소개

A. Macro Rotation (매크로 로테이션)

핵심 아이디어: 거시경제 지표를 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. 예측 수익률이 모두 음수면 → 전액 현금

B. Z-Score (크립토 트렌드 팔로잉)

핵심 아이디어: 가격의 Z-Score를 계산하여 추세를 추종한다. 상승 추세에 진입, 하락 전환 시 퇴장.

항목내용
투자 유니버스BTC, ETH, XRP, SOL (개별 또는 조합)
데이터Upbit 1시간봉 캔들
지표Z-Score = (가격 - EMA) / 표준편차
진입 기준Z > 0.5 (상승 추세)
퇴장 기준Z < -0.5 (하락 추세)
EMA 기간65

히스테리시스 설계로 빈번한 매매를 방지한다. 낮은 승률(~47%)이지만, 평균 수익 >> 평균 손실로 양의 기대값을 가진다.

C. Macro + Z-Score 하이브리드

핵심 아이디어: 매크로 로테이션(ETF)과 Z-Score(크립토)를 결합한다.

설정매크로(ETF)크립토
95/595%5%
90/1090%10%
85/1585%15%
80/2080%20%

매크로 부분은 월간/주간 리밸런싱, 크립토 부분은 Z-Score 기반 일간 신호.

D. Dual Momentum (듀얼 모멘텀)

핵심 아이디어: 절대 모멘텀 + 상대 모멘텀으로 크립토를 선별한다.

  1. 절대 모멘텀: 21일 수익률 > 0인 코인만 통과 (추세 필터)
  2. 상대 모멘텀: 통과한 코인 중 상위 2개 선택
  3. 선택된 코인에 균등 배분, 통과한 코인이 없으면 → 100% 현금

배치 백테스트 비교

모든 전략을 한 번에 비교할 수 있다:

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)

4. 사용한 API와 데이터 소스

데이터 수집

소스용도API캐시
FRED (연방준비은행)VIX, 수익률곡선, 기준금리공식 REST API (api.stlouisfed.org)PostgreSQL
Upbit크립토 1시간봉 캔들REST API (api.upbit.com)PostgreSQL
Yahoo Finance미국 ETF 일봉yfinance 라이브러리Parquet 파일

FRED 공식 API:

  • 무료 API 키 발급: https://fred.stlouisfed.org/docs/api/api_key.html
  • Rate limit: 120 req/min (충분)
  • 처음에 CSV 스크래핑 엔드포인트를 썼다가 502/504 에러로 고생 → 공식 API로 전환하니 안정적
  • PostgreSQL에 캐시하여 한 번 받은 데이터는 다시 API 호출 불필요 (gap-fill 패턴)

심볼 라우팅:

"FRED:VIXCLS"    → FRED 공식 API → PostgreSQL 캐시
"UPBIT:BTC:60m"  → Upbit REST API → PostgreSQL 캐시
"SPY"            → Yahoo Finance  → Parquet 파일 캐시

실전 매매 브로커

브로커대상인증매매 방식
한국투자증권 (KIS)SPY, GLD, BNDOAuth 2.0 (24시간 토큰)해외주식 시장가 주문
UpbitBTCJWT (요청별 서명)시장가 주문

KIS: 실전/모의투자 계정 모두 지원 (KIS_ACCOUNT_TYPE=01 실전, 03 모의)

Telegram 알림

리밸런싱 시 알림 내용:

  • 포트폴리오 총 가치 (KIS USD + Upbit KRW→USD 환산)
  • 목표 비중과 예측 수익률
  • 실행된 매매 내역
  • 백테스트 벤치마크 비교 (CAGR, Sharpe, MaxDD, 월간 승률)

매일 4:30 PM ET에 일간 스냅샷도 전송한다.


5. 배포 구조

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):

  • 리밸런싱: 매주 화요일 10:00 AM ET (뉴욕 시간)
  • 일간 스냅샷: 평일 4:30 PM ET
  • KIS 토큰 갱신: 12시간마다
  • 헬스체크: 5분마다
  • 장 마감 시: 다음 개장(9:30 AM ET)까지 자동 대기

6. 발전 방향 — OpenClaw 자동화

현재는 직접 전략을 찾아서 구현하고 백테스트하는 구조다. 이걸 OpenClaw로 자동화하면 어떨까?

구상하는 파이프라인

[Daily Quant Digest]         ← 매일 퀀트 리서치/뉴스레터 수집
        ↓
[전략 추출]                  ← OpenClaw가 논문/기사에서 전략 로직 추출
        ↓
[자동 코딩]                  ← 백테스팅 코드 자동 생성 (TOML + Strategy 클래스)
        ↓
[백테스트 실행]              ← 기존 프레임워크에서 자동 실행
        ↓
[결과 필터링]                ← Sharpe > 0.8, MaxDD < -25% 등 기준으로 선별
        ↓
[Telegram 알림]              ← "유의미한 전략 발견!" 사용자에게 통지

OpenClaw Cron Job 설계

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         # 결과 알림

기대 효과:

  • 매일 새로운 전략을 자동으로 발굴하고 검증
  • 사람이 할 일: 알림을 보고 최종 판단만 하면 됨
  • 점점 더 많은 전략이 축적되면서 포트폴리오 다각화 가능

추가 발전 방향

  1. 실시간 모니터링 대시보드: Grafana + PostgreSQL 메트릭스
  2. 슬리피지/거래비용 정교화: 백테스트의 현실성 향상
  3. 옵션/선물 헤징: 하락장 대비 자동 헤징 전략
  4. 멀티 마켓 확장: 한국 주식, 일본 ETF 등

마무리

Claude Code로 하루 만에 백테스팅 프레임워크부터 실전 자동매매까지 구축했다. 핵심은:

  1. 전략이 먼저다 — AI는 도구일 뿐, 검증된 전략 없이는 의미 없다
  2. 백테스팅은 필수다 — 과거에 안 되는 전략이 미래에 될 리 없다
  3. 자동화가 핵심이다 — 감정 개입 없이 룰 기반으로 매매

다음 단계는 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

profile
problem solver

0개의 댓글