meta:
  title: "은퇴자산포트폴리오 — 후보 발굴·지연매매 방지"
  parent_file: "spec/strategy/entry_gates.yaml"
  version: "2026-05-15-F11_entry_split"
  language: "ko-KR"
  timezone: "Asia/Seoul"
  role: "canonical"
  migration_status: "canonical_split_active"

anti_late_trade_rule:
  principle: >
    가격·수급·ATR 신호는 주문 트리거가 아니라 위험등급 신호로 우선 사용한다.
    이미 큰 폭으로 상승한 종목의 강한 수급은 추격매수 근거가 될 수 없고,
    이미 큰 폭으로 하락한 종목의 ATR 이탈은 즉시 투매 근거가 될 수 없다.
  buy_filter:
    forbid_chasing:
      - "20거래일 급등 후 신고가권 신규매수 금지"
      - "20일선 대비 과도한 이격 발생 시 신규매수 금지"
      - "기존 보유 섹터와 중복될 경우 신규매수 금지"
    allow_buy_only_if:
      - "눌림 후 회복"
      - "손절폭 대비 기대수익 1.8배 이상"
      - "포지션 크기와 손실예산이 사전에 확정"
  sell_filter:
    no_retroactive_stop:
      - "진입 전 손절선이 없던 기존 포지션에 사후 ATR 손절을 기계 적용하지 않는다"
    damaged_position_protocol:
      - "이미 -10% 이상 손실 포지션은 시장가 투매 금지"
      - "반등 매도, 시간 손절, 논리 훼손 손절로 분리"
      - "ETF와 개별주의 손절 기준을 다르게 적용"
  portfolio_rule:
    trim_strength_before_weakness:
      - "현금 확보는 약한 종목 투매보다 강한 종목의 초과비중 일부 익절을 우선 검토"
      - "단, 장기 코어는 월간 리밸런싱에서만 조정"
  calculation_gate:
    formula: "(target_price - entry_price) / max(1, entry_price - stop_price) >= 1.8 (RR 최소 기준)"
    no_trade_if: ["RR < 1.8", "손실예산 미확정", "보유수량/평단/계좌 원장 미확인"]
  evidence_gate:
    requires:
      - "실체결 기준 수익률과 손실률"
      - "3~10거래일 후행 성과 검증"
      - "동일 섹터 중복노출 대비 초과수익"
    prohibit:
      - "하루 가격 반응만으로 전면 교체"
      - "ATR 미확인 상태의 손절가·정수수량 산출"
      - "강한 종목 수급을 이유로 신고가 추격매수"

  next_generation_core_satellite_discovery:
    alias_of: "next_generation_satellite_position_discovery"
    terminology: "satellite_position은 포트폴리오 보완용 전술·보조 종목이며, core_satellite 시트의 satellite는 우주 업종이 아닌 자산배분 레이블이다."
    preferred_output_name: "core_satellite 후보 스크리닝"
  universe_build:
    source_order: ["KRX 상장상태·거래대금", "Naver/KRX 수급", "Yahoo/KRX 20/60D 상대강도·ATR20", "OpenDART 촉매·리스크"]
    minimum_liquidity: "20D 평균거래대금 100억원 이상 권장, 50억원 미만 원칙 제외"
    screening_axes: ["상대강도", "5D/20D 수급", "거래대금 증가", "DART 촉매", "리스크 공시", "기존 보유와의 상관"]
  grade:
    alias_of: "recommendation_grade"  # [P129] A_watch_to_buy_ready=A, B_watch=B, C_theme_only=C, D_reject=D
    label_mapping: {A_watch_to_buy_ready: "recommendation_grade.A", B_watch: "recommendation_grade.B", C_theme_only: "recommendation_grade.C", D_reject: "recommendation_grade.D"}
    A_watch_to_buy_ready: "80점 이상, Price_Status=PRICE_OK, Flow_OK=Y, DART_Risk 없음, ATR20 확인, 돌파 직후가 아니라 확인 또는 눌림 구간 → 조건부 진입 후보"
    B_watch: "65~79점. 다음 quant_feed 갱신 대기"
    C_theme_only: "50~64점 또는 핵심 데이터 부족. 관찰만."
    D_reject: "50점 미만, 상장상태 리스크, 유동성 부족, 공시 리스크, DATA_CONFLICT"
    output_rule:
      - "고정 종목 목록·고정 업종 키워드 금지. 공개 스크리닝 통과 종목만 포함."
      - "통과 종목 없으면 '후보 없음' 표에 검색조건·탈락사유·다음조회일 기재."

      - "신규 후보는 항상 시범진입 여부와 본진입 여부를 분리해 적는다."
      - "risk_on 국면의 주도주는 시범진입을 늦게 하지 말고, 대신 수량을 작게 가져간다."
      - "보고서 제목의 core_satellite는 자산배분 분류를 뜻하며, 항공우주 업종으로 오해될 수 있는 '위성' 단독 표현은 보조 표기만 허용한다."
  watchlist_analysis_workflow:
    - "스크리닝 결과 후보 1개 이상일 때만 분석 수행."
    - "ATR20 없으면 관찰가만 제시. 손절가·정수수량·기대수익비 산출금지 표시."
    - "신고가 직후 종목은 관찰가보다 위의 가격을 제시하지 않는다."
    - "다만 risk_on + 20D 수급 양호 + 거래대금 확장 + 종가 고가 마감이면 관찰가가 아니라 시범진입가를 제시할 수 있다."
