# Bold Asset Allocation (BAA) 전략 구현 ## 개요 Bold Asset Allocation (BAA)는 상대 모멘텀과 절대 모멘텀을 결합한 공격적 전술적 자산배분 전략입니다. Wouter J. Keller의 논문 "Relative and Absolute Momentum in Times of Rising/Low Yields" (2022)를 기반으로 구현되었습니다. ## 주요 특징 ### 1. 이중 모멘텀 시스템 - **상대 모멘텀 (SMA12)**: 느린 모멘텀 필터로 공격/방어 유니버스에서 자산 선택 - **절대 모멘텀 (13612W)**: 빠른 모멘텀 필터로 카나리아 유니버스의 크래시 보호 ### 2. 카나리아 유니버스 기반 크래시 보호 - 카나리아 유니버스: SPY, VWO, VEA, BND - Breadth Parameter (B=1): 카나리아 자산 중 **하나라도** 음수 모멘텀이면 방어 모드로 전환 - 결과: 약 60%의 시간을 방어 모드에서 운용 ### 3. 다양한 전략 변형 #### BAA-G12 (Balanced) - **공격 유니버스**: 12개 글로벌 자산 (주식 7 + 대체자산 3 + 채권 2) - **선택**: Top 6 자산 - **성과** (Dec 1970 - Jun 2022): - CAGR: 14.6% - Max DD: 8.7% - Sharpe Ratio: 1.19 - Defensive Fraction: 57.2% #### BAA-G4 (Aggressive) - **공격 유니버스**: 4개 글로벌 자산 (QQQ, VWO, VEA, BND) - **선택**: Top 1 자산 - **성과** (Dec 1970 - Jun 2022): - CAGR: 21.0% - Max DD: 14.6% - Sharpe Ratio: 1.21 - Defensive Fraction: 57.2% #### BAA-G12/T3 - BAA-G12와 동일하나 Top 3 선택 #### BAA-G4/T2 - BAA-G4와 동일하나 Top 2 선택 #### BAA-SPY - 공격 유니버스: SPY만 사용 - 방어/카나리아는 동일 ### 4. 방어 유니버스 - **자산**: TIP, DBC, BIL, IEF, TLT, LQD, BND - **특징**: 인플레이션 보호 채권(TIP) + 원자재(DBC) 포함 - **선택**: Top 3 자산 (SMA12 모멘텀 기준) - **보호**: BIL보다 모멘텀이 낮은 자산은 BIL로 교체 ## 사용 방법 ### 1. 시뮬레이션 모드 (백테스트 결과) ```python from strategies.implementations import BoldAssetAllocation strategy = BoldAssetAllocation() result = strategy.execute({ "initial_capital": 100000, "variant": "BAA-G12", # 또는 "BAA-G4", "BAA-SPY" 등 "use_real_data": False }) print(result) ``` ### 2. 실제 데이터 모드 (포트폴리오 제안) ```python strategy = BoldAssetAllocation() # 현재 날짜 기준 result = strategy.execute({ "initial_capital": 50000, # $50,000 "variant": "BAA-G4", "use_real_data": True, "as_of_date": None, # 현재 날짜 }) # 결과 예시: # { # "mode": "offensive", # 또는 "defensive" # "canary_status": { # "SPY": {"momentum": 0.085, "is_bad": false}, # ... # }, # "portfolio": [ # { # "ticker": "VEA", # "weight": 100.0, # "current_price": 61.06, # "shares": 818, # "actual_amount": 49947.08 # } # ], # "cash_remaining": 52.92 # } ``` ### 3. 특정 날짜 기준 포트폴리오 ```python result = strategy.execute({ "initial_capital": 100000, "variant": "BAA-G12", "use_real_data": True, "as_of_date": "2024-01-31", # YYYY-MM-DD 형식 }) ``` ## 파라미터 설명 | 파라미터 | 기본값 | 설명 | |---------|--------|------| | `initial_capital` | 100000 | 초기 자본 (달러) | | `variant` | "BAA-G12" | 전략 변형 선택 | | `offensive_top` | 6 | 공격 유니버스에서 선택할 자산 수 | | `defensive_top` | 3 | 방어 유니버스에서 선택할 자산 수 | | `breadth_param` | 1 | 카나리아 자산 중 몇 개가 bad일 때 방어 전환 | | `transaction_cost` | 0.001 | 거래 비용 (0.1%) | | `use_real_data` | False | 실제 데이터 사용 여부 | | `as_of_date` | None | 기준일 (None이면 현재, "YYYY-MM-DD" 형식) | ## 모멘텀 계산 방식 ### SMA(12) 상대 모멘텀 ``` momentum = (현재가 / SMA(13)) - 1 ``` - SMA(13): 최근 13개월 종가의 단순이동평균 (현재 포함) - 자산 순위 매기기에 사용 ### 13612W 절대 모멘텀 ``` momentum = (12×RET(1m) + 4×RET(3m) + 2×RET(6m) + 1×RET(12m)) / 19 ``` - 1개월 수익률에 가장 높은 가중치 (40%) - 음수/양수 여부로 크래시 보호 신호 판단 ## 월간 리밸런싱 프로세스 1. **카나리아 체크**: 13612W 모멘텀으로 카나리아 유니버스 평가 2. **모드 결정**: B=1이므로 카나리아 자산 중 1개라도 bad면 방어 모드 3. **자산 선택**: - **공격 모드**: SMA(12) 상위 자산 선택 - **방어 모드**: SMA(12) 상위 자산 선택 + BIL 보호 4. **동일 가중**: 선택된 자산에 동일 비중 배분 5. **매수 수량 계산**: 정수 주식만 매수, 잔액은 현금 보유 ## 실행 결과 예시 ### 공격 모드 (2025-10-04) ```json { "mode": "offensive", "canary_bad_count": 0, "portfolio": [ { "ticker": "VEA", "weight": 100.0, "shares": 818, "actual_amount": 49947.08 } ] } ``` ### 방어 모드 (2024-01-31) ```json { "mode": "defensive", "canary_bad_count": 1, "canary_status": { "VWO": { "momentum": -0.011, "is_bad": true } }, "portfolio": [ {"ticker": "DBC", "weight": 33.33, "shares": 1555}, {"ticker": "TLT", "weight": 33.33, "shares": 374}, {"ticker": "LQD", "weight": 33.33, "shares": 327} ] } ``` ## 성과 지표 ### Keller Ratio (K) ``` K = R × (1 - 2D) / (1 - 2D) when D < 25% ``` - R: CAGR - D: Maximum Drawdown - 작은 낙폭에는 적게, 큰 낙폭에는 많이 패널티 ### 기타 지표 - **UPI** (Ulcer Performance Index): Sharpe Ratio의 변형, 낙폭 기반 - **Sharpe Ratio**: 전통적 위험 조정 수익률 - **Defensive Fraction**: 방어 모드 비율 ## 60/40 벤치마크 대비 성과 | 지표 | BAA-G12 | BAA-G4 | 60/40 | |------|---------|--------|-------| | CAGR | 14.6% | 21.0% | 9.5% | | Max DD | 8.7% | 14.6% | 29.5% | | Sharpe | 1.19 | 1.21 | - | | Volatility | 8.5% | 13.6% | - | ## 테스트 ```bash python test_baa.py ``` ## 참고 문헌 Keller, W. J. (2022). "Relative and Absolute Momentum in Times of Rising/Low Yields: Bold Asset Allocation (BAA)", SSRN 4166845 ## 라이선스 이 구현은 교육 및 연구 목적으로만 사용되어야 합니다.