ee3e799de1
주요 변경: - tools/build_rebalance_engine_v1.py: REBALANCE_ENGINE_V1 신규 * account_snapshot 직접 합산(_build_snap_position_map) → 소수주 분리 행 병합 * 레짐 소스 macro.REGIME_PRELIM 최우선 (GAS 와 동일) - src/gas_adapter_parts/gdf_06_rebalance.gs: runRebalanceSheet_() 신규 * Logger.log / getSpreadsheet_() 로 run_all 연동 수정 - src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs * _mergePositionRecord_(): 소수주 중복 행 합산 신규 * parseInt → parseFloat (qty, availQty) - src/gas_adapter_parts/gdf_01_price_metrics.gs * 미보유 종목 SELL_READY → WATCH_EXIT_SIGNAL - spec/41_release_dag.yaml: build_rebalance_sheet 노드 추가 (step_count 63) - spec/51_formula_lifecycle_registry.yaml: REBALANCE_ENGINE_V1 등록 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
346 lines
24 KiB
YAML
346 lines
24 KiB
YAML
meta:
|
||
title: "은퇴자산포트폴리오 — 익절 정책"
|
||
parent_file: "spec/06_exit_policy.yaml"
|
||
version: "2026-05-16-F13_secular_leader"
|
||
language: "ko-KR"
|
||
timezone: "Asia/Seoul"
|
||
role: "canonical"
|
||
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_상태", "조치"]
|