Files
executor/BAA_STRATEGY_README.md

6.0 KiB
Raw Permalink Blame History

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. 시뮬레이션 모드 (백테스트 결과)

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. 실제 데이터 모드 (포트폴리오 제안)

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. 특정 날짜 기준 포트폴리오

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)

{
  "mode": "offensive",
  "canary_bad_count": 0,
  "portfolio": [
    {
      "ticker": "VEA",
      "weight": 100.0,
      "shares": 818,
      "actual_amount": 49947.08
    }
  ]
}

방어 모드 (2024-01-31)

{
  "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% -

테스트

python test_baa.py

참고 문헌

Keller, W. J. (2022). "Relative and Absolute Momentum in Times of Rising/Low Yields: Bold Asset Allocation (BAA)", SSRN 4166845

라이선스

이 구현은 교육 및 연구 목적으로만 사용되어야 합니다.