meta: title: "은퇴자산포트폴리오 — 주도주 스캔·과열 방지" parent_file: "spec/strategy/entry_gates.yaml" version: "2026-05-16-F12_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" entry_timing_guardrails: principle: "좋은 종목도 비싸게 사면 수익이 나빠지지만, 강한 장세의 돌파를 놓치는 것도 손실이다. 진입은 추격이 아니라 단계화다." daily_leader_scan: purpose: "장마감 후 5개 조건(C1~C5)을 스캔해 탐색 후보를 등재한다. 4개 이상=탐색 후보, 3개=관찰 전용." scan_timing: "매일 장마감 후 (15:30~16:00)" conditions: C1_price: formula: "Close >= MA20 AND Close >= (High - (High-Low)*0.3)" meaning: "20일선 위 + 당일 종가가 장중 상단 70% 이내 (윗꼬리 배제)" score: 1 data: "data_feed 탭 Close·MA20·High·Low" C2_relative_strength: formula: "Ret10D_종목 >= Ret10D_KOSPI + 3%p" meaning: "최근 10거래일 수익률이 KOSPI 대비 +3%p 이상 초과" score: 1 data: "data_feed 탭 Ret10D 또는 직접 계산" C3_volume_surge: formula: "AvgTradeValue_5D_M >= AvgTradeValue_20D_M * 1.5" meaning: "최근 5일 평균거래대금이 20일 평균의 150% 이상" score: 1 data: "data_feed 탭 AvgTradeValue_5D_M·AvgTradeValue_20D_M (단위 통일: 억원)" C4_flow: formula: "Frg_5D > 0 OR Inst_5D > 0 AND Flow_OK=Y" meaning: "외국인 또는 기관 중 하나라도 5일 순매수 양수 AND Flow_OK=Y" score: 1 data: "quant_feed_contract.investor_flow_rules" C5_sector: formula: "sector_priority_ranking.Tier_1 AND sector_flow.Rotation_Score 순위 <= 3" meaning: "해당 종목 섹터가 Tier_1(최우선 섹터) AND Rotation_Score 상위 3위 이내" score_Tier1: 1.0 score_Tier2: 0.5 score_Tier3: 0 data: "sector_flow 탭 Rotation_Score + sector_priority_ranking 리스트" pass_rule: explore_candidate: "C1+C2+C3+C4+C5 합계 >= 4 → 탐색 후보 등재" watch_only: "합계 == 3 → 관찰 전용 (탐색매수 금지)" below_threshold: "합계 <= 2 → 이번 스캔 제외" entry_delay_rule: # [proposal_68 / 2026-05-15] 탐색 후보 등재 후 진입 지연 허용 기간 purpose: "탐색 후보 등재 후 실제 stage_1 진입까지 최대 3거래일 허용. 초과 시 자동 해제." preferred_timing: "탐색 후보 등재 익일(T+1) 개장 후 anti_climax_buy_gate 재확인 통과 시 진입" max_delay: duration: "3거래일 (T+1~T+3)" expiry_action: condition: "T+3 종가까지 stage_1 진입 미실행" action: "탐색 후보 자동 해제. 탐색 슬롯 1건 반환." re_entry: "동일 종목은 다음 날 daily_leader_scan 재스캔 통과 시 신규 후보로 재등재 가능" anti_climax_recheck: rule: "진입 당일 개장 전 anti_climax_buy_gate 5개 신호 재확인 필수" if_newly_triggered: "신호 3개 이상 새로 발생 시 해당 후보 즉시 해제" output_columns_add: ["후보등재일", "만료일(T+3)", "anti_climax재확인결과", "진입실행여부"] prohibition: - "T+4 이후 기존 탐색 후보 재활성화 금지. 신규 스캔 통과로만 재등재" - "anti_climax 재확인 없이 T+2~T+3 지연 진입 금지" candidate_signal_freeze: # [proposal_77 / 2026-05-15] 등재 후 일간 스캔 재결과 충돌 처리 purpose: "등재된 탐색 후보의 C점수가 이후 일간 스캔에서 변동될 경우 처리 원칙" freeze_rule: "탐색 후보 등재 당시(T+0 15:30 기준) C1~C5 합계를 유효 신호로 동결. 만료일(T+3 종가)까지 유지." rescan_role: "T+1·T+2·T+3 일간 스캔 결과는 '참고 표기'로만 출력. 기존 후보 자동 해제 근거로 사용 금지." mandatory_release_conditions: - "anti_climax_buy_gate에서 새로 S신호 3개 이상 발생 시 즉시 해제 (이 경우에만 스캔 재결과 반영)" - "T+3 종가 경과 시 자동 만료 (entry_delay_rule 준수)" output_requirement: "후보 테이블에 [등재일 C합계] vs [당일 C합계] 병기. 동결 여부 명시." prohibition: - "T+2~T+3 스캔에서 C합계 < 4로 하락했다는 이유만으로 후보 자동 해제 금지" - "스캔 재결과로 후보를 C합계 상향 처리 금지 — 동결 양방향 적용" sector_priority_ranking: # [proposal_63 / 2026-05-15] 섹터 동적 우선순위 — C5 판정 기준 고정 as_of: "2026-05-15 (매월 첫째 주 갱신)" Tier_1: description: "현재 KOSPI·KOSDAQ 수급·추세가 가장 강한 섹터. 탐색매수 최우선." sectors: ["반도체·AI메모리", "AI인프라·서버·전력반도체", "방산·항공우주", "조선·해운"] C5_score: 1.0 Tier_2: description: "추세 있으나 Tier_1 대비 약한 섹터. C5=0.5 부여 (합계 4점 도달 시 C1~C4 모두 필요)." sectors: ["전력기기·전선", "자동차·전기차", "바이오·제약(임상확인)", "엔터·콘텐츠(실적대형주)"] C5_score: 0.5 Tier_3: description: "수급 이탈·비주도. 신규 탐색 금지. sector_flow 순위 무관 C5=0." sectors: ["유통·소비재", "건설·부동산", "금융·보험", "기타소형주"] C5_score: 0 monthly_update: promotion: "Tier_2가 4주 연속 Rotation_Score 상위 3위 유지 → Tier_1 승격" demotion: "Tier_1이 2주 연속 Rotation_Score 6위 이하 → Tier_2 강등" prohibition: - "뉴스·테마 단기 급등만으로 Tier_1 즉시 승격 금지. 4주 연속 조건 필수." - "보유 종목 섹터를 Tier_1로 임의 분류 금지 (보유 편향)" demotion_protocol: # [proposal_67 / 2026-05-15] Tier 강등 즉시 탐색 금지 purpose: "Tier 강등 확정 즉시 해당 섹터 탐색 후보를 해제하고 5거래일 신규 탐색을 금지한다." trigger: "monthly_update.demotion 조건 충족 확정 시" immediate_actions: step_1: "강등 확정일: 해당 섹터의 현재 daily_leader_scan 탐색 후보 전부 즉시 해제" step_2: "강등 섹터 종목의 C5 점수를 강등 후 Tier 기준으로 즉시 재산정" step_3: "해당 섹터 신규 탐색매수(stage_1) 5거래일 금지" step_4: "기존 보유 위성(해당 섹터) → relative_weakness_exit 점검 주기 일간 임시 전환" cooldown_period: duration: "5거래일 (강등 확정일 기준)" resume_condition: > 5거래일 후 해당 섹터 Rotation_Score 5위 이내 AND 외국인·기관 순매수 5D 합산 양수 재확인 시 탐색 재개. 미충족 시 10거래일 추가 대기. prohibition: - "Tier 강등 5거래일 이내 해당 섹터 신규 탐색 진입 금지" - "기존 보유 위성은 강등만으로 즉시 전량 청산 금지 (relative_weakness_exit 준수)" data_integrity_guard: # [proposal_57 / 2026-05-15] daily_scan 할루시네이션 방지 guard pre_scan_checks: check_1_freshness: "as_of_date가 당일 장마감(15:30) 이내여야 함. 불충족 시 DATA_STALE — 탐색 후보 등재 금지." check_2_unit_consistency: "C3 산출 시 AvgTradeValue_5D_M·AvgTradeValue_20D_M 모두 억원 단위 확인. 불일치 시 C3=0." check_3_data_conflict: "동일 필드 복수 소스 오차 시 해당 C=0 처리." check_4_missing_defaults: C1_missing: "Close 또는 MA20 미확인 → C1=0" C2_missing: "Ret10D_종목 또는 Ret10D_KOSPI 미확인 → C2=0" C3_missing: "AvgTradeValue 미확인 → C3=0" C4_missing: "Flow_OK=N 또는 수급 미확인 → C4=0" C5_missing: "sector_flow 미제공 → C5=0" principle: "누락 데이터는 항상 0점. 추정·보간 금지." check_5_atr_prerequisite: "탐색 후보 등재 종목이라도 ATR20 미확인 시 [ATR미확인 — 진입 불가] 명시. 진입 허용 착각 방지." post_scan_prohibition: - "5개 조건 중 3개 이상 기본값(0)인 경우 탐색 후보 등재 금지" - "as_of_date 없이 스캔 결과 출력 금지" - "결과 '후보 없음'이어도 data_integrity_guard 실행 여부 표기 필수" # [proposal_93 / 2026-05-16] 코스닥 종목 진입 허들 상향 — 동일 C점수에서 더 높은 기준 요구 kosdaq_entry_gate_premium: purpose: "코스닥 종목은 유동성·기관수급 불안정성으로 인해 KOSPI 종목 대비 진입 허들을 1단계 높인다." explore_candidate_threshold: kospi_satellite: "C1+C2+C3+C4+C5 합계 >= 4 → 탐색 후보" kosdaq_satellite: "C1+C2+C3+C4+C5 합계 >= 5 → 탐색 후보 (1점 추가 요구)" kosdaq_watch: "합계 == 4 → 관찰 전용 (코스닥에서는 탐색매수 금지)" additional_required_any: - "기관 5D 순매수 양수 (Inst_5D > 0) — 코스닥은 외국인 단독 수급 신뢰도 낮음" - "거래대금 20D 평균 대비 150% 이상 (C3 조건과 동일하나 코스닥 저유동성 보정 재확인)" grade_cap: rule: "코스닥 종목은 CSCS >= 90이어도 A등급 상한 적용" exception: "코스닥 내 Tier_1 섹터(반도체·AI인프라 관련 코스닥 대형주) 이고 기관·외국인 동시 순매수 확인 시 예외 검토 가능. 단, daily_leader_scan 합계 >= 5 필수." output_column_add: ["시장구분(KOSPI/KOSDAQ)", "코스닥_추가조건_충족여부"] prohibition: - "코스닥 종목을 KOSPI 기준 탐색 후보 등재 금지 (합계 4점은 코스닥에서 관찰 전용)" - "기관 수급 미확인 코스닥 종목 A등급 부여 금지" output_table: columns: ["종목명", "시장구분", "C1", "C2", "C3", "C4", "C5", "합계", "판정(탐색/관찰/제외)", "ATR상태", "as_of_date"] prohibition: - "4개 미충족 종목 탐색매수 후보 등재 금지" - "코스닥 종목은 5개 미충족 시 탐색 후보 등재 금지" - "data_integrity_guard 미실행 상태 탐색 후보 표기 금지" - "→ master_prohibitions.P2(ATR미확인 진입 금지)·P5(데이터 없이 A등급 금지) 전역 적용" # [proposal_49 / 2026-05-15] 설거지 방지 규칙 통합 명문화 — anti_climax_buy_gate anti_climax_buy_gate: purpose: "급등 클라이맥스·주도주 설거지 구간을 정량적으로 차단한다. 5개 신호 중 3개 이상 = 신규매수 전면 금지." signals: S1_surge_5d: formula: "Ret5D_종목 >= 25%" meaning: "최근 5거래일 수익률 +25% 이상 급등" score: 1 data: "data_feed 탭 Ret5D 또는 직접 계산" S2_volume_climax: formula: "AvgTradeValue_5D_M >= AvgTradeValue_20D_M * 3.0" meaning: "5일 평균거래대금이 20일 평균의 300% 이상 (클라이맥스 물량)" score: 1 S3_upper_wick: formula: "(High - Close) / max(High - Low, 1) >= 0.35 AND High > 전고점" meaning: "당일 윗꼬리 비율 35% 이상 + 전고점 돌파 후 음봉 반전" score: 1 S4_smart_money_exit: formula: "Frg_5D < 0 AND Inst_5D < 0" meaning: "외국인 AND 기관 5D 동반 순매도 전환 (스마트머니 이탈)" score: 1 S5_retail_frenzy: formula: "Ind_5D > 0 AND (Frg_5D < 0 OR Inst_5D < 0)" meaning: "개인 순매수 + 외국인·기관 이탈 (뒤늦은 개인 매수 = 설거지 패턴)" score: 1 gate_rule: buy_ban: "합계 >= 3 → 신규 매수 금지 (탐색매수 포함)" caution: "합계 == 2 → 매수 허용하나 수량 50% 축소 + 사유 명시" clear: "합계 <= 1 → gate 통과" recheck_timing: # [proposal_76 / 2026-05-15] T+1 재확인 기준시각·데이터 명시 purpose: "탐색 후보 T+1 진입 전 anti_climax 재확인의 정확한 시점과 데이터 기준" execution_time: "T+1 08:30 이전 (개장 30분 전까지 완료)" data_reference: base_date: "T-1 (등재 전일) 20:00 시점 최신 확정 데이터" S1_S2_S3: "T-1 종가 OHLC 기준" S4_S5: "T-1 20:00까지의 5D 누적 신호 기준" prohibition: - "T+1 장중 데이터로 anti_climax 재판정 금지 (미확정 데이터 혼용)" - "T+1 09:00 이후 재확인 시도로 진입 지연 허용 금지" fallback: "T+1 08:30까지 데이터 수집 불가 시 → anti_climax 신호 합계 3으로 보수 처리 (매수 보류)" prohibition: - "anti_climax_buy_gate 발동 중 daily_leader_scan 탐색 후보 종목도 매수 금지" - "gate 발동 중 pullback_reentry_rule 재진입도 금지" - "5억 목표 압박을 이유로 gate 해제 금지 (→ master_prohibitions.P3)" output_table: columns: ["종목명", "S1", "S2", "S3", "S4", "S5", "합계", "gate판정", "가능수량비율"] # [proposal_48 / 2026-05-15] 3단계 탐색매수 체계 — staged_entry_v2