원자 에이전트 프레임워크 v1¶
작성: 2026-05-15 목적: 3단계 루틴(장전/장마감/저녁)을 구성하는 원자 에이전트의 설계 원칙과 목록. 근본 목표: 체계적이고 근거 있는 해석 → 정확한 종목 발굴 → 실제 수익.
1. 설계 원칙¶
1-A. 데이터 프레임: 변화+누적 (스팟 금지)¶
모든 수치 데이터는 다음 구조로 전달·해석:
data_frame:
value: 현재값
change_1d: 전일 대비 변화 (%, bp, 절대값)
change_5d: 5거래일 누적 변화
change_20d: 20거래일 누적 변화
streak: 같은 방향 연속 일수 (양수=상승연속, 음수=하락연속)
direction: "accelerating|maintaining|decelerating|reversing|mixed"
vs_norm: 20일 평균 대비 위치 (예: "2.3σ above")
해석 규칙:
- change_1d만으로 판단 금지. 반드시 change_5d/change_20d와 교차.
- streak ≥ 3이면 추세, streak 반전이면 전환 신호.
- direction은 change_1d vs change_5d 비교로 결정:
- 같은 방향 + 크기 증가 = accelerating
- 같은 방향 + 크기 유지 = maintaining
- 같은 방향 + 크기 감소 = decelerating
- 방향 반전 = reversing
- 비일관 = mixed
적용 예시:
❌ "외인 순매수 15만주" → 판단 불가
✅ "외인 5d 누적 -200만주(매도 가속 streak -4) → 오늘 +15만주 반전(reversing).
20d 누적 -1,800만주. 1일 반전으로 추세 전환 판정 불가, 3일 연속 확인 필요."
1-B. 에이전트 구조: 5단계 체인¶
모든 원자 에이전트는 이 구조를 따름:
┌─────────────────────────────────────────┐
│ 1. INPUT SPEC (수신 데이터) │
│ - 데이터 소스 (스크립트/API/파일) │
│ - 필수 필드 목록 │
│ - 최소 기간 (예: 5일 이상) │
│ - data_frame 적용 필드 │
├─────────────────────────────────────────┤
│ 2. QUESTION (단일 질문) │
│ - 1문장으로 정의 │
│ - 답이 enum이면 enum 명시 │
├─────────────────────────────────────────┤
│ 3. FRAMEWORK (해석 프레임워크) │
│ - 판정 기준표 (deterministic) │
│ - 입력 → 중간 판정 → 최종 판정 순서 │
│ - 예외 규칙 │
├─────────────────────────────────────────┤
│ 4. EVIDENCE CHAIN (근거 체인) │
│ - 데이터 → 관찰 → 해석 → 결론 순서 │
│ - 각 단계에 source_ref 필수 │
│ - 결론에 confidence (high/med/low) │
├─────────────────────────────────────────┤
│ 5. OUTPUT SCHEMA (산출물) │
│ - JSON 필드 정의 │
│ - 필수/선택 구분 │
│ - 다음 단계 에이전트가 읽는 키 명시 │
└─────────────────────────────────────────┘
1-C. 품질 규칙¶
- 근거 없는 해석 금지 — 모든 판정에
evidence필드. 데이터 미확인이면"unknown"+confidence: "low". - 단정 금지 — 1일 데이터로 추세 판정 금지. 최소 3일 연속 확인.
- 교차 검증 — 가능하면 2개 이상 소스로 같은 결론 도달. 불일치 시
conflict플래그. - change_frame 의무 — 수치 인용 시 반드시 변화율+누적+방향 동반. 절대값만 쓰면
[INCOMPLETE].
2. 3단계별 에이전트 구성¶
장전 (MORNING_OPEN, 06:00~08:50)¶
목표: "오늘 움직일 테마와 종목 특정"
| ID | 에이전트 | 질문 | 입력 | 산출물 키 |
|---|---|---|---|---|
| MO-1 | global-asset-scanner | "밤사이 글로벌 자산이 어떤 방향으로 얼마나 움직였고, 한국에 어떤 의미인가?" | fetch_global_assets.py → data_frame 적용 | global_assets[], cross_interpretation |
| MO-2 | sector-transfer-mapper | "미장 섹터별 등락이 한국 어떤 테마로 전이되는가?" | MO-1 + 미장 개별종목 등락 | sector_transfer[] + big_movers[] |
| MO-3 | overnight-material-grader | "밤사이 발생한 재료 중 오늘 장에 영향을 줄 것은?" | news_radar + 텔레그램 + 정책 RSS + 브로커리포트 | materials[] (catalyst_grade, theme_mapping) |
| MO-4 | carry-forward-validator | "어제 저녁 carry_forward가 밤사이 데이터로 여전히 유효한가?" | evening_view.carry_forward + MO-1~3 결과 | evening_carry_forward_ref.validated |
| MO-5 | signal-synthesizer | "오늘 시그널은 무엇이고, 각각 어떤 테마/종목으로 연결되는가?" | MO-1~4 전체 | today_signals[], today_themes[], watch_list[] |
MO-1 → MO-2 (섹터 전이에 자산 데이터 필요)
MO-1 + MO-3 → MO-4 (carry_forward 검증에 새 데이터 필요)
MO-1~4 → MO-5 (종합)
장마감 (POST_MARKET, 15:20~20:00)¶
목표: "실제 결과 대조 + 강한 테마/종목 식별 + 신규 발견"
| ID | 에이전트 | 질문 | 입력 | 산출물 키 |
|---|---|---|---|---|
| PM-1 | signal-scorecard | "아침 시그널 각각이 맞았나 틀렸나? 왜?" | morning_view.today_signals + 당일 시장 데이터 | signal_scorecard[], signal_accuracy, missed_signals[] |
| PM-2 | theme-strength-ranker | "오늘 실제로 어떤 테마가 강했고, 생명주기 어디인가?" | 거래대금 Top200 + 테마별 그룹핑 + 20d timeline | strong_themes_today[] (lifecycle, freshness) |
| PM-3 | limit-up-investigator | "상한가/급등 종목의 WHY와 지속성은?" | 상한가 목록 + WebSearch + ISSUE_LOG | limit_up_stocks[] (why, material_type, verdict) |
| PM-4 | new-discovery-detector | "오늘 처음 등장했거나 이상 움직임을 보인 종목은?" | 거래대금 순위 변동 + 가격 이상 + morning_view에 없던 종목 | new_discoveries[] |
| PM-5 | position-evaluator | "보유/추적 종목의 상태 변화와 조건 점검" | GO/WAIT 목록 + 당일 가격/수급 | position_results[], go_wait_changes[] |
| PM-6 | derivatives-reader | "파생 포지셔닝이 내일 방향에 대해 뭘 말하는가?" | 선물 주체별 5d + 베이시스 + VIX + 옵션 | derivatives (data_frame 적용) |
| PM-7 | tomorrow-checklist-builder | "내일 확인해야 할 것은?" | PM-1~6 전체 | tomorrow_carry |
(PM-1~6 병렬 실행 가능)
PM-1~6 → PM-7 (종합)
저녁 (EVENING, 20:00~)¶
목표: "구조적 분석 + 내일 테마/후보 특정 + carry_forward 생성"
| ID | 에이전트 | 질문 | 입력 | 산출물 키 |
|---|---|---|---|---|
| EV-1 | macro-4axis | "금리/원자재/환율/유동성 4축이 한국 시장에 어떤 환경을 만드는가?" | fetch_global_assets + macro_series + data_frame | macro_assessment |
| EV-2 | material-collector | "장마감 후 발생한 새 재료는?" | 뉴스/정책/발언/실적 WebSearch + 텔레그램 | tonight_materials[] (raw) |
| EV-3 | material-validator | "각 재료가 구조적인가 일시적인가?" | EV-2 + ISSUE_LOG + POLICY_TRACKER + WebSearch | materials[] (4Q binary → structural/semi/temporary) |
| EV-4 | meta-analyzer | "최근 5~10일 시장 방향/재료 반응/자금 흐름이 어떻게 변하고 있는가?" | 최근 5~10일 post_market_view 시계열 | meta_analysis |
| EV-5 | risk-radar | "6개 리스크 도메인에서 변화가 있는가?" | EV-1 + EV-2 + POLICY_TRACKER | risk_radar[] |
| EV-6 | theme-selector | "내일 어떤 테마가 유력하고, 시나리오는?" | EV-1~5 + PM-2(today's strong themes) + PM-4(discoveries) | tomorrow_themes[] (with scenarios) |
| EV-7 | candidate-screener | "유력 테마에서 진입 가능한 종목은?" | EV-6 테마 → candidate_from_theme → 6축 분석 | tomorrow_candidates[] (six_axis, entry/sl/tp/rr) |
| EV-8 | carry-forward-builder | "내일 아침에 전달할 핵심은?" | EV-1~7 전체 + PM-5(position updates) | carry_forward |
EV-1, EV-2, EV-4 병렬
EV-2 → EV-3 (재료 수집 후 검증)
EV-1~5 → EV-6 (테마 선정)
EV-6 → EV-7 (종목 스크리닝)
EV-1~7 → EV-8 (carry_forward)
3. 핵심 에이전트 상세 설계 (5개)¶
기존 에이전트 중 가장 잘 설계된 SEN-1, NC-3, S3, material-validator, M1의 패턴을 계승.
3-1. MO-2: sector-transfer-mapper¶
질문: "미장 섹터별 등락이 한국 어떤 테마로 전이되는가?"
입력:
input:
us_sectors:
- sector: "Semiconductors"
proxies:
- {ticker: "SOX", close: 11775, change_1d: 5.51, change_5d: null, change_20d: null, streak: 2, direction: "accelerating"}
- {ticker: "NVDA", close: 950, change_1d: 1.75, change_5d: 8.2, change_20d: 25.3}
- {ticker: "MU", close: 145, change_1d: 15.49, change_5d: 22.0, change_20d: 73.0}
minimum: 10개 섹터, 섹터당 2+ 프록시
해석 프레임워크:
Step 1 — 섹터 평균 등락 계산:
avg_change = mean(proxy.change_1d for proxy in sector.proxies)
Step 2 — 전이 강도 판정 (결정론적): | 조건 | 전이 강도 | |------|----------| | avg_change ≥ 3% AND 개별 프록시 2+ 이상 ≥ 2% | strong | | avg_change ≥ 1.5% OR 개별 프록시 1개 ≥ 5% | moderate | | avg_change ≥ 0.5% | weak | | avg_change < 0.5% | none | | avg_change ≤ -1.5% | negative_transfer |
Step 3 — 한국 테마 매핑 (고정 테이블 + 동적 확장):
| 미국 섹터 | 전이 테마 | 조건부 확장 |
|---|---|---|
| Semiconductors (SOX/NVDA/AMD) | AI반도체/HBM | MU 단독 +5%+ → DRAM/NAND 추가 |
| Memory (MU/WDC) | DRAM/NAND, HBM소재 | |
| Foundry (ASML/AMAT/KLAC) | 반도체장비 | |
| EV (TSLA) | 2차전지, 자율주행 | TSLA +5%+ → 로봇(Optimus) 추가 |
| Space (RKLB/LMT) | 우주항공, 방산 | RKLB 단독 +10%+ → 뉴스페이스 분리 |
| Nuclear (CEG/VST/SMR) | 원전/SMR | |
| Renewable (ENPH/FSLR) | 태양광/풍력 | |
| Oil (XOM/CVX) | 정유/석유화학 | WTI +3%+ → 유가 연관 전체 확장 |
| Pharma (LLY/NVO) | 바이오/제약 | |
| Finance (JPM/GS) | 금융/증권 | |
| Crypto (COIN/MSTR) | 가상자산/블록체인 | BTC +5%+ → 가상자산 확대 |
| AI Software (MSFT/GOOG/META) | AI SW |
Step 4 — Big Mover 개별 분석 (|change_1d| ≥ 3%):
- 각 Big Mover에 대해 why (WebSearch 1회)
- 한국 전이 종목 명시 (ats_main.json 매핑 또는 업종 연관)
근거 체인 포맷:
데이터: MU +15.49% (1d), +73% (20d), streak +5
관찰: 메모리 섹터 단독 초강세. 245TB DC SSD 출하 (CNBC)
해석: 메모리 수요 구조적 확장 확인. 20d +73%에도 가속 중
결론: 한국 전이 → SK하이닉스/삼성전자/한미반도체 (강도: strong)
confidence: high (20d 추세 + 당일 가속 + 하드 카탈리스트)
산출물:
sector_transfer:
- sector: "Memory"
avg_change_1d: 15.49
transfer_strength: "strong"
korean_themes: ["DRAM/NAND", "HBM소재"]
korean_stocks: ["SK하이닉스", "삼성전자", "한미반도체"]
evidence: "MU +15.49%(1d)/+73%(20d) streak+5. 245TB DC SSD 출하"
big_movers:
- ticker: "MU"
change_1d: 15.49
change_5d: 22.0
change_20d: 73.0
streak: 5
why: "245TB DC SSD 출하, 주간 역대 최고 랠리"
korean_transfer: ["삼성전자", "SK하이닉스", "한미반도체"]
source_ref: "CNBC 2026-05-10"
3-2. PM-1: signal-scorecard¶
질문: "아침 시그널 각각이 맞았나 틀렸나? 왜?"
입력:
input:
morning_signals: morning_view.today_signals[] # 번호 매겨진 시그널
market_data:
kospi: {close, change_pct, high, low, volume}
theme_results: 테마별 당일 등락/거래대금
stock_results: 시그널에 언급된 종목별 종가/등락
해석 프레임워크:
시그널별 판정 (결정론적):
| 조건 | 판정 |
|---|---|
| 예상 방향대로 + 예상 종목 실제 반응 | HIT |
| 예상 방향 맞으나 크기 미달 또는 일부 종목만 | PARTIAL |
| 예상 방향 틀림 (무반응) | MISS |
| 예상 방향 반대로 작동 | REVERSE |
MISS/REVERSE인 경우 근본 원인 분류 (필수):
| 카테고리 | 정의 | 예시 |
|---|---|---|
| policy_blind_spot | 국내 정책/발언 미예측 | 김용범 AI 배당 발언 |
| earnings_calendar_miss | 실적 발표 일정 미추적 | LG전자 실적 서프라이즈 |
| transfer_failure | 미국→한국 전이 미발생 | 우주섹터 폭등 → 한국 무반응 |
| external_shock | 예측 불가 외부 충격 | 지정학, 자연재해 |
| timing_mismatch | 방향은 맞으나 시점 불일치 | 오전 HIT → 오후 역전 |
| overestimation | 전이 강도 과대 평가 | weak을 strong으로 |
산출물:
signal_scorecard:
- signal_id: "S1"
morning_signal: "SOX +5.51% 반도체 강세"
expected: "SK하이닉스/삼성전자 강세"
actual: "오전 +3.56% → 오후 -2.39%"
verdict: "REVERSE"
root_cause_category: "policy_blind_spot"
root_cause_detail: "김용범 AI 배당 의무화 발언 미예측"
lesson: "금융위 발언 POLICY_TRACKER 추적 추가"
signal_accuracy:
total: 7
hit: 2, partial: 1, miss: 2, reverse: 2
accuracy_pct: 42.9
missed_signals:
- id: "MISS-1"
what: "김용범 AI 배당 발언"
category: "policy_blind_spot"
could_have_caught: "금융위 5/8 보도가 ISSUE_LOG 미등재"
action_item: "POLICY_TRACKER에 금융위/공정위 발언 추적 추가"
3-3. EV-3: material-validator (기존 패턴 계승)¶
질문: "이 재료는 구조적인가 일시적인가? 구조적이면 한국 어디로 파급되는가?"
입력:
input:
materials: EV-2 수집 결과 (headline, source, category)
issue_log: docs/trading_playbook/ISSUE_LOG.md
policy_tracker: docs/trading_playbook/POLICY_TRACKER.md
websearch: 검증용
해석 프레임워크: 4-Question Binary (기존 그대로)
| Q | 질문 | Y 기준 | 도구 |
|---|---|---|---|
| Q1 | 반복적/구조적인가? | ISSUE_LOG 2회+ 등장 또는 정책 사이클 일부 | ISSUE_LOG grep |
| Q2 | 실체가 있는가? | 수주/매출/계약/생산 확인 가능 | WebSearch |
| Q3 | 정책 뒷받침? | 법/예산/규제/보조금 확인 | POLICY_TRACKER + WebSearch |
| Q4 | 시장이 알고 동의? | 증권사 2+개 언급 OR 거래량 20d 평균 150%+ | WebSearch + sector_series |
등급 결정 (결정론적):
4Y → structural (풀사이즈 가능)
3Y+1N/U → semi_structural (제한 포지션)
≤2Y → temporary (진입 불가)
Q2=N → 최대 semi_structural (실체 없으면 신뢰 제한)
파급 경로 추적 (structural/semi만):
재료 → 직접 수혜 업종(매출/이익 변동) → 간접 수혜(밸류체인) → 한국 테마명
강도: direct / indirect / sentiment
3-4. EV-7: candidate-screener¶
질문: "유력 테마에서 진입 가능한 종목은? R:R은?"
입력:
input:
themes: EV-6.tomorrow_themes[]
stock_pool: candidate_from_theme.py 실행 결과 (10~100종목)
daily_chart: kiwoom_rest_api.get_daily_chart() # data_frame 적용
flow_series: collect_stock_flow_series.py # 5d/20d 누적 + 패턴
financials: DART MCP 최근 3~4분기 IS
material_grade: EV-3 structural_validation 결과
해석 프레임워크: 6축 스코어링
각 축은 긍정/중립/부정 판정 + data_frame 기반 근거:
| 축 | 질문 | 긍정 기준 | 부정 기준 | 데이터 소스 |
|---|---|---|---|---|
| 차트 | 기술적 구조가 진입에 유리한가? | 상승추세 + 지지 근접 + VP POC 위 | 하락추세 or 저항 직하 or VP POC 하회 | daily_chart + mtf_chart_profiler |
| 수급 | 스마트머니가 사고 있는가? | 외인+기관 3d+ 동일방향 매수 (dual_buy) | 외인+기관 3d+ 매도 or 개인만 매수 | flow_series (data_frame) |
| 재료 | 카탈리스트가 살아있는가? | Fresh (≤5d) + structural/semi | Stale (≥21d) or temporary | EV-3 결과 |
| 구조 | 독점/가격전가/대체재 부재? | 핵심 공급자 + 시장점유율 30%+ | 다수 경쟁 + 범용 제품 | ats_main.json + WebSearch |
| 실적 | 이익이 개선되고 있는가? | OP YoY 2분기+ 연속 가속 | OP YoY 적자 전환 or 역성장 | DART 3~4분기 IS |
| 환경 | 테마·시장이 우호적인가? | 테마 ACCELERATING + 시장 risk_on | 테마 COOLING + 시장 risk_off | EV-6 + EV-1 |
R:R 계산 (필수):
SL = 최근 지지(VP HVN 또는 MA20) 하회 지점
TP = 최근 저항 또는 전고점
R:R = (TP - entry) / (entry - SL)
R:R < 1.5 → 진입 불가 (6축 전부 긍정이어도)
최종 판정: | 조건 | 판정 | |------|------| | 6축 중 5+ 긍정 + R:R ≥ 2.0 | tomorrow_candidate (진입 후보) | | 6축 중 4 긍정 + R:R ≥ 1.5 | watch (관찰) | | 차트 부정 | 무조건 PASS (다른 축 무관) | | R:R < 1.5 | 무조건 PASS | | 그 외 | PASS |
근거 체인 포맷 (종목별):
- code: "042700"
name: "한미반도체"
six_axis:
chart:
verdict: "긍정"
evidence: "3주 베이스 돌파, MARUBOZU 92%. VP POC 380K 위 거래 중."
data_frame: {close: 420000, change_5d: 5.5, change_20d: 18.3, streak: 3, direction: "accelerating"}
flow:
verdict: "긍정"
evidence: "외인 5d 누적 +85만주(매집 패턴). 기관 5d +12만주 동조. dual_buy streak 3."
data_frame: {foreign_5d_cum: 850000, inst_5d_cum: 120000, pattern: "매집", direction: "maintaining"}
material:
verdict: "긍정"
freshness: "Fresh (D+2)"
structural_grade: "4Y_structural"
evidence: "HBM 패키징 수주 확대 공시 (D-2). ISSUE_LOG 12회, POLICY_TRACKER 등록."
structure:
verdict: "긍정"
evidence: "HBM TC본딩 장비 시장 점유율 70%+. 대체재 부재. 가격전가력 확보."
fundamentals:
verdict: "긍정"
evidence: "OP YoY: Q3 +32%, Q4 +45% — 2분기 연속 가속. DART 확인."
environment:
verdict: "긍정"
evidence: "AI반도체/HBM 테마 ACCELERATING D+4. macro risk_on_growth. RS 상위 5%."
rr:
entry: 420000
sl: 390000
tp: 480000
rr_ratio: 2.0
sl_basis: "VP HVN 385K + MA20 392K 하회"
tp_basis: "전고점 478K"
final_verdict: "tomorrow_candidate"
confidence: "high"
3-5. PM-4: new-discovery-detector¶
질문: "오늘 처음 등장했거나 이상 움직임을 보인 종목은?"
입력:
input:
volume_top200: fetch_market_top.py 거래대금 상위 200
morning_view_stocks: morning_view에 언급된 모든 종목 코드
prev_volume_top100: 전일 거래대금 상위 100
limit_up_list: 상한가 종목
해석 프레임워크: 3가지 이상 탐지
| 유형 | 탐지 기준 | 행동 |
|---|---|---|
| volume_new_entry | 오늘 Top 50 진입 + 전일 Top 100 밖 | WHY 조사 (WebSearch) |
| price_anomaly | 등락률 ≥ 10% + morning_view에 미포함 | WHY 조사 + 테마 매핑 |
| foreign_quiet_buy | 거래량 변화 미미 + 외인 5d 순매수 상위 + 언론 보도 없음 | 매집 의심 플래그 |
분류:
[NEW] = morning_view에 없던 종목
[TRACKED] = morning_view watch_list에 있던 종목
산출물: new_discoveries[]에 discovery_type + was_in_morning_view + needs_investigation 포함
4. data_frame 적용 범위¶
모든 수치에 적용¶
| 도메인 | 필드 | data_frame 적용 |
|---|---|---|
| 글로벌 자산 | 모든 지수/원자재/금리/환율 | value + 1d/5d/20d + streak + direction |
| 수급 | 외인/기관/개인 순매수 | daily[] + 5d_cum + 20d_cum + pattern + direction |
| 파생 | 선물 포지션, 베이시스 | daily[] + 5d_cum + direction |
| 테마 | 거래대금, RS | daily + 5d_avg + 20d_avg + rank_change |
| 종목 가격 | 종가 | value + 1d/5d/20d change + vs_52w_high + vs_support |
| 실적 | OP, 매출 | YoY + QoQ + 3~4분기 sequence + acceleration/deceleration |
적용하지 않는 것¶
| 도메인 | 이유 |
|---|---|
| 뉴스 헤드라인 | 텍스트, 수치 아님 |
| 정책 상태 | 단계 enum (발표/1차반영/소진), 시계열 아님 |
| 재료 4Q binary | Y/N 판정, 수치 아님 |
5. 적중률 피드백 루프¶
PM-1 signal_scorecard
↓ append
accuracy_log.jsonl
↓ 주간 집계
accuracy_summary.json
↓ 피드백
MO-2 sector_transfer 가중치 조정 (예: 우주 전이 적중률 30% → transfer_strength 하향)
MO-3 material_grading 기준 조정 (예: guru발언 기반 S등급 → 적중률 40%면 A로 하향)
집계 필드:
{
"period": "2026-W20",
"by_theme": {
"AI반도체/HBM": {"total": 8, "hit": 6, "accuracy": 75.0},
"우주항공": {"total": 4, "hit": 1, "accuracy": 25.0}
},
"by_category": {
"sector_transfer": {"total": 15, "hit": 11, "accuracy": 73.3},
"guru_statement": {"total": 5, "hit": 2, "accuracy": 40.0},
"policy_event": {"total": 8, "hit": 5, "accuracy": 62.5}
},
"by_root_cause": {
"policy_blind_spot": 4,
"transfer_failure": 3,
"earnings_calendar_miss": 2
}
}