feat: 리밸런싱 엔진 V1 + GAS 버그 수정 (2026-06-13)

주요 변경:
- tools/build_rebalance_engine_v1.py: REBALANCE_ENGINE_V1 신규
  * account_snapshot 직접 합산(_build_snap_position_map) → 소수주 분리 행 병합
  * 레짐 소스 macro.REGIME_PRELIM 최우선 (GAS 와 동일)
- src/gas_adapter_parts/gdf_06_rebalance.gs: runRebalanceSheet_() 신규
  * Logger.log / getSpreadsheet_() 로 run_all 연동 수정
- src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs
  * _mergePositionRecord_(): 소수주 중복 행 합산 신규
  * parseInt → parseFloat (qty, availQty)
- src/gas_adapter_parts/gdf_01_price_metrics.gs
  * 미보유 종목 SELL_READY → WATCH_EXIT_SIGNAL
- spec/41_release_dag.yaml: build_rebalance_sheet 노드 추가 (step_count 63)
- spec/51_formula_lifecycle_registry.yaml: REBALANCE_ENGINE_V1 등록

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-13 13:20:14 +09:00
commit ee3e799de1
1474 changed files with 176087 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
meta:
title: "은퇴자산포트폴리오 — 리밸런싱 트리거 분할 후보"
parent_file: "spec/04_strategy_rules.yaml"
version: "2026-05-15-F8_split"
language: "ko-KR"
timezone: "Asia/Seoul"
role: "canonical"
migration_status: "canonical_split_active"
authority_rule: "이 split 파일이 해당 섹션의 canonical source다. parent_file은 legacy compatibility index다."
rebalancing_trigger:
weed_out_rule:
rule: "물타기 방지: 리밸런싱 매수 전 해당 종목 1M 상대강도 하위 30% 또는 20D 수급 음수 시 매수를 영구 차단하고, 주도주로 자금을 이동한다."
threshold:
relative_band: "개별 자산이 목표비중 대비 ±20% 이탈 시 점검"
absolute_band: "단일 종목이 목표비중보다 절대값 5%p 이상 초과 시 부분 리밸런싱 검토"
benchmark_leader_band: "KOSPI 시장지배 주도주는 벤치마크 비중 대비 +10%p 초과 시 점검, +15%p 초과 시 신규매수 금지"
duplicate_factor_band: "동일 팩터 직접+ETF 실질노출이 상한 초과 시 ETF부터 축소"
regime_adaptive:
regime_source: "macro_snapshot VIX_Close 기준. Risk-On: VIX < 18 AND KOSPI 20일선 위; Risk-Off: VIX > 25 OR KOSPI 20일·60일선 동시 하회; Neutral: 그 외 구간. (VIX 기준: macro 탭 VIX_Close, KOSPI 이동평균: data_feed 탭 MA20·MA60 컬럼)"
Risk-On: "목표비중 대비 +15%p 초과 시 점검 (주도주 수익 극대화 용인)"
Neutral: "목표비중 대비 ±5%p 이탈 시 점검"
Risk-Off: "목표비중 대비 +2%p 초과 시 즉각 축소 (방어적 리밸런싱 강제)"
prohibition: "Risk-Off 국면에서 회복 기대를 이유로 +2%p 초과 리밸런싱 연기 금지"
action:
- "전체 포트폴리오를 흔들지 않고 이탈 자산만 목표비중 근처로 복귀."
- "매도는 전량이 아니라 1차 30%, 2차 30%, 3차 잔여 조정 방식."
- "세금·수수료·유동성·호가공백이 불리하면 즉시 리밸런싱 대신 조건부."
- "비용 최적화: |목표비중 - 현재비중| - (예상 거래세 및 수수료 환산비율) > 0.5%p 일 때만 실질적인 리밸런싱을 실행하여 과매매를 방지한다."
priority: ["bankruptcy", "risk_control", "market_context", "portfolio_exposure_framework.special_exception", "portfolio_exposure_framework"] # [P134] 순환 참조 제거, [R3] special_exception 경로 완전 한정
priority_note: "위 5개 규칙 충족 후에만 rebalancing_trigger.threshold·action 적용. 자체 참조 금지."