ee3e799de1
주요 변경: - 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>
163 lines
8.6 KiB
YAML
163 lines
8.6 KiB
YAML
# spec/strategy/semiconductor_concentration_policy.yaml
|
||
# 반도체 집중 허용 정책 — MARKET_WEIGHT_AWARE_CLUSTER_GATE_V1
|
||
# ────────────────────────────────────────────────────────────────────────────
|
||
# 배경:
|
||
# 한국 KOSPI 시장에서 삼성전자+SK하이닉스는 시총 비중 35%+를 차지한다.
|
||
# 기존 고정 25% 한도는 이 두 종목이 주도하는 상승장에서 시장 대비 필연적
|
||
# 언더퍼폼을 강제한다. 분산은 목적이 아니라 리스크 관리 수단이며,
|
||
# 주도주 집중 전략이 유효한 국면에서는 시장 비중만큼은 허용해야 한다.
|
||
#
|
||
# 원칙:
|
||
# 1. 시장 비중(KOSPI_SEMI_WEIGHT) 이하는 항상 PASS — 시장 중립 포지션
|
||
# 2. RISK_ON 국면에서는 시장 비중 1.3배까지 허용 (능동적 과중비중)
|
||
# 3. SECULAR_LEADER 국면에서는 65%까지 허용 (주도주 집중 전략)
|
||
# 4. RISK_OFF / EVENT_SHOCK에서는 시장 비중 × 0.7로 축소 (방어)
|
||
# 5. 한도 초과 시 BLOCK이 아닌 WARN/TRIM — 설거지 구간에서만 BLOCK
|
||
# ────────────────────────────────────────────────────────────────────────────
|
||
|
||
formula_id: MARKET_WEIGHT_AWARE_CLUSTER_GATE_V1
|
||
|
||
# KOSPI 반도체 시총 비중 — settings 시트에서 사용자가 직접 입력해야 함
|
||
# 주의: 하드코딩 기본값 없음. 시총 비중은 KRX/FnGuide 실데이터 기준으로만 입력.
|
||
# 미입력 시 GAS는 DATA_MISSING 상태로 동작 (정책 한도만 적용, 시장비중 × 배수 미적용)
|
||
kospi_weights_settings_keys:
|
||
kospi_semi_weight_pct: "settings 시트 key — 삼성전자+SK하이닉스 합산 KOSPI 비중 (%)"
|
||
kospi_samsung_weight_pct: "settings 시트 key — 삼성전자 단독 KOSPI 비중 (%)"
|
||
kospi_hynix_weight_pct: "settings 시트 key — SK하이닉스 단독 KOSPI 비중 (%)"
|
||
data_source: "KRX 또는 FnGuide 시총 비중 데이터 (최소 월 1회 갱신 권장)"
|
||
critical_note: |
|
||
KOSPI 내 삼성전자·SK하이닉스 비중은 시장 상황에 따라 크게 변동한다.
|
||
어떠한 추정치도 settings 미입력 시 코드에 삽입하지 않는다.
|
||
반드시 사용자가 실제 시총 데이터 기반으로 직접 입력해야 한다.
|
||
|
||
# ── 반도체 클러스터 한도 (동적) ─────────────────────────────────────────────
|
||
cluster_cap_table:
|
||
EVENT_SHOCK:
|
||
cap_pct: "max(20, kospi_semi_weight × 0.60)"
|
||
default: 21.0
|
||
rationale: "이벤트 충격: 시장 비중의 60%로 방어 축소"
|
||
gate_behavior: "초과 시 CLUSTER_BLOCK (신규 BUY 전면 금지)"
|
||
|
||
RISK_OFF:
|
||
cap_pct: "max(25, kospi_semi_weight × 0.80)"
|
||
default: 28.0
|
||
rationale: "하락장: 시장 비중의 80%까지만 유지"
|
||
gate_behavior: "초과 시 CLUSTER_BLOCK"
|
||
|
||
NEUTRAL:
|
||
cap_pct: "max(35, kospi_semi_weight × 1.00)"
|
||
default: 35.0
|
||
rationale: "중립: 시장 비중 매칭까지 허용 (PASS)"
|
||
gate_behavior: "초과 시 CLUSTER_OVERWEIGHT_TRIM (BUY 금지, 점진 감축)"
|
||
change_from_old: "25% → 35% (시장 중립 허용)"
|
||
|
||
RISK_ON:
|
||
cap_pct: "max(45, kospi_semi_weight × 1.30)"
|
||
default: 45.0
|
||
rationale: "상승장: 반도체 주도 시 시장 비중 130%까지 능동 과중비중 허용"
|
||
gate_behavior: "초과 시 CLUSTER_OVERWEIGHT_WARN (BUY 신중, 강제 감축 아님)"
|
||
change_from_old: "25% → 45% (반도체 주도 상승장 적극 참여 허용)"
|
||
|
||
SECULAR_LEADER_RISK_ON:
|
||
cap_pct: 65.0
|
||
rationale: "주도주 집중 전략: 삼성+하이닉스 양 종목 최대 보유"
|
||
gate_behavior: "초과 시 CLUSTER_OVERWEIGHT_TRIM"
|
||
change_from_old: "60% → 65%"
|
||
|
||
CLA:
|
||
cap_pct: 65.0
|
||
rationale: "CONCENTRATED_LEADER_ADVANCE: SECULAR_LEADER_RISK_ON과 동일"
|
||
gate_behavior: "초과 시 CLUSTER_OVERWEIGHT_TRIM"
|
||
|
||
# 게이트 상태 정의 (변경)
|
||
gate_status_definitions:
|
||
PASS: "combined_pct < kospi_semi_weight × 0.90 — 시장 비중 90% 이하"
|
||
CLUSTER_OVERWEIGHT_WARN: "combined_pct < regime_cap — 주의 모니터링, BUY 신중"
|
||
CLUSTER_OVERWEIGHT_TRIM: "combined_pct >= regime_cap (non-RISK_OFF) — 감축 검토"
|
||
CLUSTER_BLOCK: "combined_pct >= regime_cap (RISK_OFF/EVENT_SHOCK) — 신규 BUY 금지"
|
||
CLUSTER_HOLD_ONLY: "isCLA AND combined_pct < cap — 보유만, 추가 매수 금지"
|
||
|
||
# ── 개별 종목 비중 한도 (LEADER_POSITION_WEIGHT_CAP_V1) ────────────────────
|
||
leader_position_cap_table:
|
||
description: |
|
||
005930(삼성전자), 000660(SK하이닉스)는 KOSPI 주도주로서
|
||
일반 종목 상한(20%)과 별도로 시장 비중 기반 상한을 적용한다.
|
||
|
||
# 모든 한도는 EXPERT_PRIOR (calibration_registry.yaml 등록).
|
||
# KOSPI 비중이 settings에 입력되면 max(정책한도, kospi_weight × 배수) 적용.
|
||
# KOSPI 비중 미입력 시 정책 한도만 적용 (추정치 삽입 금지).
|
||
samsung_005930:
|
||
EVENT_SHOCK: 15.0
|
||
RISK_OFF: 18.0
|
||
NEUTRAL: 28.0 # kospi_samsung_weight 입력 시: max(28, weight×1.20)
|
||
RISK_ON: 40.0 # kospi_samsung_weight 입력 시: max(40, weight×1.70)
|
||
SECULAR_LEADER_RISK_ON: 50.0 # 입력 시: max(50, weight×2.20)
|
||
|
||
skhynix_000660:
|
||
EVENT_SHOCK: 10.0
|
||
RISK_OFF: 12.0
|
||
NEUTRAL: 15.0 # kospi_hynix_weight 입력 시: max(15, weight×1.20)
|
||
RISK_ON: 22.0 # 입력 시: max(22, weight×1.80)
|
||
SECULAR_LEADER_RISK_ON: 28.0 # 입력 시: max(28, weight×2.50)
|
||
|
||
other_stocks:
|
||
EVENT_SHOCK: 12.0
|
||
RISK_OFF: 15.0
|
||
NEUTRAL: 20.0
|
||
RISK_ON: 22.0
|
||
SECULAR_LEADER_RISK_ON: 25.0
|
||
|
||
# ── SECULAR_LEADER 자동 감지 조건 ───────────────────────────────────────────
|
||
secular_leader_auto_detect_conditions:
|
||
description: |
|
||
RISK_ON 국면에서 아래 조건이 충족되면 SECULAR_LEADER_RISK_ON으로
|
||
자동 상향 → 클러스터/단일종목 한도 완화 적용.
|
||
conditions:
|
||
- id: SL1
|
||
description: "RS비율: 삼성전자 또는 SK하이닉스의 RS_Ratio >= 1.5 (5일 연속)"
|
||
weight: 3
|
||
- id: SL2
|
||
description: "수급: 외인+기관 삼성전자 또는 SK하이닉스 동반순매수 3일 이상"
|
||
weight: 2
|
||
- id: SL3
|
||
description: "섹터: 반도체 섹터 5일 수익률 KOSPI 대비 +5% 이상 초과"
|
||
weight: 2
|
||
- id: SL4
|
||
description: "거래대금: 반도체 섹터 5일 평균 거래대금 > 20일 평균 × 1.3"
|
||
weight: 1
|
||
threshold: "합산 ≥ 6점 → SECULAR_LEADER_RISK_ON 자동 진입"
|
||
exit_conditions:
|
||
- "RS_Ratio < 1.0 (3일 연속)"
|
||
- "외인+기관 동반순매도 5일"
|
||
- "DISTRIBUTION_SELL_DETECTOR_V1.weighted_sum >= 4.0"
|
||
|
||
# ── 리스크 관리 보완 (집중 시 자동 강화) ────────────────────────────────────
|
||
concentration_risk_safeguards:
|
||
description: |
|
||
반도체 집중도가 높을수록 개별 종목 손절을 더 타이트하게 관리.
|
||
'몰빵 후 고점 물리기' 방지.
|
||
rules:
|
||
- id: CR1
|
||
trigger: "combined_pct >= 50%"
|
||
action: "PROFIT_RATCHET_TIERED_V2 강제 활성화 (PROFIT_LOCK_10 이상 구간 진입 즉시)"
|
||
note: "집중도 높을수록 수익 보호 필수"
|
||
|
||
- id: CR2
|
||
trigger: "combined_pct >= 55% AND DISTRIBUTION_SELL_DETECTOR weighted_sum >= 3.0"
|
||
action: "K2_STAGED_REBOUND_SELL 즉시 발동 (절반 즉시 매도, 절반 반등 대기)"
|
||
note: "설거지 구간 + 고집중도 = 즉시 반응"
|
||
|
||
- id: CR3
|
||
trigger: "combined_pct >= 65%"
|
||
action: "신규 BUY 전면 금지 (SECULAR_LEADER에서도)"
|
||
note: "65%가 최대 한도 — 이 이상은 포트폴리오 전체 위험"
|
||
|
||
# ── 하네스 수치 목표 ─────────────────────────────────────────────────────────
|
||
performance_targets:
|
||
cluster_gate_false_positive_rate_max: 5 # 건당 BLOCK인데 실제 손실 없었던 비율
|
||
cluster_gate_true_positive_rate_min: 85 # 건당 BLOCK이었을 때 실제 손실 방어 비율
|
||
expected_benchmark_tracking_error_reduction_pct: 30 # 기존 25% 한도 대비 추적오차 감소
|
||
calibration_status: EXPERT_PRIOR
|
||
sample_n: 0
|
||
note: "실측 표본 30건 이상 누적 후 PROVISIONAL → CALIBRATED 승격"
|