meta:
  title: "은퇴자산포트폴리오 — 서킷브레이커·거래통제"
  parent_file: "spec/risk/risk_control.yaml"
  version: "2026-05-16-F13_kosdaq_strict"
  language: "ko-KR"
  timezone: "Asia/Seoul"
  role: "canonical"
  has_code_implementation: true
  code_path: ["spec/strategy/action_matrix.yaml"]
  migration_status: "canonical_split_active"

risk_control:
  opening_volatility_filter:
    monitoring_window: "09:00~09:30"
    trigger:
      soft_block: "KOSPI 장중 시가 대비 -1% 이상 → 신규 위성 매수 보류"
      hard_block: "KOSPI 장중 시가 대비 -2% 이상 → 모든 신규 매수 중단 (기존 조건부 주문 포함)"
      emergency: "KOSPI 시가 대비 -3% + 거래대금 폭발 → 손절 실행 우선. 신규 매수 당일 금지."
    observation_required: ["09:30 이후 저가 확인", "09:30 이후 반등 거래대금", "V자 반등 또는 추가 하락 여부"]
    resume_condition:
      - "09:30~10:00 사이 KOSPI 시가 대비 +0.5% 이상 회복"
      - "거래대금이 전일 동시간대 대비 급격히 감소하지 않음"
    prohibition:
      - "09:00 직후 시장가 주문 금지"
      - "09:30 이전 신규 진입 지정가 주문 입력 금지"
      - "장중 급등 직후 신규 추격매수 금지"
      - "뉴스 첫 반응만 보고 본진입 금지. 종가 확인 전까지는 시범진입 수준만 허용"
    # [proposal_90 / 2026-05-16] 코스닥 종목 전용 병렬 필터 — 코스닥의 높은 일중 변동성 반영
    kosdaq_parallel_filter:
      applicable: "코스닥 종목 신규 매수 시에만 추가 적용 (KOSPI 필터와 독립 발동)"
      trigger:
        soft_block:  "KOSDAQ 장중 시가 대비 -1.5% 이상 → 코스닥 종목 신규 매수 보류"
        hard_block:  "KOSDAQ 장중 시가 대비 -2.5% 이상 → 코스닥 종목 모든 신규 매수 중단"
        emergency:   "KOSDAQ 장중 시가 대비 -3.5% + 거래대금 폭발 → 코스닥 보유 위성 손절 우선"
      resume_condition:
        - "09:30~10:00 사이 KOSDAQ 시가 대비 +0.7% 이상 회복"
        - "KOSPI 기준 opening_volatility_filter 블록이 해제된 상태"
      interaction:
        rule: "KOSPI 기준 필터와 KOSDAQ 기준 필터 중 더 강한 제한 적용."
        note: "코스닥 종목이라도 KOSPI 장 전체가 hard_block 상태면 코스닥 필터 별도 확인 불필요."
      prohibition:
        - "코스닥 종목 매수 시 KOSDAQ 병렬 필터 미확인 진입 금지"
        - "코스닥 지수 블록 중 다른 코스닥 종목으로 대체 매수 금지"

  concentration_brake:
    threshold:
      warning: "상위 3종목 합산 비중 65% 이상"
      hard_block: "상위 3종목 합산 비중 70% 이상"
    action:
      warning_시: "신규 A등급 종목 매수 시 기존 상위 종목 트림 우선 검토"
      hard_block_시: "신규 매수 전면 중단. 새 종목 매수 전 기존 집중 종목 부분 익절 필수."
    exception:
      - "삼성전자·SK하이닉스 합산 비중은 special_exception 기준으로 별도 계산"
      - "ETF와 직접보유가 동일 섹터 노출일 경우 합산 집중도로 계산"
    leader_concentration_override:
      trigger: "Leader_Concentration=1 AND Price_Status=PRICE_OK AND Flow_OK=Y AND Flow_Rows>=20 AND ATR20_Status=OK AND DART_Risk=없음"
      rule: "warning=1 유지, hard_block=0 유지. 신규 추격매수는 금지하되 확인된 시범진입과 본진입은 허용."
    prohibition: "→ master_prohibitions.P3 (집중도 브레이크 무력화 금지 포함)"

  weekly_circuit_breaker:
    measurement: "월요일 시가 → 금요일 종가 기준 포트폴리오 수익률"
    trigger:
      caution: "주간 누적 -3% 이하"
      circuit_break: "주간 누적 -5% 이하"
    action:
      caution_시: ["다음 주 신규 위성 매수 50% 감액", "현금 비중 12% 이상 확인"]
      circuit_break_시: ["다음 주 신규 매수 전면 중단", "보유 위성 time_stop 잔여일 재점검", "cash_floor 15% 이상 확보 확인"]
    reset_condition: ["다음 주 포트폴리오 수익률 +2% 이상 회복", "VIX caution 수준 하락"]
    prohibition: "→ master_prohibitions.P3 전역 적용 (서킷브레이커 발동 중 포함)"

  turnover_control_gate:
    purpose: "신호가 많아도 과잉매매는 거래비용으로 순수익률을 갉아먹는다. 주간 회전율과 비용 비율로 자동 제한한다."
    measurement:
      weekly_turnover_cost_pct: "(해당 주 총 매수금액 + 총 매도금액) × 예상수수료율(0.015%) / 총자산 × 100"
    threshold:
      caution:    "weekly_turnover_cost_pct >= 0.15% → 이번 주 신규 진입 수량 50% 감액"
      hard_block: "weekly_turnover_cost_pct >= 0.30% → 이번 주 신규 진입 전면 보류 (손절·익절 실행은 허용)"
    reset_condition: "다음 월요일 00:00 KST에 자동 초기화"
    exception: "weekly_circuit_breaker.circuit_break 발동 중 손절 집행은 이 게이트와 관계없이 실행"
    # [P_C / 2026-05-15] 주간 신규 진입 건수 상한 — 비용률(%) 기준만으로는 소액 고빈도 과매매를
    # 통제하지 못하는 공백 해소. 예: 0.05% × 10건 = 0.5%이지만 hard_block은 0.30% 기준이므로 미발동.
    weekly_trade_count:
      measurement: "월요일~금요일 신규 진입(매수 체결 기준) 건수. 손절·익절·리밸런싱 축소 매도는 제외."
      count_unit: "계좌·종목 단위. 동일 종목 분할 매수는 1건으로 합산하지 않고 체결 건수로 계산."
      threshold:
        caution:    "주간 신규 진입 3건 초과 → 추가 진입은 A등급 ONLY. 수량은 계획의 최솟값(pilot_tranche)만 허용."
        hard_block: "주간 신규 진입 5건 초과 → 주 내 신규 매수 전면 보류. 손절·익절 실행은 허용."
      reset_condition: "매주 월요일 00:00 KST 자동 초기화 (weekly_turnover_cost_pct와 동시 초기화)"
      exception:
        - "weekly_circuit_breaker 발동 중 손절 집행은 카운트 제외"
        - "ISA·연금저축 정기 납입 후 의무 투자 집행 1건은 카운트 제외"
      interaction_with_cost_gate:
        rule: "weekly_trade_count와 weekly_turnover_cost_pct는 AND 조건으로 동시 적용."
        priority: "둘 중 더 강한 제한(hard_block)이 우선한다."
    prohibition:
      - "turnover_cost 미산출 상태에서 3건 이상 신규 매수 연속 집행 금지"
      - "비용 회피 목적으로 분할 주문을 하나의 주문으로 합산 계산하지 않는 행위 금지"
      - "weekly_trade_count.caution 상태에서 B등급 이하 종목 신규 진입 금지"

  drawdown_recovery_speed_gate:
    purpose: "낙폭 이후 회복이 느리면 자금이 오래 묶이고 다음 기회를 놓친다. 회복 기한 초과 시 신규 위성을 제한해 손실 확대를 방지한다."
    measurement:
      recovery_target: "낙폭 발동 기준 수익률 수준으로 포트폴리오 수익률 복귀"
    threshold:
      minus_5_level:
        trigger:        "portfolio.monthly_minus_5 발동일 (월간 -5%) 또는 weekly_circuit_breaker.circuit_break 발동일 (주간 -5%)"
        deadline:       "발동일로부터 15거래일"
        slow_action:    "기한 초과 시 신규 위성 진입 수량 50% 감액. performance_brake 연동."
      minus_8_level:
        trigger:        "portfolio.monthly_minus_8 발동일 (월간 -8%, portfolio_hard_stop_procedure 연계)"
        deadline:       "발동일로부터 25거래일"
        slow_action:    "기한 초과 시 신규 위성 전면 보류 + risk_budget 50% 감액 (performance_brake 동일 원칙 준용)."
    reset_condition: "포트폴리오 수익률이 해당 낙폭 기준점 이상 회복 확인 시 자동 해제"
    exception: "코어 포지션 손절·익절 집행은 이 게이트와 무관하게 실행"
    prohibition:
      - "회복 기한 초과 상태에서 고위험 위성 신규 진입 금지"
      - "→ master_prohibitions.P3 전역 적용 (회복 미완료 중 감액 무력화 포함)"

  # [P_A / 2026-05-15] 엔캐리 언와인드 전용 방어 모듈 — USD/JPY 조건이 correlation_shock 다단계 조건에 묻혀
  # 즉각 발동이 지연되는 구조적 공백을 해소. 2024-08-05 유형 하루 폭락 대비 선행 경보 채널 분리.
  yen_carry_unwind:
    purpose: >
      엔캐리 청산은 종목 펀더멘털과 무관한 글로벌 유동성 발작이다.
      correlation_shock의 다단계 조건(KOSPI 이탈·VIX·수급 동반 확인)을 기다리면
      이미 하루 만에 -5~-10% 폭락이 발생한 이후다.
      USD/JPY 급락을 단독 선행 트리거로 분리해 즉각 대응한다.
    trigger:
      early_warning:
        condition: "USD/JPY 2거래일 내 -1.5% 이상 급락 (엔화 급등)"
        data_source: "macro 탭 USD_JPY_Close 또는 Yahoo Finance USDJPY=X"
        note: "BOJ 금리 인상 발표·YCC 정책 변경 시 당일 적용"
      full_alert:
        condition: "USD/JPY 3거래일 내 -3% 이상 급락 OR early_warning + VIX >= 20 동시 충족"
        data_source: "macro 탭 USD_JPY_Close, VIX_Close"
    action:
      early_warning_시:
        - "위성 신규매수 즉시 중단"
        - "중복 ETF 50% 이상 즉각 축소 검토"
        - "cash_floor 목표를 overheated_or_event_week 수준(10~15%)으로 상향"
      full_alert_시:
        - "portfolio_hard_stop_procedure 즉시 준용"
        - "cash_floor 강제 25% 이상 (risk_off 기준)"
        - "위성 포지션 70% 이상 1~2회 분할 지정가 축소"
        - "코어 직접보유는 20일선·5D 수급 동반 이탈 확인 후 부분 축소 검토"
    relation_to_unified_engine:
      note: >
        full_alert 발동 시 unified_engine.trigger_matrix.Systemic 조건
        ('USD/JPY 3거래일 내 3% 급락')과 동시 충족으로 간주.
        Systemic + Portfolio/Correlation 중 1개 이상 → Tier_2 이상 자동 진입.
      deduplication: "unified_engine Tier 조치와 중복 실행 금지. 더 강한 Tier 조치만 1회 적용."
    resume_condition:
      - "USD/JPY 3거래일 연속 안정화 (일간 변동 ±0.5% 이내)"
      - "VIX 20 이하 하락 확인"
      - "KOSPI 20일선 회복 확인"
    prohibition:
      - "early_warning만으로 전량 청산 금지"
      - "USD/JPY 단순 일중 변동을 트리거로 오적용 금지 (종가 기준으로만 판정)"
      - "BOJ 회의 없는 단순 환율 변동에 full_alert 적용 금지"
      - "엔캐리 해소 후 반등 직후 즉각 위성 재진입 금지 (reentry.system_risk_exit 쿨다운 준용)"

  # [proposal_51 / 2026-05-15] 현금 가변 운용 공식화 — market_risk_score_based_cash
  sector_crash_intraday_protocol:
    purpose: >
      opening_volatility_filter(장 개시 기준)와 portfolio_hard_stop_procedure(월간 -8% 기준) 사이
      공백 구간(섹터 -4~-7% 당일 급락)에 대한 즉각 대응 프로토콜.
    applicable_sectors: "보유 종목이 속한 주도섹터 OR KOSDAQ 종합 기준"
    tiers:
      # [proposal_89 / 2026-05-16] 코스닥 독립 트리거 엄격화 — 코스닥은 코스피 대비 -1%p 낮게 조기 발동
      tier_A:
        condition: "주도섹터 -4% 이상 당일 하락 OR KOSDAQ -3% 이상"
        action:
          - "해당 섹터 위성 신규 탐색매수 당일 전면 중단"
          - "staged_entry_v2 stage_1 신규 진입 중단"
          - "기존 보유 위성 → existing_position_rule 기준 처리 (아래 참조)"
        timing: "15:30 종가 확인 후"
        existing_position_rule:  # [proposal_69 / 2026-05-15] tier_A 중 보유 위성 anti_climax 처리
          check_target: "위성 포지션 전체 (CSCS < 70인 종목)"
          action_by_signal_count:
            signal_2:
              condition: "anti_climax_buy_gate 신호 합계 = 2개"
              action: "손절선을 현 평단가(본절) 또는 최근 5D 저점 중 높은 값으로 상향 재설정. 추가 매수 금지."
            signal_3_plus:
              condition: "anti_climax_buy_gate 신호 합계 >= 3개"
              action: "해당 위성 보유수량의 50% 지정가 즉시 매도 (전일종가 -0.5% 이하. 시장가 금지)."
            signal_1_or_less:
              action: "손절가 재확인 후 유지. 추가 조치 없음."
          prohibition:
            - "tier_A 발동 중 위성 신규 매수 또는 pyramiding 증액 금지"
      tier_B:
        condition: "주도섹터 -5% 이상 OR KOSDAQ -4% 이상"
        action:
          - "tier_A 조치 모두 실행"
          - "보유 위성 중 staged_entry_v2 stage_1 물량 전량 청산 (FC 귀속)"
          - "cash_floor market_risk_score_based_cash MRS += calibration_registry.MRS_CIRCUIT_BREAKER_ADJUSTMENT_PTS (spec/calibration_registry.yaml 참조)"
          - "pyramiding_rule 추가 증액 중단"
        timing: "당일 장중 또는 15:30 직후"
      tier_C:
        condition: "주도섹터 -7% 이상 OR KOSDAQ -6% 이상 (극단 신호)"
        action:
          - "tier_B 조치 모두 실행"
          - "opening_volatility_filter.hard_block 준용: 다음 거래일 신규 매수 전면 중단"
          - "portfolio_hard_stop_procedure step_1·2 즉시 준용"
          - "unified_engine.trigger_matrix.Portfolio 발동 여부 확인"
        timing: "당일 장중 또는 15:30 직후"
    next_day_resume:
      tier_A: "다음 거래일 주도섹터 -1% 이내 안정 또는 반등 확인 후 탐색매수 재개"
      tier_B: "다음 거래일 주도섹터 +0.5% 이상 반등 AND KOSDAQ -1.5% 이내 AND daily_leader_scan >= 4 종목 존재 시"
      tier_C: "unified_engine.resume_condition 준수 (VIX·KOSPI 안정 등)"
    interaction:
      opening_volatility_filter: "sector_crash_intraday_protocol은 종가 기준. opening_volatility_filter는 개시(09:00~09:30) 기준. 독립 발동. 동시 충족 시 더 강한 제한 적용."
      yen_carry_unwind: "섹터 급락이 엔화 급등과 동시 발생 시 yen_carry_unwind.early_warning + 이 프로토콜 tier_B 이상 동시 발동."
    output_table:
      columns: ["섹터/지수", "당일수익률(%)", "트리거단계", "즉시조치", "다음날재개조건"]
    prohibition:
      - "섹터 급락 당일 패닉 시장가 전량 청산 금지 — 분할 지정가만 허용"
      - "급락 당일 V자 반등 기대로 탐색매수 조기 재개 금지"
      - "tier_A 발동 중 다른 종목 신규 탐색매수 예외 허용 금지"
