Files
executor/API_USAGE_GUIDE.md

429 lines
9.3 KiB
Markdown

# BAA 전략 API 사용 가이드
## 시작하기
### 1. 서버 실행
```bash
# 개발 서버 실행
python manage.py runserver
# 서버가 http://localhost:8000 에서 실행됩니다
```
### 2. 준비된 스크립트 사용
세 가지 편리한 스크립트가 제공됩니다:
#### A. 전체 예제 실행 (`baa_api_examples.sh`)
모든 주요 기능을 순차적으로 테스트합니다.
```bash
./baa_api_examples.sh
```
**실행 내용:**
1. 사용 가능한 전략 목록 조회
2. BAA-G12 시뮬레이션 모드 실행
3. BAA-G4 실제 데이터 모드 (현재 날짜)
4. BAA-G12 특정 날짜 기준 (2024-01-31)
#### B. 빠른 테스트 (`quick_baa_test.sh`)
단일 포트폴리오를 빠르게 생성하고 요약 정보를 표시합니다.
```bash
# 기본 실행 (BAA-G4, $50,000, 현재 날짜)
./quick_baa_test.sh
# 전략 변형 지정
./quick_baa_test.sh BAA-G12
# 전략 + 초기 자본 지정
./quick_baa_test.sh BAA-G4 100000
# 전략 + 초기 자본 + 특정 날짜
./quick_baa_test.sh BAA-G12 75000 2024-01-31
```
**출력 예시:**
```
====== 포트폴리오 요약 ======
기준일: 2025-10-04
모드: offensive
카나리아 bad 개수: 0
총 투자액: $49947.08
잔여 현금: $52.92
====== 포트폴리오 구성 ======
VEA: 818주 @ $61.06 = $49947.08
====== 카나리아 상태 ======
SPY: 모멘텀=8.55%, bad=false
VWO: 모멘텀=10.15%, bad=false
VEA: 모멘텀=8.63%, bad=false
BND: 모멘텀=1.32%, bad=false
```
#### C. 개별 curl 명령어 참조 (`BAA_CURL_EXAMPLES.md`)
다양한 curl 명령어 예제와 응답 샘플을 포함한 상세 가이드입니다.
---
## API 엔드포인트
### 1. 전략 구현체 목록 조회
**요청:**
```bash
GET /api/strategies/implementations/
```
**응답:**
```json
{
"available_implementations": {
"BoldAssetAllocation": {
"name": "BoldAssetAllocation",
"description": "상대 모멘텀과 절대 모멘텀을 결합한 공격적 전술적 자산배분 전략",
"versions": [...]
}
}
}
```
### 2. 전략 실행
**요청:**
```bash
POST /api/strategies/execute/
Content-Type: application/json
{
"strategy_name": "BoldAssetAllocation",
"version": "1.0.0",
"parameters": {
"initial_capital": 50000,
"variant": "BAA-G4",
"use_real_data": true,
"as_of_date": null
}
}
```
**응답:**
```json
{
"execution_id": 123,
"status": "pending",
"message": "Strategy execution started"
}
```
### 3. 실행 결과 조회
**요청:**
```bash
GET /api/executions/{execution_id}/
```
**응답 (완료 시):**
```json
{
"execution_id": 123,
"strategy": "BoldAssetAllocation",
"version": "1.0.0",
"status": "completed",
"started_at": "2025-10-04T10:30:00Z",
"completed_at": "2025-10-04T10:30:10Z",
"result": {
"mode": "offensive",
"portfolio": [...],
"canary_status": {...}
}
}
```
---
## 주요 파라미터
| 파라미터 | 필수 | 기본값 | 설명 |
|---------|------|--------|------|
| `initial_capital` | ✓ | 100000 | 초기 자본 (달러) |
| `variant` | ✓ | "BAA-G12" | 전략 변형 (BAA-G12, BAA-G4, BAA-G12/T3, BAA-G4/T2, BAA-SPY) |
| `use_real_data` | ✓ | false | 실제 데이터 사용 여부 |
| `as_of_date` | ✗ | null | 기준일 (YYYY-MM-DD 형식, null이면 현재) |
| `offensive_top` | ✗ | 전략별 | 공격 유니버스에서 선택할 자산 수 |
| `defensive_top` | ✗ | 3 | 방어 유니버스에서 선택할 자산 수 |
| `breadth_param` | ✗ | 1 | 카나리아 임계값 |
---
## 전략 변형별 특징
### BAA-G12 (Balanced)
- **추천 대상**: 중위험 선호, 분산 투자
- **자산 수**: 12개 (주식 7 + 대체자산 3 + 채권 2)
- **선택**: Top 6
- **기대 CAGR**: ~14.6%
- **기대 MaxDD**: ~8.7%
```bash
./quick_baa_test.sh BAA-G12 100000
```
### BAA-G4 (Aggressive)
- **추천 대상**: 고위험 선호, 집중 투자
- **자산 수**: 4개 (QQQ, VWO, VEA, BND)
- **선택**: Top 1
- **기대 CAGR**: ~21.0%
- **기대 MaxDD**: ~14.6%
```bash
./quick_baa_test.sh BAA-G4 100000
```
### BAA-G12/T3
- **추천 대상**: BAA-G12와 G4의 중간
- **자산 수**: 12개
- **선택**: Top 3
- **기대 CAGR**: ~16.4%
- **기대 MaxDD**: ~11.4%
```bash
./quick_baa_test.sh BAA-G12/T3 100000
```
### BAA-G4/T2
- **추천 대상**: 적당한 공격성
- **자산 수**: 4개
- **선택**: Top 2
- **기대 CAGR**: ~17.7%
- **기대 MaxDD**: ~12.7%
```bash
./quick_baa_test.sh BAA-G4/T2 100000
```
### BAA-SPY
- **추천 대상**: 단순함 선호, SPY 기반
- **자산 수**: 1개 (SPY)
- **선택**: SPY만 사용
- **기대 CAGR**: ~11.4%
- **기대 MaxDD**: ~16.2%
```bash
./quick_baa_test.sh BAA-SPY 100000
```
---
## 실행 모드
### 시뮬레이션 모드 (`use_real_data: false`)
- **목적**: 백테스트 결과 확인
- **데이터**: 1970-2022년 통계 기반
- **실행 시간**: ~2초
- **결과**: CAGR, Sharpe Ratio, Max DD 등 성과 지표
```bash
curl -X POST http://localhost:8000/api/strategies/execute/ \
-H "Content-Type: application/json" \
-d '{
"strategy_name": "BoldAssetAllocation",
"parameters": {
"variant": "BAA-G12",
"use_real_data": false
}
}'
```
### 실제 데이터 모드 (`use_real_data: true`)
- **목적**: 실제 포트폴리오 제안
- **데이터**: yfinance API를 통한 실시간 가격
- **실행 시간**: ~5-15초 (데이터 다운로드 포함)
- **결과**: 티커별 매수 수량, 현재가, 배분액
```bash
curl -X POST http://localhost:8000/api/strategies/execute/ \
-H "Content-Type: application/json" \
-d '{
"strategy_name": "BoldAssetAllocation",
"parameters": {
"variant": "BAA-G4",
"initial_capital": 50000,
"use_real_data": true
}
}'
```
---
## 포트폴리오 해석
### 공격 모드 (Offensive)
카나리아 자산이 모두 양호할 때 활성화됩니다.
**특징:**
- 주식 및 성장 자산에 투자
- 높은 수익 잠재력
- 선택된 자산에 동일 가중 배분
**예시:**
```json
{
"mode": "offensive",
"canary_bad_count": 0,
"portfolio": [
{"ticker": "VEA", "weight": 100.0, "shares": 818}
]
}
```
### 방어 모드 (Defensive)
카나리아 자산 중 1개 이상이 음수 모멘텀일 때 활성화됩니다.
**특징:**
- 채권 및 안전 자산으로 전환
- 크래시 보호
- Top 3 방어 자산 선택
**예시:**
```json
{
"mode": "defensive",
"canary_bad_count": 1,
"portfolio": [
{"ticker": "DBC", "weight": 33.33, "shares": 1555},
{"ticker": "TLT", "weight": 33.33, "shares": 374},
{"ticker": "LQD", "weight": 33.33, "shares": 327}
]
}
```
---
## 워크플로우 예시
### 월간 리밸런싱 워크플로우
```bash
#!/bin/bash
# monthly_rebalance.sh
# 1. 현재 포트폴리오 생성
EXEC_ID=$(curl -s -X POST http://localhost:8000/api/strategies/execute/ \
-H "Content-Type: application/json" \
-d '{
"strategy_name": "BoldAssetAllocation",
"parameters": {
"initial_capital": 100000,
"variant": "BAA-G12",
"use_real_data": true
}
}' | jq -r '.execution_id')
# 2. 실행 완료 대기
sleep 10
# 3. 결과 조회 및 저장
DATE=$(date +%Y%m%d)
curl -s http://localhost:8000/api/executions/${EXEC_ID}/ \
| jq '.result' > portfolio_${DATE}.json
# 4. 매수 주문 생성 (예시)
jq -r '.portfolio[] | "BUY \(.shares) \(.ticker) @ \(.current_price)"' \
portfolio_${DATE}.json > orders_${DATE}.txt
echo "Portfolio saved to portfolio_${DATE}.json"
echo "Orders saved to orders_${DATE}.txt"
```
---
## 트러블슈팅
### 1. "execution_id": null
**원인**: 전략 이름 또는 파라미터 오류
**해결:**
```bash
# 사용 가능한 전략 확인
curl http://localhost:8000/api/strategies/implementations/
```
### 2. "status": "failed"
**원인**: 파라미터 검증 실패 또는 데이터 다운로드 오류
**확인:**
```bash
curl http://localhost:8000/api/executions/{execution_id}/ | jq '.error_message'
```
### 3. 데이터 다운로드 실패
**원인**: 네트워크 또는 yfinance API 문제
**해결:**
- 인터넷 연결 확인
- 잠시 후 재시도
- 다른 날짜로 시도
### 4. 서버 응답 없음
**확인:**
```bash
# 서버 상태 확인
curl http://localhost:8000/api/strategies/implementations/
# Django 서버 로그 확인
python manage.py runserver # 콘솔 출력 확인
```
---
## 성능 최적화
### 1. 병렬 실행
여러 전략을 동시에 실행할 수 있습니다:
```bash
# 동시 실행
curl -X POST http://localhost:8000/api/strategies/execute/ \
-d '{"strategy_name":"BoldAssetAllocation","parameters":{"variant":"BAA-G12","use_real_data":true}}' &
curl -X POST http://localhost:8000/api/strategies/execute/ \
-d '{"strategy_name":"BoldAssetAllocation","parameters":{"variant":"BAA-G4","use_real_data":true}}' &
wait
```
### 2. 캐싱 (향후 구현 예정)
동일한 날짜의 반복 요청은 캐시된 데이터를 사용할 수 있습니다.
---
## 보안 고려사항
### 프로덕션 환경
- `@csrf_exempt` 제거 및 CSRF 토큰 사용
- API 키 인증 추가
- HTTPS 사용
- Rate limiting 적용
---
## 다음 단계
1. **자동화**: cron을 사용한 월간 자동 리밸런싱
2. **알림**: 이메일/슬랙 알림 설정
3. **대시보드**: 웹 UI 추가
4. **백테스트**: 과거 날짜 범위에 대한 성과 분석
---
## 지원
문제가 발생하면 다음을 확인하세요:
- Django 서버 로그
- `BAA_CURL_EXAMPLES.md` 예제
- `BAA_STRATEGY_README.md` 전략 설명