Files
QuantEngineByItz/spec/strategy/fundamental_quality_v3.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

89 lines
4.4 KiB
YAML

# spec/strategy/fundamental_quality_v3.yaml
# P1-011: FUNDAMENTAL_EVIDENCE_UPGRADE — engine_audit vs data_quality 충돌 해소
#
# 충돌 근거:
# data_quality.schema_presence_score = 100 ← 필드 존재 여부만 확인
# engine_audit.fundamental_score = ~62 ← 실제 값 존재 여부 + missing_penalty
# conflict_gap_pct = 40.0 (OCF/FCF 0% 커버리지가 원인)
#
# 해소 방법:
# 1. OCF/FCF 데이터 HTS 캡처 (OPERATIONAL_ACTION)
# 2. data_quality=FULL 레이블 기준 강화 (OCF or FCF 필수) → v2에서 적용됨
# 3. fundamental_multifactor_v4 missing_penalty 적용
meta:
formula_id: FUNDAMENTAL_QUALITY_V3
version: "2026-06-06"
python_tools:
- tools/build_fundamental_raw_v2.py
- tools/build_fundamental_multifactor_v4.py
sources:
- Temp/fundamental_raw_v1.json # FUNDAMENTAL_RAW_INGEST_V1 출력
- Temp/fundamental_raw_v2.json # v2: field-level coverage 수정
- Temp/fundamental_multifactor_v4.json
# ── 충돌 정의 ─────────────────────────────────────────────────────────────────
conflict_definition:
issue: >
v1에서 data_quality=FULL이지만 OCF/FCF=None인 tickers가 존재함.
ROE/OPM/PER/PBR/EPS 5개 필드 기준으로 FULL 판정했으나
multifactor 점수에서 OCF/FCF 합산 30점 비중이 빠지는 문제.
v1_full_label_count: 7
v2_reclassified_to_partial: 7 # 전원 PARTIAL로 재분류
root_cause: OCF/FCF HTS 캡처 미완료 (OPERATIONAL_ACTION)
# ── 필드 가중치 ────────────────────────────────────────────────────────────────
field_weights:
roe_pct: 25 # ROE
opm_pct: 20 # 영업이익률
ocf_krw: 15 # 영업현금흐름 ← 현재 0% 커버리지
fcf_krw: 15 # 잉여현금흐름 ← 현재 0% 커버리지
net_debt_krw: 10 # 순부채
per: 8 # PER
pbr: 7 # PBR
total_weight: 100
# ── data_quality 레이블 기준 (v2) ──────────────────────────────────────────────
data_quality_labels:
FULL: "ROE/OPM + 밸류에이션 + (OCF or FCF) 모두 있음"
PARTIAL: "ROE/OPM + 밸류에이션 있음, OCF/FCF 없음"
SPARSE: "ROE/OPM만 있음"
MISSING: "핵심 필드 없음"
ETF_EXCLUDED: "ETF — 펀더멘털 미적용"
# ── missing_penalty ────────────────────────────────────────────────────────────
missing_penalty:
ocf_krw: -5.0 # OCF 없을 때 감점
fcf_krw: -5.0 # FCF 없을 때 감점
note: "penalty는 quality_multiplier 적용 후 차감"
# ── 수락 기준 ─────────────────────────────────────────────────────────────────
acceptance_criteria:
raw_field_coverage_pct:
target: ">=90"
current: 60.0
status: FAIL
remediation: "OCF/FCF HTS 캡처 → OPERATIONAL_ACTION"
fundamental_score_not_available_count:
target: "==0"
current: 7
status: FAIL
remediation: "OCF/FCF 캡처 후 자동 해소"
conflict_gap_pct:
target: "<5"
current: 40.0
status: FAIL
remediation: "field coverage 개선 후 자동 해소"
# ── 장기투자 제한 ──────────────────────────────────────────────────────────────
long_horizon_policy:
condition: "OCF=None AND FCF=None"
action: "long_horizon_buy_allowed=False"
note: "현금흐름 근거 없이 장기투자 추천 금지"
# ── 금지 사항 ─────────────────────────────────────────────────────────────────
prohibitions:
- "OCF/FCF 결측 상태에서 data_quality=FULL 레이블 사용 금지"
- "fundamental_score 결측을 0점으로 대체해 등급 산출 금지"
- "conflict_gap_pct >= 5인 상태에서 펀더멘털 기반 장기투자 추천 금지"