meta:
  title: "은퇴자산포트폴리오 — 익절 정책"
  parent_file: "spec/06_exit_policy.yaml"
  version: "2026-05-16-F13_secular_leader"
  language: "ko-KR"
  timezone: "Asia/Seoul"
  role: "canonical"
  has_code_implementation: true
  code_path: ["spec/strategy/action_matrix.yaml"]
  migration_status: "canonical_split_active"

take_profit:
  # [proposal_117 / 2026-05-15] 익절 시스템 단일 지정 — HTS 주문 입력 기준 명확화
  canonical_exit_system: "profit_lock_ratchet + tiered_ladder"
  canonical_rule: >
    HTS 주문 입력 기준은 항상 profit_lock_ratchet(손절선 상향 래칫)과
    tiered_ladder(분할 익절 3단계)의 조합이다.
    trailing_stop은 tiered_ladder.tier_3의 트리거 참조로만 사용한다.
    sector_rotation_exit·event_driven·overheated_market_exit는
    해당 조건 발동 시에만 추가로 적용한다. 기본 상태에서 출력 금지.
    trailing_bands는 CSCS 기반 처우 선택(sector_model.core_satellite_classification_score) 후
    trailing_stop.core_large_cap(코어) 또는 trailing_stop.satellite_trigger(위성)로 자동 매핑된다.
  decision_map:
    purpose: "어느 익절 시스템을 언제 쓰는가 — 순서대로 확인"
    step_1: "항상 profit_lock_ratchet 적용: 현재수익률 확인 → 래칫 손절선 업데이트"
    step_2: "항상 tiered_ladder 적용: tier_1/2/3 가격·수량 산출 → 이것이 HTS 주문 기준"
    step_3: "sector_rotation_exit: 섹터 경보 발동 시에만 추가 적용"
    step_4: "event_driven: 실적발표 D-5 이내 시에만 추가 적용"
    step_5: "overheated_market_exit: VIX<13 + KOSPI 신고가 + 개인 50% 이상 조건 발동 시에만"
    default_output: "기본 보고서는 step_1 + step_2만 출력. step_3~5는 조건 미발동 시 출력 생략."
  principle: "감정적 전량 매도 금지. 저항선·수익률·ATR 기반 분할 익절 우선."
  integrated_exit_algorithm:
    rule: "Tiered Ladder는 익절 물량(Size)의 단계적 분할을 관장하고, Profit Lock Ratchet은 잔여 물량의 하한가(Floor Price)를 기계적으로 상향 조정한다. 상호충돌 시 물량 매도는 Tiered Ladder 우선, 손절선 상향은 Ratchet 우선 적용."
  requirements:
    - "현재가·평단가·보유수량·기준시각 확인 종목에만 익절 수량 산출."
    - "ATR 또는 저항선이 [데이터누락]이면 trailing_stop 가격 산출 금지. 관찰 조건으로만 표시."
  core:
    first_take_profit: "수익률 +15%만으로 기계적 익절 금지. 20D 수급 유지·거래대금 유지·5일선 위 주행이면 추세추종."
    trailing: "수익권 또는 저항선 돌파 후 고점 대비 ATR 1.5~1.8배 하락 시 20~30% 부분 익절 검토."
    leadership: "삼성전자·SK하이닉스는 비중상한·추세이탈·수급이탈·현금부족 중 2개 이상 충족 시에만 부분 익절 우선."
  satellite:
    first_take_profit:
      primary_rule: "tiered_ladder.satellite.tier_1 기준 적용 (진입가 +10% 도달 시)"
      defensive_partial_exit:
        condition: |
          당일 +7% 이상 + 거래대금 200% 이상 동반 AND 아래 이상 급등 의심 신호 중 1개 이상:
            - 구체적 실적·수급 근거 없는 테마·루머 급등
            - 외국인·기관 동반 순매수 아닌 개인 주도 급등 (Ind_5D 급증)
            - 52주 신고가 돌파 후 당일 음봉 반전
        action: "보유수량 25% 방어 익절 (단타 방지: 기존 50% 하향)"
        prohibition:
          - "실적 발표 후 정상 갭업 + 기관·외국인 수급 동반 상승은 이 규칙 적용 금지"
          - "당일 가격 반응만으로 tiered_ladder 순서 건너뛰고 전량 익절 금지"
  trailing_stop:
    rule: "직전 고점 대비 20일 ATR 1.5배 하락 시 잔여 전량 또는 50% 이상 청산 검토. 고베타 주도주는 1.8배까지 허용."
    core_large_cap: "진입 후 최고가 대비 -6% 또는 ATR20 1.5배 하락 중 더 넓은 값. 20~30% 익절."
    high_beta_leader: "최고가 대비 -8% 또는 ATR20 1.8배 하락. 25~33% 익절."
    satellite_trigger: "최고가 대비 -7% 또는 ATR20 1.5배. 50% 익절."
    ratchet_rule: "신규 최고가 갱신 시 trailing 기준가만 상향. 잔여 손절선은 최소 본절 이상."
    prohibition: ["수익률 +15% 도달만으로 전량 익절 금지", "ATR20 없으면 trailing 가격 산출 금지", "trailing 기준가를 심리로 하향 조정 금지"]
  rebalancing_trim:
    rule: "단일 종목 총자산 18% 초과 시 예외 종목 제외하고 초과분만 지정가 분할 매도."
    exception: "삼성전자·SK하이닉스는 special_exception.kospi_semiconductor_leadership 우선."
  asymmetric_winner_rule:
    hold_if_all: ["20일선 위", "20D 수급 유지", "거래대금 급감 없음", "섹터 상대강도 상위권"]
    trim_if_two_or_more: ["5일선 종가 이탈", "장대음봉+거래대금 200% 이상", "외국인·기관 5D 동반 순매도", "섹터 상대강도 급락"]
    action: "1차 20~30%, 20일선 이탈 시 추가 30%, thesis_break 시 잔여 청산."
  redeployment_rule:
    cooling_period: {satellite_exit: "3~5거래일 대기 후 재투자 검토", core_partial_trim: "cash_floor 귀속 원칙. 재투자는 다음 수요일 정기점검에서 결정"}
    prohibition: ["익절 당일 다른 종목 즉시 신규 매수 금지", "익절 자금을 고위험 위성에 집중 투입 금지"]

  secular_leader_profit_lock:  # [proposal_87 / 2026-05-16] 주도주 승자 포지션 이익 잠금 강화
    purpose: >
      SECULAR_LEADER_RISK_ON 국면에서 삼성전자·SK하이닉스의 수익 포지션에 한해
      일반 위성 tiered_ladder의 조기 부분익절 대신 trailing_stop 상향 + 래칫 방식을 우선 적용하여
      승자 포지션을 더 오래 유지한다. 기존 core.leadership 규칙의 강화 버전.
    applicable_to: ["삼성전자", "SK하이닉스"]
    activation_required_all:
      - "market_regime_state == SECULAR_LEADER_RISK_ON"
      - "보유수량 확인 완료 (account_snapshot 기준)"
      - "Close > MA20"
      - "20D 수급 유지 (C4: Flow_OK=Y AND Frg_5D>0 OR Inst_5D>0)"
    rules:
      plus_10:
        condition: "보유 포지션 수익률 +10% 이상 종가 확인"
        action: "tiered_ladder.tier_1 부분익절 보류. profit_lock_ratchet 본절(+0%) 상향 실행만."
        rationale: "수급 훼손 없는 한 +10%에서의 매도는 주도주 상승 사이클을 조기 종료시킴."
        exception: "anti_climax_buy_gate >= 3 발동 시 기존 tiered_ladder.tier_1 즉시 적용"
      plus_20:
        condition: "수익률 +20% 이상 종가 확인"
        action: "손절선 진입가 +10%로 상향. 과열신호 2개 미만이면 20~30% 부분익절만 검토."
        overheated_signals:
          definition: "아래 중 2개 이상 시 과열 판정"
          signals:
            - "당일 거래대금 20일 평균의 300% 이상"
            - "외국인+기관 동반 순매도 전환 (당일 기준)"
            - "RSI 또는 이격도 과매수 극단 (별도 지표 확인 시에만)"
            - "anti_climax_buy_gate >= 2"
        prohibition: "과열신호 0~1개이면 이 단계 부분익절 금지. 래칫 상향만."
      plus_30:
        condition: "수익률 +30% 이상 종가 확인"
        action: "trailing_stop을 최근 고점 대비 ATR20 × 1.5~2.0배로 설정. 30~40% 단계 익절."
        note: "profit_lock_ratchet.ratchet_table +30% 래칫 동시 적용. 전량익절 금지."
    deactivation_any:
      - "anti_climax_buy_gate >= 3 발동"
      - "5D 외국인·기관 동반 순매도 (foreign_5d_flow < 0 AND institution_5d_flow < 0)"
      - "종가 MA20 이탈"
      - "market_regime_state != SECULAR_LEADER_RISK_ON"
    fallback: "비활성 시 take_profit.core.leadership 규칙으로 즉시 복귀. 이 규칙보다 완화된 방향 변경 금지."
    prohibition:
      - "보유수량 미확인 상태에서 이 규칙 기반 익절수량 산출 금지"
      - "SECULAR_LEADER_RISK_ON 비활성 상태에서 이 규칙 단독 적용 금지"
      - "비활성 후 매도 보류를 이유로 trailing_stop 하향 조정 금지"

  profit_lock_ratchet:
    principle: "수익 구간 진입 시 손절가는 기계적으로 상향한다. 감정적 하향 조정 절대 금지."
    atr_break_even_trigger: >  # [2026-05-18_ADVANCED_EXIT_V2] ATR 연동 본절 트리거
      TAKE_PROFIT_LADDER_V2의 tier_1 가격(max(+10%, Entry+ATR20×1.5)) 달성 시
      손절선을 즉시 평단가(본절)로 상향한다. 이 조건이 고정% +10% 조건보다 먼저
      충족되는 경우(고변동성 종목)에도 동일하게 본절 상향을 실행한다.
    atr_early_ratchet:  # [2026-05-19_ALPHA_SHIELD_V1] X4: 1R 조기 본절 전환
      trigger: "current_price >= entry_price + ATR20 * 1.0"
      action:  "stop_price = max(stop_price, entry_price)"
      note: "ATR*1.5(tier_1 기준) 대기 없이 ATR*1.0 달성 즉시 본절 전환. 무위험 게임 조기 보장."
      priority: "atr_early_ratchet이 +10% 고정 조건보다 선행 가능. 먼저 발동된 것 적용."
    ratchet_table:
      - 수익_구간: "+10% 이상 확인 (종가 기준)"
        새_손절선: "진입가 +0% (본절)"
        부분_익절: "없음. 손절선 상향만 실행."
        HTS입력: "매수가 × 1.000 조건부 주문"
      - 수익_구간: "+20% 이상 확인"
        새_손절선: "진입가 +10%"
        부분_익절: "20~30% 부분 익절 검토 (20D 수급 유지 확인 후)"
        HTS입력: "매수가 × 1.100 조건부 주문"
      - 수익_구간: "+30% 이상 확인"
        새_손절선: "진입가 +20%"
        부분_익절: "30~40% 추가 익절"
        HTS입력: "매수가 × 1.200 조건부 주문"
      - 수익_구간: "+50% 이상 확인"
        새_손절선: "진입가 +35% 또는 ATR20 × 2.0배 하락 기준 중 높은 값"
        부분_익절: "50% 이상 익절. 잔여분 trailing_stop 관리."
        HTS입력: "trailing_stop 원화 가격 계산 후 HTS 입력"
    atr_trailing_universal:  # [2026-05-19_ALPHA_SHIELD_V1] X4: 전 수익 구간 트레일링 스탑
      trigger: "current_price < (max_price_since_entry - ATR20 * 2.0)"
      action:  "TAKE_PROFIT_TRAIL -- 즉시 익절 실행 (TICK_NORMALIZER 적용)"
      applicable: "수익 구간 불문. 기존 +50% 제한 해제. 어깨에서 파는 하네스 핵심."
      note: "max_price_since_entry = 진입 후 최고 종가. 매 거래일 종가 기준 갱신."
      priority: "hard_stop 다음, tiered_ladder tier 실행 이전 확인."
    special_case:
      core_leader: "삼성전자·SK하이닉스 ratchet 기준 +5%p 완화"
      satellite: "위성 ratchet 기준 -5%p 강화"
    hard_stop:
      - "ATR20 미확인 시 HTS 조건부주문 가격 산출 금지"
      - "수익 구간 진입 확인은 종가 기준. 장중 고점만으로 래칫 상향 금지."
      - "래칫 손절선은 진입가보다 낮게 내리는 것 절대 금지."
    output_columns: ["계좌", "종목명", "평단(원)", "현재가(원)", "현재수익률(%)", "현_손절선(원)", "래칫_신_손절선(원)", "부분익절수량(주)", "HTS조건부주문_입력가"]

  tiered_ladder:
    principle: "1회 전량 익절 금지. 수익 구간을 3단계로 나눠 기계적으로 익절. 마지막 잔여분은 trailing_stop 관리."
    formula_version: "TAKE_PROFIT_LADDER_V2 (ATR R-Multiple 변동성 조정). ATR 미확인 시 V1(고정%) fallback."
    core_ladder:
      tier_1:
        trigger: "진입가 대비 +15% 도달 또는 컨센서스 목표가의 90%"
        action: "보유수량 25% 익절 (지정가 하한 계산)"
        condition: "20D 수급 유지 중이면 스킵 가능. 단 손절선은 반드시 본절로 상향."
      tier_2:
        trigger: "진입가 대비 +25% 도달 또는 컨센서스 목표가 도달"
        action: "남은 보유수량의 40% 익절"
        condition: "외국인·기관 5D 수급 유지 + 거래대금 급감 없음 → 보유 연장 검토"
      tier_3:
        trigger: "최고가 기준 ATR20 × 1.5배 하락 또는 profit_lock_ratchet 손절 발동"
        action: "잔여 전량 또는 50% 익절"
    satellite_ladder:
      tier_1:
        trigger: "진입가 대비 +10% 도달 (또는 ATR20 × 1.5 중 높은 값. TAKE_PROFIT_LADDER_V2 기준)"
        action: "보유수량 33% 익절 + 손절선 본절 상향 (중장기 추세 추종: 잔여 67% 보유)"
        v1_legacy_note: "구버전 50% 익절은 단기 익절 편향 — V2에서 33%로 조정. TAKE_PROFIT_LADDER_V1은 ATR 미확인 fallback용."
      tier_2:
        trigger: "진입가 대비 +20% 도달"
        action: "남은 수량 50% 추가 익절"
      tier_3:
        trigger: "trailing_stop 또는 time_stop 발동"
        action: "잔여 전량 청산"
    prohibition:
      - "tier 순서 건너뛰고 전량 익절 금지"
      - "ATR20 미확인 시 tier_3 기준가 산출 금지"
      - "tier_1 익절 후 다른 종목 즉시 매수 금지 (redeployment_rule 준수)"
    output_columns: ["계좌", "종목명", "평단(원)", "현재가(원)", "현재수익률(%)", "tier_1_가격(원)", "tier_1_수량(주)", "tier_2_가격(원)", "tier_2_수량(주)", "tier_3_기준가(원)", "잔여수량(주)"]
  output_examples: "_reference: output_format.unified_example_row_set  # [R6] 통합 예시 집합 참조"

  executable_rules:
    field_dictionary_ref: "spec/12_field_dictionary.yaml:field_dictionary"
    formula_refs:
      take_profit_ladder: "spec/13_formula_registry.yaml:formula_registry.formulas.TAKE_PROFIT_LADDER_V2  # ATR R-Multiple 기준. ATR 없으면 V1 fallback."
      trailing_stop_price: "spec/13_formula_registry.yaml:formula_registry.formulas.TRAILING_STOP_PRICE_V1"
    rules:
      - id: "TP001_PROFIT_LOCK_RATCHET"
        inputs: ["average_cost", "current_price", "quantity", "position_class"]
        derived_field:
          profit_pct: "(current_price - average_cost) / average_cost * 100"
        output_fields: ["ratchet_stop_price", "partial_take_profit_quantity"]
        tiers:
          - {if: "profit_pct >= 50", stop_expression: "max(average_cost * 1.35, TRAILING_STOP_PRICE_V1)", partial_quantity_expression: "floor(quantity * 0.50)"}
          - {if: "profit_pct >= 30", stop_expression: "average_cost * 1.20", partial_quantity_expression: "floor(quantity * 0.35)"}
          - {if: "profit_pct >= 20", stop_expression: "average_cost * 1.10", partial_quantity_expression: "floor(quantity * 0.25)"}
          - {if: "profit_pct >= 10", stop_expression: "average_cost * 1.00", partial_quantity_expression: 0}
        missing_policy: "NO_RATCHET_OUTPUT"
      - id: "TP002_TIERED_LADDER"
        inputs: ["average_cost", "atr20", "quantity", "position_class"]
        formula_ref: "TAKE_PROFIT_LADDER_V2  # ATR 있으면 V2, 없으면 V1 fallback"
        output_fields: ["tier_1_price", "tier_1_quantity", "tier_2_price", "tier_2_quantity", "tier_3_reference", "remaining_quantity"]
        missing_policy: "NO_TAKE_PROFIT_OUTPUT"
      - id: "TP003_REDEPLOYMENT_COOLING"
        inputs: ["exit_type", "exit_date", "current_trade_date"]
        rules:
          - {if: "exit_type == 'satellite_exit'", min_wait_trading_days: 3, max_wait_trading_days: 5}
          - {if: "exit_type == 'core_partial_trim'", action: "cash_floor_reserved_until_next_wednesday_review"}
        output_field: "redeployment_allowed"
        on_fail: "cash_or_watch_only"

  sector_rotation_exit:
    data_required: ["섹터 1M 상대강도 순위 (전주 대비)", "해당 섹터 외국인·기관 5D 순매수 추세", "거래대금 전주 대비 변화율"]
    trigger_conditions:
      경보_1단계:
        조건: "보유종목 섹터의 1M 상대강도 순위가 전주 대비 2순위 이상 하락"
        조치: "profit_lock_ratchet 재확인. tier_1 미도달 종목은 tier_1 익절가 미리 입력."
      경보_2단계:
        조건: "1단계 경보 + 해당 섹터 외국인·기관 5D 동반 순매도 전환"
        조치: "수익권 종목 30% 부분 익절. 섹터 내 중복 ETF 우선 청산."
      청산_신호:
        조건: "2단계 경보 + 섹터 거래대금 3D 연속 감소 + 섹터 ETF 가격 20일선 이탈"
        조치: "해당 섹터 위성 포지션 전량 청산 검토. 코어 직접보유는 개별 추세 판단."
    decoupling_exception:
      rule: "섹터 이탈에도 해당 종목이 신고가·외국인 집중매수·거래대금 폭증 3개 동시 충족 시 예외 허용"
      action: "예외 허용 시 trailing_stop을 ATR20 × 1.2배로 타이트하게 설정"
    prohibition:
      - "섹터 1M 상대강도 데이터 미확인 시 이 규칙 적용 금지. DATA_MISSING 표기."
      - "섹터 이탈 신호만으로 코어 직접보유 전량 청산 금지."
    output_columns: ["섹터명", "1M순위_전주", "1M순위_현재", "순위변화", "5D외국인", "5D기관", "거래대금_추세", "경보단계", "조치내용", "해당_보유종목"]

  event_driven:
    실적발표_전_관리:
      D-5_부터_D-1:
        조건: "현재 수익률 +10% 이상인 위성 포지션"
        조치_plus10_20: "20% 선제 익절 + 손절선 본절 상향"
        조치_plus20이상: "30% 선제 익절 + 손절선 진입가+10% 상향"
        조치_손실구간: "추가 익절 없음. 발표 전 손절 여부만 판단."
    실적발표_후_관리:
      컨센서스_상회:
        조건: "EPS/매출 컨센서스 5% 이상 초과 + 당일 양봉 + 거래대금 급증"
        조치: "보유 유지 + trailing_stop 기준가 갱신 + tier_2 익절가 상향 재설정"
        금지: "D+0 당일 추격 신규 매수 금지"
      컨센서스_부합:
        조건: "컨센서스 ±5% 이내"
        조치: "보유 유지. D+1~D+3 수급 반응 확인 후 판단."
      컨센서스_하회:
        조건: "EPS/매출 컨센서스 5% 이상 하회 또는 가이던스 하향"
        조치: "D+0~D+1 내 보유수량 50% 이상 익절(수익권) 또는 손절(손실권)"
      D+1~D+3_반응없음:
        조건: "상회 발표 후 3거래일 내 주가 반응 없음"
        조치: "선제 익절 외 나머지 30% 추가 익절. 논리 재검토."
    prohibition:
      - "발표 당일 EPS 수치 확인 전 추격매수·추격매도 금지"
      - "컨센서스 미확인 상태에서 실적 단독 수치만으로 A등급 승격 금지"
      - "실적 쇼크 시 09:00~09:15 전량 시장가 매도 금지 (gap_down 룰 준용)"

  overheated_market_exit:
    vix_context:  # [P135] regime_adaptive VIX<18 과의 관계 명시
      regime_relation: "Risk-On 구간(VIX < 18) 내 극단 과열 하위 집합"
      normal_risk_on: "VIX 13~18 구간은 regime_adaptive Risk-On 규칙만 적용 (overheated 미발동)"
      overheated_zone: "VIX <= 13 시 trigger_required_all 조건 추가 확인"
      behavior: "overheated_market_exit 발동 = Risk-On 규칙 + 추가 부분 익절 중첩 적용"
    trigger_required_all:
      - "VIX 13 이하 (3년 저점 수준)"
      - "KOSPI 52주 신고가 갱신 중 + 개인 5D 순매수 비중 일평균 50% 이상"
      - "보유 위성 포지션 수익률 평균 +15% 이상"
    optional_강화신호_any_1:
      - "KOSPI PER 역사적 상위 30% 이상"
      - "신용잔고 1년 최고 수준"
    action:
      trigger_충족시: "tiered_ladder tier_1 즉시 실행. 위성 30% 부분 익절. 중복 ETF 50% 이상 익절."
      강화신호_추가시: "위성 추가 20% 익절 (총 50% 축소). 신규 매수 전면 중단."
      현금_목표: "tactical_cash_buffer 5% + cash_floor 12% = 총자산 17% 이상 확보"
    재진입_기준:
      - "VIX 18 이상 회귀 시 재진입 검토"
      - "KOSPI 신고가 대비 -5% 이상 조정 후 20일선 회복 시"
    prohibition:
      - "VIX 미확인 시 이 규칙 적용 금지"
      - "과열 신호만으로 삼성전자·SK하이닉스 직접보유 익절 금지"
      - "선제 익절 후 동일 종목 5거래일 내 재매수 금지"

  account_tax_optimization:  # xref: 진입 단계 계좌 배치 원칙 → account_policy.cost_parity_rule 참조
    원칙: "세후 수익이 낮은 계좌부터 익절 우선. 세금은 통제 가능한 비용."
    계좌별_특성:
      일반계좌: "매매차익 대주주 기준 미해당 시 비과세. 배당소득세 15.4%."
      ISA: "손익통산 후 200만원(서민형 400만원) 비과세, 초과분 9.9% 분리과세. ISA 내 손실 먼저 정리 후 수익 실현."
      연금저축: "계좌 내 ETF 교체는 비과세 리밸런싱. 실제 인출 시 연금소득세 3.3~5.5%. 중도인출 기타소득세 16.5% 주의."
    익절_우선순위:
      1순위: "ISA 내 손익통산 활용 (비과세 한도 내 수익 실현)"
      2순위: "연금저축 내 ETF 교체 리밸런싱 (인출 없이)"
      3순위: "일반계좌 매매차익 (비과세)"
      4순위: "ISA 비과세 한도 초과분 (9.9% 분리과세)"
    prohibition:
      - "ISA 비과세 한도를 손실 종목 익절로 낭비하지 않는다"
      - "연금저축 중도 인출 없이 계좌 내 리밸런싱을 익절로 계산하지 않는다"

  time_based_realization:
    # [Q3 / 2026-05-15] role.principles "위성 평균 보유 목표 20거래일 이상"과 D+20 청산 조건이
    # 동일 일수를 사용해 "20일 보유가 손절 트리거"로 오독되는 논리 충돌 해소.
    # satellite_time_return_gate는 성과 불만족 시 청산 검토이지, 20일 도달이 자동 청산 아님.
    satellite_time_return_gate:
      purpose: "성과 미달 시 자본 효율성 제고 목적의 청산 검토. 20거래일 보유 목표 자체가 손절 트리거가 아님."
      D_plus_10: "+3% 이상 미달 → thesis 재검증"
      D_plus_10_opportunity_cost:  # [2026-05-18_ADVANCED_EXIT_V2] 기회비용 실행 트리거
        purpose: >
          D+10 리뷰를 '검토만' 하던 방식에서 조건부 실행 트리거로 강화.
          섹터가 상승 중임에도 종목이 정체하면 자본 낭비 = 기회비용 손실.
        condition_all_required:
          - "보유 거래일 >= 10"
          - "profit_pct < 1.0%  (본절 ±1% 이내 정체)"
          - "Ret5D_Sector_Proxy > 1.0%  (섹터 Proxy ETF 5일 수익률 +1% 초과)"
        action: "TRIM_30 — 30% 부분 청산 (기회비용 조기 회수)"
        rationale: >
          섹터가 오르는데 종목만 오르지 않으면 자본을 둔 의미가 없다.
          빈번한 진출입 방지를 위해 50%가 아닌 30% 조기 정리.
          잔여 70%는 thesis 유효 시 보유 연장 가능.
        exemptions:
          - "실적발표 D-10 이내: 적용 보류"
          - "외국인·기관 20D 순매수 전환 직후 3거래일 이내: 적용 연기"
          - "Ret5D_Sector_Proxy 미확인 시: DATA_MISSING — 적용 금지"
        output_columns: ["종목명", "보유일수", "profit_pct(%)", "Ret5D_섹터(%)", "조건충족여부", "조치"]
      alpha_lag_weed_out: "보유 10일 기준 KOSPI 대비 초과수익(Alpha)이 -5%p 이하일 경우, 수익/손실 무관 비중 30%를 축소하여 자본 효율성을 제고한다."
      D_plus_20: "수익률 +7% 미달 AND KOSPI 대비 Alpha 음수 → 보유수량 30% 청산 검토. 수익률만 미달이고 Alpha 양수면 유지."
      D_plus_30: "+10% 이상 미달 → 보유수량 50% 청산"
      D_plus_60: "time_stop 기준 연동 → 잔여 청산 검토"
    core_time_return_gate:
      D_plus_30: "+5% 이상 미달 → KOSPI 대비 초과수익 확인 후 재검토"
      D_plus_60: "+10% 이상 미달 → 보유수량 30% 청산 검토"
      D_plus_90: "time_stop 연동 → 유지 근거 없으면 50% 청산"
    benchmark_comparison: "종목 수익률이 동기간 KOSPI 대비 -5%p 이상 열위이면 재검토 트리거. 절대 수익 양수여도 해당."
    exception:
      - "실적발표 예정 D-10 이내: gate 적용 연기"
      - "외국인·기관 20D 순매수 전환 직후: gate 완화 (3거래일 추가 관찰)"
    prohibition:
      - "KOSPI 수익률 미확인 시 벤치마크 대비 열위 판단 금지"
      - "loss_recovery 목적으로 gate 기준 완화 금지"
    output_columns: ["계좌", "종목명", "진입일", "보유일수", "진입가", "현재가", "현재수익률(%)", "기간_KOSPI수익률(%)", "초과수익(%)", "gate_상태", "조치"]
