Files
QuantEngineByItz/spec/strategy/semiconductor_concentration_policy.yaml
T
kjh2064 ee3e799de1 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>
2026-06-13 13:20:14 +09:00

163 lines
8.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 승격"