Trading Framework v1.2¶
한 문장: 개인 자본의 운용 모드를 먼저 정하고, 4축 정량 증거와 Hard Gate를 통과한 뒤, Red Team 경고를 사이징과 본인 재승인에 반영해 분할 진입·트리거 기반 손절. 그 외는 HOLD 또는 현금.
이 문서는 Market Wiki 프로젝트 내 모든 종목 의사결정의 최상위 참조다. CLAUDE.md, .claude/skills/*/SKILL.md, memory/*의 규칙들은 이 프레임워크의 구체 구현이다.
0. 기본 철학 (Principles)¶
P1. 장담 금지. 결과가 아니라 확률 분포를 유리하게 만드는 조건을 누적한다. "무조건·확실·이번엔 다르다" 금지.
P2. 증거의 독립성. 하나의 신호가 여러 축에 등장하면 1개로 세다. 예: "증권사 비중 확대"는 펀더멘털이 아니다. 같은 근거를 다른 축으로 변장시키지 않는다.
P3. Circular Reasoning 금지. "X가 샀으니 좋다"는 근거가 아니다. 펀더멘털·기술·매크로·Peer·과거 사례로 독립 검증된 논거만 사용.
P4. Inversion First. "이게 왜 틀릴 수 있는가"를 "이게 왜 맞는가"보다 먼저 물어본다. 멍거 원칙.
P5. Position Sizing > Stock Picking. 종목 고르기 실력보다 비중 관리가 장기 성과를 결정한다. 드러켄밀러 원칙.
P6. 기각이 기본값. 통과율 <20%가 목표. 대부분의 제안은 HOLD로 떨어진다. 결정 못 하는 게 나쁜 일이 아니다.
P7. 실수 즉시 철회, 포장 금지. 틀렸으면 철회하고 새 결과물 제시. 근본 원인 기록.
P8. 운용 모드 우선. Core Value, Momentum, Event-driven, Pair/Hedge, Special Situation, Exit/Risk Reduction을 같은 잣대로 평가하지 않는다. Hard Gate는 공통 차단, Soft Gate는 전략별 사이징·트리거·본인 재승인으로 처리한다.
1. 4축 판정 모델 (Decision Model)¶
각 종목은 4개 독립 축으로 평가한다. 각 축은 🟢/🟡/🔴 중 하나.
Axis 1 — 과열도 (Technical Extremity)¶
측정: - 52주 위치 (종가 기준 252거래일, 업계 표준) - RSI(14) — Wilder 원조 공식 - MA20 이격률, 볼린저밴드(20·2σ) 위치 - ATR(14) — 변동성 정규화
임계치: | 조합 | 판정 | |---|:---:| | 52주 <70% + RSI 40~60 + MA20 ±5% | 🟢 저과열 (진입 가능) | | 52주 70~85% + RSI 55~70 + MA20 +5~10% | 🟡 중립·경계 | | 52주 >90% + RSI >70 + MA20 +15%+ + 볼밴 >95% | 🔴 극단 과열 (Core Value 진입 금지, Momentum/Event는 Soft Gate) |
근거 (학술): Jegadeesh-Titman (1993) 모멘텀 + De Bondt-Thaler (1985) 평균회귀. 극단 과열에서 12개월 수익률 평균 -5~15% 회귀.
Axis 2 — 펀더멘털 (Intrinsic Value)¶
측정: 3가지 방법 병용 (단일 방법 의존 금지)
1. Justified P/B (Gordon Growth): (ROE − g) / (r − g) × BPS
2. DDM (Dividend Discount): DPS₁ / (r − g) — 고배당주 한정
3. 역사적 PBR·PER 평균회귀 — 최근 3~5년 정상 레짐 기준
4번 보조: 컨센서스 × 할인율 0.80~0.85 (애널리스트 낙관 편향 20% 보정, IBES 학술 연구)
임계치: | 조합 | 판정 | |---|:---:| | 현재가 ≤ 공정가 중앙값 + PBR < Peer 평균 + 흑자 지속 | 🟢 저평가 | | 현재가 = 공정가 평균 범위 | 🟡 적정 | | 현재가 > 공정가 평균 + PBR > Peer 2배 + 적자 | 🔴 고평가 |
근거 (학술): Fama-French 3-factor의 HML (High Minus Low book-to-market).
Axis 3 — 매크로·이벤트 (Regime & Catalyst)¶
측정: - 섹터 레짐: 순풍·역풍 리스트 (관세·금리·정책·수급·글로벌) - 카탈리스트: 실적·공시·규제 일정 (6개월 내) - 이벤트 시계열 명시: "YYYY-MM-DD에 발표" (모름이면 "시기 불확정" 표기)
임계치: | 조합 | 판정 | |---|:---:| | 순풍 ≥ 역풍 + 6개월 내 카탈리스트 (확정 일정) | 🟢 | | 순풍 = 역풍 or 카탈리스트 시점 불확정 | 🟡 | | 역풍 > 순풍 + 카탈리스트 이미 반영 or 부정적 | 🔴 |
필수 체크: WebSearch로 최신 (30일 이내) 뉴스 2건 이상 확인. 추측 금지.
Axis 4 — Peer 비교 (Relative Positioning)¶
측정: 같은 섹터·테마 Peer 3~5개와 비교 - 밸류 (PBR·PER·배당) - 모멘텀 (YTD%·3M%) - 퀄리티 (ROE·영업이익률·M/S)
임계치: | 조합 | 판정 | |---|:---:| | Peer 중 밸류 1~2위 + 모멘텀 중간 or 1위 | 🟢 | | 혼재 (한 축 1위, 다른 축 3위 이하) | 🟡 | | Peer 중 전부 3위 이하 ("모든 축에서 2등"은 기각 사유) | 🔴 |
근거 (철학): 린치 원칙 "한 문장으로 설명 안 되면 투자 안 한다"의 구현. Peer 대비 명확한 우위 = 한 문장 스토리.
축 외부 — 증권사 비중은 4축에 포함 안 됨¶
증권사 포트폴리오 비중 변화는 보조 참고일 뿐이며, 아래 3조건 충족 시만 인용 가능:
1. 같은 리포트 내 편입 사유 텍스트 존재 (shinhan_rationale.py --code {코드} 확인)
2. 이해상충 공시(ELS·LP·계열사) 없음
3. "투자 권유 아님" 면책 문구에도 불구하고 인용 시 증권사 의견임을 명시
2. 통합 판정 매트릭스 (Verdict Matrix)¶
| 4축 점수 | 액션 | 목표 비중 |
|---|---|---|
| 🟢🟢🟢🟢 | BUY | 3~8% 분할 진입 |
| 🟢🟢🟢🟡 | BUY (소량) | 1~3% 분할 |
| 🟢🟢🟡🟡 | HOLD — 개선 대기 | 0 (관찰) |
| 🟢🟡🟡🟡 | PASS | 0 |
| 🔴 1개+ 포함 | 기각 | 0 or 축소 |
마지막 단계: Red Team 5 에이전트 (A. Devil's Advocate · B. 기술 · C. 매크로 · D. Peer · E. 과거)
- 🟢 5개 → 확정
- 🟢 4개 + 🟡 1개 → 조건부 확정
- 🔴 1~2개 → 사이징 축소 또는 본인 재승인. Hard Gate 위반이면 기각
- 🔴 3개 이상 또는 🟡 3개 이상 → HOLD 강등 또는 기각
통과율 목표 <20%. 대부분의 제안은 여기서 걸러진다.
3. 실행 파이프라인 (Execution Pipeline)¶
Step 0. Rule 0 — 현재가 실시간 재수집 (yfinance/pykrx)
timestamp 필수, 장 중이면 "장중 진행가" 라벨
Step 1. 기술지표 수집 → scan_swap_candidates.py (통합)
또는 stock_tech_data.py (개별)
Step 2. decision-checklist 5-Block 실행 (Axis 1·2 원시 지표)
지평 1W/1M/3M/6M/12M 중 선택
Step 3. 증권사 근거 검증 → shinhan_rationale.py (신규, circular 차단)
Step 4. 4축 개별 판정 (🟢/🟡/🔴) + 통합 매트릭스
Step 5. Guru 4인 판정 (선택, 중대 결정 시) → guru-judgment
Lynch·Buffett·Munger·Druckenmiller 각자 관점
Step 6. Red Team 5 에이전트 병렬 (BLOCKING) → stock-redteam
경고 수를 사이징·본인 재승인에 반영. Hard Gate 위반은 즉시 기각
Step 7. 사용자 승인 → Quick Gate는 starter size, Full Gate는 분할 주문 (즉시 전량 금지)
Step 8. 판정 log 저장 → .claude/skills/stock-redteam/log/
LATEST.md 자동 갱신
4. 가격 트리거 (Trigger-Based Management)¶
감정 개입 금지. 사전 설정 숫자에 도달하면 기계적 실행.
| 트리거 | 조건 | 액션 |
|---|---|---|
| 매수 타이밍 | 현재가 ≤ 공정가 중앙값 AND MA20 근처 회귀 | 계획된 수량 중 50% 1차 진입 |
| 추가 매수 | 현재가 ≤ 1σ 월간 하방 (ATR 기반) | 30% 2차 진입 |
| 적극 매수 | 현재가 ≤ 2σ 월간 하방 (통계적 극단) | 20% 3차 진입 |
| 분할 익절 | 보유 +15% AND 과열 3지표 중 2개 해당 | 50% 매도 |
| 전량 익절 | 보유 +50% AND 4축 중 3축 🔴 전환 | 전량 매도 |
| Trailing Stop | 고점 대비 -15% 이탈 | 전량 매도 |
| MA Stop | MA5 < MA20 하향돌파 | 50% 매도 (추세 전환 신호) |
| 평균매수 손절 | 평균매수가 -15% 이탈 | 전량 매도 |
| 펀더멘털 손절 | 실적 가이던스 -10%+ 하향 | 전량 매도 |
5. 포지션 사이징 (Position Sizing)¶
드러켄밀러 Rule 직접 구현.
| 원칙 | 상한 | 산정 근거 |
|---|---|---|
| 단일 종목 / 총자산 | < 10% | 2000 닷컴, 2008 서브프라임 집중 실패 사례 |
| 단일 섹터 / 총자산 | < 25% | 섹터 레짐 전환 시 방어 |
| Top 5 종목 합산 | < 50% | 분산 최소 임계 |
| 상관관계 >0.8 종목 3개 이상 | 금지 | 숨은 집중도 |
| 신규 진입 최대 수량 | 총자산 × 5% | Kelly Criterion ¼ 적용 |
집중도 위반 상태: 4축 다 🟢여도 신규 매수 보류. 기존 집중도 해소 선행.
6. 강제 기각 조건 (Veto Catalog)¶
다음 중 하나라도 해당하면 4축 통과와 무관하게 기각:
- Red Team 5 에이전트 중 Hard Gate 🔴 또는 🔴 3개 이상 → HOLD 강등 또는 기각
- 현재가 검증 실패 — 가격 timestamp 없음, 장 중·마감 구분 없음
- 펀더멘털 근거 없음 — 3가지 공정가 산출 방법 중 2개 이상 미적용
- 매크로 WebSearch 실패 — 추측으로 채운 역풍/순풍 리스트
- Peer 비교 생략 — 최소 3개 Peer 수치 비교 없음
- 카탈리스트 일정 불명 — "조만간" "곧" 같은 모호한 표현
- Circular Reasoning — "증권사 X가 샀으니" 단독 근거
- 이벤트 3-소스 미검증 — 실적 날짜 등 공식 IR + 2개 뉴스 소스 이상 일치 필요
- 집중도 위반 상태 — 기존 단일/섹터/Top5 룰 위반 중 신규 매수
- 양도세 ROI 역전 — 매도 회수 − 양도세 < 대기 기대값
- 장 중 주문 미확정 가격 — KRX 15:30 전 매매 결정
7. 4인 구루 납득 근거 (Guru Buy-in)¶
이 프레임워크가 왜 4인 모두 납득 가능한가:
Peter Lynch¶
- 요구: 한 문장 설명. 숫자가 스토리를 뒷받침하는가
- 구현: Axis 4 Peer 비교 — "왜 이 종목이 Peer보다 나은지"를 한 문장으로 정리 강제
- 반박 방지: "모든 축에서 2등"은 기각 사유 — 린치의 "확실한 1등 아니면 제외" 원칙
Warren Buffett¶
- 요구: 10년 후에도 돈 벌 사업. Moat. 자본배분 합리성
- 구현: Axis 2 펀더멘털 공정가 3방법 — Gordon Growth(ROE 지속), DDM(배당 지속), 평균회귀(레짐 정상 구간)
- 반박 방지: 적자 기업은 Justified P/B 부적용 (🔴 자동)
Charlie Munger¶
- 요구: "이게 왜 틀릴 수 있는가" — Inversion
- 구현: Red Team 5 에이전트 = Inversion의 구조적 구현. Devil's Advocate가 실패 시나리오 5개 의무 제시
- 반박 방지: Hard Gate 🔴는 즉시 기각. Soft Gate 🔴는 사이징 축소·본인 재승인·추가 트리거로 처리
Stanley Druckenmiller¶
- 요구: 기대값 + 비대칭 + 포지션 사이징
- 구현:
- 판정 매트릭스 = 기대값 점수제
- Axis 1 과열도 = 비대칭 (극단 과열에서 하방:상방 10:1)
- Position Sizing 룰 = 단일 10%·섹터 25% 상한
- 반박 방지: 집중도 위반 시 자동 기각
8. 명시적 한계 (Known Limits)¶
이 프레임워크가 할 수 없는 것을 정직하게 기록:
- 모멘텀 초기 진입 제한 — 신고가 추격은 Momentum/Event 모드와 Quick Gate에서만 starter size로 가능
- 역발상 제한 — PBR > Peer 2배 성장주는 Special Situation 모드에서만 작은 비중으로 가능
- 단기 이벤트 트레이딩 제한 — Full Gate에는 시간이 걸리므로 Quick Gate는 증액 전 임시 실행만 허용
- 기대 수익률 상한 — 연 5~12% 현실적 (Alpha Seeker 아님)
- 블랙스완 대응 불가 — 사전 정의된 트리거만 작동, 예외 상황은 사용자 판단 필요
- 신흥국 개별종목 약함 — Peer 데이터 수집 제약 (중국·인도·베트남 등)
- 크립토·원자재 미포함 — 펀더멘털 산정 불가
- 모든 결정은 사용자 최종 승인 — 프레임워크는 의사결정 지원 도구, 자동 매매 금지
철학: 이 한계를 뛰어넘으려면 "투자"가 아닌 "도박" 영역. 우리는 안 들어간다.
9. 운영 규칙 (Operational Rules)¶
세션 시작 시 자동 참조 (순서 고정)¶
CLAUDE.md(자동 로드)portfolio_plan/LATEST.md— 최신 분석 인덱스memory/reference_key_market_facts.md— 매크로 상태memory/reference_user_portfolio_detail.md— 사용자 보유.claude/skills/stock-redteam/log/*_{ticker}_*.yaml— 최근 30일 종목별 판정docs/internal/trading_framework.md(이 문서)
데이터 Freshness¶
| 데이터 | 유효 기간 | 만료 시 |
|---|---|---|
| 현재가 | 30분 (장 중) / 당일 (장 마감) | 재수집 |
| regime snapshot | 7일 | WebSearch 재생성 |
| portfolio state | 1일 | save_analysis_snapshot.py portfolio |
| stock-redteam log | 30일 | 새 Red Team 실행 |
| 기술지표 JSON | 2시간 | stock_tech_data.py 재수집 |
출력 형식 강제¶
- 모든 가격 인용에 timestamp
- 포트폴리오 출력 헤더에 비교기간·데이터소스·누락영업일 3줄
- 섹터 비중 인용 시 정의(포함 종목 리스트) 명시
- "증권사 X가 샀다" 인용 시 편입 사유 텍스트 인용 또는 "근거 텍스트 없음" 명시
한국 시장 특수 요소¶
- 양도세: 해외 250만 공제 소진 여부 매도 권고 전 계산
- 계좌 구분: ISA (비과세 2000만) vs 일반 매수 시 명시
- 장 상태: KRX 장 중(09:00~15:30 KST) pykrx 반환값은 진행가, 확정 종가 아님
- 환율: USDKRW 실시간 동반 수집, 해외 원화환산 비중 계산
10. 버전 관리¶
이 프레임워크는 불변이 아니다. 실패 사례가 누적되면 개정한다.
- 개정 기준: stock-redteam log 누적 3개월마다 지표 측정 (SKILL.md의 "관측 가능한 성공 지표")
- 확정 통과율 >20%면 기준이 너무 느슨 → 강화
- 6개월 수익률 <60%면 판정 로직 재설계
-
특정 에이전트 🔴 비율 <5% or >60%면 편향 감지 → 프롬프트 수정
-
개정 프로세스: 이 문서 version 증가 + CHANGELOG 섹션 추가 + 사용자 승인 후 배포
11. 핵심 체크리스트 (Final Gate)¶
종목 의사결정을 사용자에게 전달하기 직전 단일 체크리스트:
□ 현재가 timestamp 30분 이내 (장 중이면 "진행가" 라벨)
□ 4축 각각 🟢/🟡/🔴 판정 명시
□ 판정 매트릭스 기반 액션 산출
□ 공정가 3가지 방법 병용
□ Peer 3개+ 수치 비교
□ 매크로 WebSearch 2건+ 확인
□ 카탈리스트 일정 YYYY-MM-DD 명시
□ 증권사 비중 인용 시 편입 사유 텍스트 확인
□ 집중도 위반 체크 (단일 10%·섹터 25%·Top5 50%)
□ 양도세 계산 (해외 매도 권고 시)
□ 분할 진입/청산 계획 (즉시 전량 금지)
□ 매수·매도·손절 트리거 가격 명시
□ 틀릴 시나리오 3개+ 제시
□ Red Team 5 에이전트 경고 수 기록 + Hard Gate 위반 0개
□ 운용 모드와 Quick/Full Gate 구분
□ 판정 log 저장
□ 사용자 승인 대기
16개 체크 모두 통과 못 하면 전달 금지. 이것이 이 프레임워크의 최종 Gate.
참조¶
- CLAUDE.md — 프로젝트 루트 가이드 (이 문서의 구현 세부)
.claude/skills/stock-redteam/SKILL.md— 5 에이전트 프로토콜.claude/skills/decision-checklist/SKILL.md— 5-Block 체크리스트.claude/skills/guru-judgment/SKILL.md— 4인 구루 프레임memory/feedback_broker_citation_rules.md— 증권사 인용 룰scripts/shinhan_rationale.py— 편입 사유 자동 추출scripts/scan_swap_candidates.py— 과열 스코어 자동 산출scripts/decision_checklist.py— 5-Block 자동 생성
철학적 마무리¶
"나는 시장을 이기려 하지 않는다. 시장이 나에게 유리한 순간이 올 때까지 기다린다. 그 순간이 왔는지 판단할 객관적 기준을 미리 정해둔다. 기준 충족 여부만 본다. 결과가 틀리면 기준을 수정한다. 기준 없이 느낌으로 움직이면 그건 도박이다."
— Drawing on Benjamin Graham, Peter Lynch, Warren Buffett, Charlie Munger, Stanley Druckenmiller
End of Framework v1.2.