Files
QuantEngineByItz/spec/strategy/stock_model.yaml
kjh2064 5166750b53 WBS-7.3/7.4/7.5/7.11: 거버넌스 문서 정합성 정리 + spec-코드 동기화 게이트
2026-06-21 비판적 리뷰에서 spec/governance YAML이 코드 상태와 어긋난
채로 방치되던 3개 구체적 사례를 발견하고 정정했다. 근본 원인(동기화를
보장하는 장치 없음)에 대응하는 신규 CI 게이트도 함께 추가한다.

- spec/aliases.yaml: deprecated alias 17건 제거(활성 참조 0건 확인 후,
  2026-06-30 데드라인 전). role: deprecated_redirect인 spec/03_risk_policy.yaml,
  spec/04_strategy_rules.yaml 2개만 실삭제 — spec/06_exit_policy.yaml은
  role: compatibility_index(영구유지 설계)였음을 재확인해 보존
- governance/gas_logic_migration_ledger_v1.yaml: 존재하지 않는 파일을
  canonical 구현으로 인용하던 오류 2건 발견·정정, parity 테스트 부재로
  GAS 코드 삭제 보류(F12/F13/F14)
- spec/13_formula_registry.yaml: OVERHANG_PRESSURE_V1의 "-500000"
  절대값 폴백을 avg_volume_5d 비례식으로 교체(EXPERT_PRIOR 등록)
- tools/validate_specs.py: validate_spec_code_sync() 신규 — has_code_implementation/
  code_path 필드가 있는 spec만 검사(점진적 롤아웃, 기존 PASS 상태 비파괴),
  12개 파일 1차 태깅
2026-06-21 20:08:48 +09:00

88 lines
5.4 KiB
YAML
Raw Permalink 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.
meta:
title: "은퇴자산포트폴리오 — 종목 모델 분할 후보"
parent_file: "RetirementAssetPortfolio.yaml" # 2026-06-22 WBS-7.11: spec/04_strategy_rules.yaml 삭제로 갱신
version: "2026-05-16-F10_peg_gate"
language: "ko-KR"
timezone: "Asia/Seoul"
role: "canonical"
migration_status: "canonical_split_active"
authority_rule: "이 split 파일이 해당 섹션의 canonical source다. parent_file은 legacy compatibility index다."
stock_model:
pass: ["시총·섹터 대표성", "충분한 거래대금", "실적 개선", "20D 수급 우위", "기대수익비 2:1 이상"]
reject: ["관리종목·거래정지·유동성 부족", "적자 지속+테마성 급등", "거래대금 폭증 후 장대음봉", "실적 컨센서스 하향", "단일 뉴스만 근거인 상승"]
# [proposal_91 / 2026-05-16] 코스닥 전용 추가 reject 조건 — 코스닥 구조적 위험 특성 반영
kosdaq_extra_reject:
applicable: "코스닥 상장 종목에만 추가 적용. 위 reject 조건과 AND(모두 확인)."
conditions:
- "코스닥 상장 후 6개월 미만 — 실적 트랙 레코드 부족, 상장 직후 공모주 매도 물량 리스크"
- "최근 1년 내 감사의견 비적정 또는 내부회계 관리제도 중요 취약점 보고"
- "대주주 지분 50% 미만 + 최근 3개월 대주주 2회 이상 연속 매도"
- "영업이익 흑자 전환 1분기에 불과한 테마 종목 — 2분기 연속 흑자 미확인 시 reject"
- "유상증자·CB(전환사채)·BW(신주인수권부사채) 발행 후 6개월 이내 — 희석 리스크"
prohibition:
- "코스닥 종목에 대해 이 조건 미확인 상태에서 A등급 부여 금지"
- "테마 뉴스를 근거로 kosdaq_extra_reject 조건 면제 금지"
# [proposal_96 / 2026-05-16] 코스닥 밸류에이션 게이트 — PEG 기반 고성장 정당화 여부 판단
kosdaq_valuation_gate:
applicable: "코스닥 상장 종목에만 적용. KOSPI 종목은 기존 SS001_VAL_VALUATION 사용."
purpose: >
유동성·수급만으로는 한미반도체처럼 PER 40~60배 구간 진입 리스크를 잡지 못한다.
EPS 성장률로 PER을 나눈 PEG로 '비싸지만 정당한가'를 판단한다.
primary_metric:
name: "PEG (Price/Earnings to Growth)"
formula_ref: "spec/13_formula_registry.yaml:formula_registry.formulas.PEG_SCORE_V1"
formula: "ForwardPER / EPS_Growth_3Y_CAGR_pct"
unit_note: "EPS_Growth_3Y_CAGR_pct는 % 단위 숫자 (30% 성장이면 30). 소수점 아님."
gate_rules:
pass: {condition: "PEG <= 1.5", action: "밸류에이션 OK. 진입 수량 정상 산출."}
caution: {condition: "1.5 < PEG <= 2.5", action: "진입 수량 70%로 자동 축소. 보고서에 [PEG_CAUTION] 표기 필수."}
reject: {condition: "PEG > 2.5", action: "코스닥 진입 금지. 수량 0주."}
fallback:
trigger: "EPS_Growth_3Y_CAGR_pct 미확인 또는 데이터 누락"
rules:
- {if: "ForwardPER <= 섹터중앙값 × 2.0", result: "PASS"}
- {if: "섹터중앙값 × 2.0 < ForwardPER <= 섹터중앙값 × 3.0", result: "CAUTION (70% 수량)"}
- {if: "ForwardPER > 섹터중앙값 × 3.0", result: "REJECT"}
prohibition: "EPS 성장률 추정·보간으로 PEG 계산 금지 — 확정 컨센서스 데이터 없으면 fallback만 허용"
examples:
hanmi_semiconductor:
scenario: "ForwardPER=45, EPS_Growth_3Y=25%"
peg: 1.8
result: "CAUTION → 진입 수량 70%. full 진입 금지."
high_peg_reject:
scenario: "ForwardPER=60, EPS_Growth_3Y=10%"
peg: 6.0
result: "REJECT → 진입 금지."
growth_justified:
scenario: "ForwardPER=30, EPS_Growth_3Y=40%"
peg: 0.75
result: "PASS → 정상 수량 산출."
interaction:
kosdaq_extra_reject: "kosdaq_extra_reject와 AND 적용. 어느 하나 reject이면 진입 금지."
anti_climax_buy_gate: "PEG CAUTION + anti_climax 신호 2개 → 수량 70%×50%=35%로 중첩 축소."
scoring: "SS001_VAL_KOSDAQ_PEG 점수(최대 12점)로 전환. spec/08_scoring_rules.yaml 참조."
prohibition:
- "코스닥 종목 PEG 미산출 상태에서 A등급 부여 금지"
- "PEG CAUTION 상태에서 수량 축소 없이 full 진입 금지"
- "단일 호재 뉴스로 EPS_Growth 상향 추정 후 PEG 개선 처리 금지"
- "KOSPI 종목에 이 게이트 적용 금지"
core_satellite_rule:
alias_of: "satellite_rule"
definition: "조건부·소액·관찰 후보. 즉시매수 아님"
max_count: 3
max_weight: "총자산 7% 이하"
required_conditions: # [P127] mandatory 3개 ALL 필수 / optional 4개 중 1개 이상 권장
mandatory_all_3:
- 거래대금 증가
- 외국인/기관 순매수 전환
- "기대수익비 2:1 이상"
optional_confirm_any:
- 섹터 상대강도 개선
- 실적 추정치 상향
- "20일선 회복 후 유지 또는 신고가 후 눌림 재지지"
entry_spike_restriction: "단기 급등(당일 +5% 이상) 직후는 본진입 제외. risk_on 국면도 시범진입만 허용 (tiered_ladder 순서 준수). optional_confirm_any가 아닌 진입 제한 규칙."
rule: "핵심 데이터 미확인 시 A등급 불가. 첫 돌파는 시범진입만, 확인 전 전량 진입 금지. 강한 장세에서는 시범진입 타이밍을 늦추지 말고 수량만 줄인다."