429 lines
9.3 KiB
Markdown
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` 전략 설명
|