ATS CPT 시스템 아키텍처¶
전체 파이프라인 구조¶
┌─────────────────────────────────────────────────────────────┐
│ EVENING PIPELINE │
│ (20:00~06:00 KST) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ run_routine.py 'evening' │
│ │ 데이터 수집 │ 13개 스텝 (A/MS/T/TM/TP/N/PS/P/PU/ │
│ │ (코드 강제) │ BR/M/EC/EX) │
│ └──────┬──────┘ │
│ │ │
│ ┌──────▼──────┐ run_evening_analysis.py │
│ │ Phase 0~7 │ 환경진단 + 과거리포트 + 글로벌 + 정책 │
│ │ (코드 강제) │ + 국내재료 + 리스크 + 테마후보 + 종목 │
│ └──────┬──────┘ │
│ │ │
│ ┌──────▼──────────────────────────────────────────────┐ │
│ │ Phase 8~12: 에이전트 순차 호출 (claude -p) │ │
│ │ │ │
│ │ Phase 8 ┌──────────────────┐ │ │
│ │ ──────────│ Macro-Economist │ │ │
│ │ │ L1~L5 유동성렌즈 │ │ │
│ │ │ X1~X2 교차검증 │ │ │
│ │ └────────┬─────────┘ │ │
│ │ │ │ │
│ │ Phase 9 ┌────────▼─────────┐ │ │
│ │ ──────────│ Sector-Analyst │ │ │
│ │ │ T1~T4 모멘텀렌즈 │ │ │
│ │ │ 섹터 체력 판정 │ │ │
│ │ └────────┬─────────┘ │ │
│ │ │ │ │
│ │ Phase 10 ┌────────▼─────────┐ │ │
│ │ ──────────│ News-Curator │ │ │
│ │ │ 촉매분류렌즈 │ │ │
│ │ │ S/A/B/C/D 등급 │ │ │
│ │ └────────┬─────────┘ │ │
│ │ │ │ │
│ │ Phase 10.5 ┌───────▼────────┐ (코드 강제) │ │
│ │ ───────────│ candidate_from │ │ │
│ │ │ _theme.py │ │ │
│ │ │ 테마별 분리 실행 │ │ │
│ │ │ 4축 스코어링 │ │ │
│ │ └───────┬────────┘ │ │
│ │ │ │ │
│ │ Phase 11 ┌────────▼─────────┐ │ │
│ │ ──────────│ Stock-Analysis │ │ │
│ │ │ 재료수혜경로 출발 │ │ │
│ │ │ 1~2종목 집중 │ │ │
│ │ └────────┬─────────┘ │ │
│ │ │ │ │
│ │ Phase 12 ┌────────▼─────────┐ │ │
│ │ ──────────│ Day-Trader │ │ │
│ │ │ X1~X6 교차검증 │ │ │
│ │ │ 6섹션 최종리포트 │ │ │
│ │ └──────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 최종 저장: docs/evening_reports/YYYYMMDD_evening.md │
└─────────────────────────────────────────────────────────────┘
7개 에이전트 상세¶
1. Macro-Economist (거시경제 분석가)¶
역할: 글로벌 자산+파생+경제지표를 종합하여 시장 환경을 진단하고, 위험자산 투자 환경을 판정
입력:
- macro_series.json (20일 파생 + 글로벌 자산 시계열)
- 과거 POST_MARKET 리포트 10일치
- 과거 EVENING 리포트 5일치
- ISSUE_LOG, EVENT_CALENDAR, POLICY_TRACKER
핵심 질문: | Q | 질문 | 답변 형태 | |---|------|---------| | Q1 | 지금 시장은 어떤 국면인가? | cycle_position + kospi_environment | | Q2 | 시장 참여자들은 뭘 베팅하고 있나? | 파생 포지셔닝 수치 | | Q3 | 다음 2주 핵심 변수는? | 이벤트 + 정책 + 구루 |
유동성 렌즈 (L1~L5): | # | 질문 | 데이터 | 판단 | |---|------|--------|------| | L1 | Net Liquidity 방향 | FRED WALCL-TGA-RRP | expanding/contracting/flat | | L2 | VIX 텀스트럭처 | VIX3M/VIX ratio | contango(<0.9)/backwardation(>1.05) | | L3 | HY 스프레드 방향 | HY_SPREAD 5d 변화 | tightening(risk-on)/widening(risk-off) | | L4 | 경제지표 서프라이즈 | WebSearch NFP/CPI/PMI | 3개+ 동일방향=트렌드 | | L5 | 헤드라인 2차 구성요소 | WebSearch CPI shelter 등 | CPI/고용 발표 주만 |
교차검증: - X1: 채권 vs 주식 모순 (none/mild/severe) - X2: 고정금리(미국) vs 변동금리(한국) 시차
하위 에이전트: M1(4축 사이클), M2(정책 4채널), M3(재정 양면), M5(자본흐름), M6(이벤트 3시나리오), M7(이벤트 사후판정), M8(Intermarket 선행성)
출력: m_total — trading_environment bias(LONG/NEUTRAL/SHORT) + confidence + flip_trigger
2. Sector-Analyst (섹터 분석가)¶
역할: 테마별 자금 흐름과 모멘텀을 분석하여 테마의 체력(강세/순환매/피로)을 판정
입력:
- sector_series.json (테마별 20일 RS + 가속도 + 거래대금)
- 과거 POST_MARKET 리포트 10일치 (UNIT 3 거래대금, UNIT 4 테마 지형도)
- macro.md (환경 context)
섹터 모멘텀 렌즈 (T1~T4): | # | 질문 | 데이터 | 판단 | |---|------|--------|------| | T1 | RS 가속도 | acceleration | (+)=올라탈 타이밍, (-)=피로 경고 | | T2 | 매출 전환 단계 | DART (대장주 3개 매출 QoQ) | expectation/revenue_transition/matured | | T3 | 참여자 구성 변화 | flow_series derived | early(건강)/mid(ok)/late(배분 경고) | | T4 | 구조적 테마 여부 | macro favored_angles | 구조적=미국소비→생산/탈중국 |
섹터 체력 판정: - 강세지속: T1(+) + T2 매출전환 + T3 초기~중기 + T4 구조적 - 순환매구간: T1(+) but T3 후기 OR T2 기대단계 - 피로누적: T1(-) + T3 개인주도 전환
하위 에이전트: S1(RS 괴리), S2(생명주기), S3(대장주 판정), S5(매출비중), S6(과열), S7(괴리 탐색)
출력: s_total — per_stock(substance_grade, theme_role) + momentum_lens(섹터 체력) + leader_stock_per_theme
3. News-Curator (뉴스 큐레이터)¶
역할: 뉴스를 수집→등급 판정→S/A급 드릴다운→수혜 경로 식별
입력: - POST_MARKET 리포트 (NC-3 등급, 상한가 WHY) - 텔레그램 27개 채널 - POLICY_TRACKER - WebSearch (미장 마감 뉴스, 섹터매체)
촉매 분류 렌즈: - Hard Catalyst: 결과+시점 확정 (실적 발표, 정책 시행일, M&A) - Soft Catalyst: 결과 불확정 (규제 검토, 기술 채택 초기)
촉매 3요소: 타이밍 × 실현확률 × 밸류에이션 영향 - HIGH×HIGH×HIGH = S등급 - 하나라도 LOW = 최대 B등급
Priced-in 판단 (3가지 중 2개+ 해당 시): 1. 뉴스 빈도: 직전 2주 동일 주제 5건+ 2. M7 감응도: 같은 유형 재료에 시장 반응 축소 3. 가격 선행: 테마/종목 뉴스 전 20d +15%+
1차 vs 2차 효과 모순 체크: none/mild/severe
하위 에이전트: NC-3(5축 스코어), NC-6(테마 매핑), NC-6C(종목풀), NC-13(임박도)
출력: n_total — S/A/B/C/D 등급 + 촉매 3요소 + 수혜 경로(직접/간접) + front_page 1~3건
4. Sentiment-Analyst (수급/심리 분석가)¶
역할: 4주체(외인/기관/프로그램/개인) 거래 패턴 → 수급 방향 판정 + 시장 포지셔닝 극단성 측정
입력:
- flow_series/{code}.json (종목별 20일 4주체 수급)
- macro_series.json (파생 시계열)
포지셔닝 렌즈:
참여자 구성 변화: | 조건 | 판정 | |------|------| | 외인>0 & 기관>0 & 개인≤0 | early (건강) | | 기관>0 & 개인>0 | mid (아직 ok) | | 기관<0 & 개인>0 | late (배분 경고) |
COT/파생 극단성: | 지표 | extreme | elevated | |------|---------|----------| | 외인선물 20d 누적 | |값| > 30,000 | |값| > 15,000 | | 프로그램 비차익 5d | |값| > 3조 | |값| > 1.5조 |
하위 에이전트: SEN-1(종목 시계열), SEN-2(재료 선반영), SEN-3(이벤트 후 4시나리오), SEN-4(4주체 동조), SEN-5(VKOSPI/극단)
출력: sn_total — per_stock(pattern, participant_shift) + market_context(regime, positioning_extreme)
5. Fundamentals-Analyst (실적 분석가)¶
역할: 매출/이익 가속도 + Red Flag 판정 → "실적이 받쳐주는가"
입력:
- DART MCP get_financial_statement (IS/CF/BS 3표)
- WebSearch (컨센서스 EPS/목표가)
어닝 가속 체크: | 항목 | 기준 | |------|------| | EPS YoY 가속 | 직전 분기 대비 가속 → ACCELERATING/DECELERATING/FLAT | | 매출 성장 | QoQ >5% 또는 YoY >20% | | 마진 확장 | OP마진 QoQ 개선 동반 |
Red Flag 4항목: | # | Red Flag | 확인 방법 | |---|----------|---------| | RF1 | 매출↑ + 마진↓ 동시 | DART IS | | RF2 | 임원 대량 매도 | DART 공시 | | RF3 | 부채 급등 | DART BS 부채비율 QoQ 20%p+ | | RF4 | 영업CF 악화 | DART CF 적자전환 or QoQ -50%+ |
하위 에이전트: FA-M1(3표 교차 퀄리티), FA-M2(일회성 제거), FA-M3(Forward 멀티플), FA-M4(PEAD), FA-M5(가이던스), FA-M6(산업 KPI), FA-M7(역산 성장률)
출력: f_total — per_stock(earnings_acceleration, red_flag, valuation_grade)
6. Chartist (차트 분석가)¶
역할: 차트 내 시장참여자의 행동과 불균형을 읽고 진입 자리를 판단한다. "어떤 패턴인가"가 아니라 "누가 급하고, 어디에 미해소 불균형이 남아 있는가"
입력:
- chart_profiles/YYYYMMDD_mtf_profiles.json
- Kiwoom REST API 60일+ OHLCV (일봉) + 5분봉 900봉 (분봉 VP용)
4묶음 해석:
| 묶음 | 구성 | 판단 | 도구 |
|------|------|------|------|
| A 불균형 지도 | Q1: 어디에 HVN/LVN이 있는가. 현재가는 합의 안인가 밖인가 | VP(일봉+분봉) + sr_levels | volume_profile_poc() + intraday_volume_profile() |
| B 불균형 동태 | Q2+Q3: 생성 vs 해소. 누가 급한 쪽인가. phase 맥락 | VSA 3축 + delta + phase_bias | compute_vsa_metrics(phase=) |
| C 진입 판단 | SL = HVN(합의=지지). TP = LVN 너머 HVN. R:R 계산 | VP + sr + ATR | cluster_levels() + VP |
| D 방향 확인 | Q4: 상위TF 불균형 방향과 일봉 일치 여부 | weekly/monthly | resample() + tf_structure() |
B→A 피드백: C8(VSA)이 A(phase)를 입력받아 같은 고거래량 신호를 phase별로 다르게 해석.
예: rally 중 climax_buying → trend_acceleration (T+10 +6.84%, 승률67%). decline 중 climax_buying → dead_cat_bounce (승률0%).
백테스트 검증된 유효 신호 (7종목 x 2기간, 2,195일):
- demand_bar: 승률 74% (최고)
- trend_acceleration: T+10 +6.84%
- shakeout_candidate: 승률 62%
- close_zone=lower: 2,195일 일관 우위 (55%)
- dead_cat_bounce: 0% → 회피 필수
하위 에이전트: C1~C9 옵저버 + C10 메인
출력: c_total — dominant_direction + invalidation + entry_method + sl_price/tp_price/rr_ratio + top_signal(YES/NO) + vsa_summary + volume_profile
판정 스냅샷 저장 (verdict_list.json / wait_watchlist.json):
GO/WAIT 판정 시 chart_snapshot 필드로 판정 시점의 차트 해석 근거를 함께 기록한다. 사후 검증 시 "왜 그렇게 읽었는가"를 추적 가능.
"chart_snapshot": {
"cutoff": "2026-05-11",
"phase": "range_bound",
"vsa_latest": {"norm_spread": 0.7, "norm_vol": 1.1, "close_zone": "middle", "evr": -0.17, "delta_pct": 0.29},
"vsa_events_recent": ["climax_buying(accumulation_absorption)"],
"cum_delta_5d": 103469905,
"vp_daily": {"poc": 190462, "nearest_hvn": 203112, "nearest_lvn": 234737},
"vp_intraday": {"poc": 224016, "nearest_hvn": 265383, "nearest_lvn": 279983},
"sl_basis": "hvn_265K",
"sl_vp_quality": "HVN(강함)",
"imbalance_assessment": "현재가 287K는 분봉 LVN(280K) 위. 하단 지지 약함. 1차 HVN 265K",
"dominant_direction": "bullish",
"synthesis": "[가속] 5일째. MU +15.5% 반영 갭업"
}
7. Day-Trader (최종 판정)¶
역할: 5개 도메인 결론을 연결하고 교차검증 → GO/WAIT/PASS 판정. 분석하지 않고 연결만 한다.
입력: m_total + c_total + s_total + sn_total + f_total + stocks.md + verdict_list.json + wait_watchlist.json
교차검증 (X1~X6): | # | 검증 | 결격 시 | |---|------|--------| | X1 | 채권 vs 주식 모순 | severe → GO 불가 | | X2 | 컨센서스 과밀 | high + X3 yes → WAIT | | X3 | 촉매 Priced-in | yes → GO 불가 | | X4 | 1차 vs 2차 효과 모순 | severe → 사이즈 제한 | | X5 | Red Flag | true → GO 불가 | | X6 | 포지셔닝 극단 | extreme → 사이즈 50% |
GO 4조건: 1. 고점신호 부재 (chart q1=NO) 2. SL 자리 확보 (chart q2=YES) 3. 재료 뒷받침 (sector/news YES/A) 4. 수급 확인 (sentiment YES)
리포트 6섹션 (각 섹션은 이전 결론에서 출발): 1. 시장은 지금 어디에 있는가 (macro) 2. 자금은 어디로 가고 있는가 (sector) 3. 어떤 재료가 어디에 영향을 미치는가 (news) 4. 어떤 종목이 반응할 것인가 (stocks) 5. 교차검증 (X1~X6) 6. 내일 뭘 할 것인가 (실행 체크리스트)
Phase 10.5: candidate_from_theme.py (코드 강제)¶
목적: news.md S/A 재료 수혜 테마에서 대장주 후보를 데이터 기반으로 선정
실행 방식: 테마별 분리 실행 (각 top 3, 중복 제거)
4축 스코어링: | 축 | 항목 | 점수 | |---|------|------| | 가격 | 52주 위치 70%+ | +2 | | 가격 | 5d 수익률 5%+ | +1 | | 거래대금 | 변화율 50%+ | +1 | | 거래대금 | 절대규모 1000B+ | +2 | | 거래대금 | 절대규모 300B+ | +1 | | 거래대금 | 절대규모 <100B | -1 | | 실적 | 흑자 | +2 | | 실적 | 매출 YoY 10%+ | +1 | | 실적 | OP YoY 20%+ | +1 | | 수급 | dual_buy(외인+기관) | +3 | | 수급 | 외인 단독 매수 | +1 | | 수급 | z-score 2.0+ | +2 | | 거래량 | 변화율 30%+ | +1 |
데이터 수집 스크립트 → 사용처 매핑¶
| 수집 스크립트 | 데이터 | 사용처 |
|---|---|---|
| fetch_global_assets.py | 글로벌 자산 12+ | Phase 0 환경 + Phase 8 macro |
| collect_macro_series.py | 파생+FRED+VIX+Risk | Phase 0 + Phase 8 macro |
| collect_sector_series.py | 테마 RS/거래대금 | Phase 0 flow_map + Phase 9 sector |
| fetch_telegram_news.py | 텔레그램 27채널 | Phase 10 news |
| parse_telegram.py | 텔레그램 파싱 | Phase 10 news |
| fetch_evening_news.py | RSS뉴스 CAT2~9 | Phase 3~4 정책/재료 |
| policy_scan.py | 정책 RSS | Phase 3 + POLICY_TRACKER |
| policy_cross_check.py | 정책 교차검증 | Phase 3 |
| fetch_policy_updates.py | STALE 감지 | Phase 3 |
| fetch_broker_research.py | 증권사 리포트 | Phase 3 |
| update_material_timeline.py | 재료 타임라인 | ISSUE_LOG |
| fetch_economic_calendar.py | FRED 경제지표 | Phase 8 macro |
| fetch_export_stats.py | 수출통계 | Phase 2 |
| collect_stock_flow_series.py | 종목 수급 시계열 | Phase 11 stocks (직접 호출) |
| candidate_from_theme.py | 테마→종목 4축 스코어링 | Phase 10.5 |
추적 시스템¶
| 파일 | 역할 |
|---|---|
data/tracking/verdict_list.json |
GO 판정 종목 D+N 추적 |
data/tracking/wait_watchlist.json |
WAIT 종목 조건 일일 점검 |
data/daily_view/{date}.json |
일일 시나리오 + 감시 포인트 |
docs/trading_playbook/ISSUE_LOG.md |
ACTIVE 이슈 추적 |
docs/trading_playbook/EVENT_CALENDAR.md |
향후 이벤트 |
docs/trading_playbook/POLICY_TRACKER.md |
글로벌 정책 진행 단계 |