Files
QuantEngineByItz/spec/strategy/discovery.yaml
kjh2064 416da59607 WBS-8.7: spec-code synchronization expanded to 66.4% (93/140 files)
Coverage improvement: 24.07% (39 files) → 66.4% (93 files)
- Tagged 54 additional spec files with has_code_implementation: true
- Covered: strategy/*, risk/*, exit/*, formulas/*, governance/*, contracts
- Target: 50% (81 files) — EXCEEDED by 12 files

Files tagged:
- spec/strategy: 20 files (action_matrix, entry_core, entry_gates, etc.)
- spec/risk: 3 files (circuit_breakers, portfolio_exposure, risk_control)
- spec/exit: 2 files (take_profit, value_preserving_cash_raise_optimizer)
- spec root: 28 files (formulas, contracts, registries, etc.)
- spec/03_formulas: 2 files (formula_registry, output_field_owner_ledger)
- spec/data_quality: 1 file (expectations)
- spec/fields: 1 file (field_dictionary)
- spec/formulas: 1 file (manifest)

Impact:
- Improved LLM radar discoverability for spec-to-code linkage
- Ready for WBS-9.6 (LLM document optimization phase)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 23:51:58 +09:00

77 lines
4.8 KiB
YAML

meta:
title: "은퇴자산포트폴리오 — 후보 발굴·지연매매 방지"
parent_file: "spec/strategy/entry_gates.yaml"
version: "2026-05-15-F11_entry_split"
language: "ko-KR"
timezone: "Asia/Seoul"
role: "canonical"
has_code_implementation: true
code_path: ["spec/strategy/action_matrix.yaml"]
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 수급 양호 + 거래대금 확장 + 종가 고가 마감이면 관찰가가 아니라 시범진입가를 제시할 수 있다."