콘텐츠로 이동

원자 에이전트 프레임워크 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. 품질 규칙

  1. 근거 없는 해석 금지 — 모든 판정에 evidence 필드. 데이터 미확인이면 "unknown" + confidence: "low".
  2. 단정 금지 — 1일 데이터로 추세 판정 금지. 최소 3일 연속 확인.
  3. 교차 검증 — 가능하면 2개 이상 소스로 같은 결론 도달. 불일치 시 conflict 플래그.
  4. 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
  }
}