Files
QuantEngineByItz/spec/exit/take_profit.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

348 lines
24 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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_상태", "조치"]