본문으로 건너뛰기
5분 AI.
TRENDSHIFT DAILY #7 · 2026-10-27 개정 · v0.7.0

TradingAgents 딥다이브
— 실제 트레이딩 회사 구조를 LLM 멀티에이전트로 시뮬레이션하는 금융 AI 프레임워크

프레임워크

빠른 판단

무엇
분야별 분석·상승론과 하락론 토론·리스크 검토로 매매 신호를 만드는 다중 에이전트 프레임워크
이럴 때
같은 종목을 뉴스·재무·기술 지표 관점에서 분석하고 에이전트의 의사결정 과정을 실험할 때
입력
분석할 종목과 뉴스·재무·기술 지표 자료
결과
분석·토론·리스크 검토를 거친 매매 신호
단일 LLM이 아닌 Bull vs Bear 토론 메커니즘과 3관점 리스크 관리팀이 협업하여 주식 매매 의사결정을 수행하는 오픈소스 프레임워크. LangGraph 기반으로 모듈성이 뛰어나고, 거래 후 반성(Reflection) + 메모리 축적으로 경험을 쌓아가는 에이전트를 구현합니다. (저장소: TauricResearch/TradingAgents · Apache 2.0 · Python)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 하드웨어 / 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

TradingAgents가 정확히 무엇을 하는 물건인가

TradingAgents는 실제 트레이딩 회사의 조직 구조를 LLM 멀티에이전트로 시뮬레이션하여, 주식 매매 의사결정을 협업적으로 수행하는 오픈소스 Python 프레임워크입니다. 기술적 분석·뉴스 분석·재무 분석·감성 분석을 담당하는 4명의 애널리스트가 독립적으로 분석한 뒤, Bull vs Bear 연구원이 토론하고, 리스크 관리팀이 3관점으로 검토하여 최종 매매 신호를 생성합니다.

한 컷 비유

"실제 월가 투자회사의 리서치 회의실을 AI로 재현하는 것"

실제 투자회사에서는 기술 애널리스트, 뉴스 애널리스트, 재무 애널리스트, 강세론자, 약세론자, 리스크 매니저, 포트폴리오 매니저가 각자의 관점으로 토론한 후 매매를 결정합니다. TradingAgents는 이 구조를 LangGraph StateGraph로 그대로 코드화합니다.

핵심 설계는 Bull과 Bear가 서로 다른 논거를 작성하고 판정자가 종합하는 것입니다. 토론 구조 자체가 편향 감소나 투자 성과를 보장하지는 않으며 결과 검증은 별도입니다.

2왜 주목받는가

2026-10-27 Daily 모멘텀 7위로 관측했습니다. 기술적 관심사는 하나의 답을 만드는 데서 그치지 않고 분석 보고·대립 토론·구조화된 판정·후속 평가를 이어 붙이는 방식입니다. 순위만으로 인기 원인이나 수익 성과를 단정할 수는 없습니다.

현재 동작설계상 의미
분석가 병렬 실행각자 독립된 메시지 이력·도구를 쓰고 모든 보고가 모이면 연구 토론을 시작합니다.
모델 계층 분리빠른 분석과 종합 판단의 모델·provider를 각각 설정할 수 있습니다. 호출량과 비용도 달라집니다.
지속 결정 로그판정·결과·회고를 기록하고 과거 시점에 알 수 있었던 회고만 다시 읽습니다.
내장 백테스트종목×날짜의 판단을 평가합니다. 실제 주문 체결·현금 장부를 가진 포트폴리오 시뮬레이터는 아닙니다.

README는 연구용 프레임워크라고 설명합니다. 이 문서의 초점은 데이터 시점·도구 격리·평가 구조이며, 특정 금융상품이나 매매 전략의 권고가 아닙니다.

3기술 스택 전체 지도

계층현재 구성소스 근거
런타임Python 3.11 이상pyproject.toml의 requires-python. README의 3.13은 환경 생성 예입니다.
워크플로우LangGraph·LangChain Core·SQLite checkpointgraph/setup.py, langgraph-checkpoint-sqlite 의존성
모델OpenAI·Anthropic·Google 등의 클라이언트와 provider 레지스트리llm_clients/, model 카탈로그. Bedrock은 선택 extra입니다.
데이터yfinance·stockstats·pandas 3.0.6 이상, Yahoo·Alpha Vantage·SEC 등 vendor 경로dataflows/vendors/, pyproject.toml
기록·보고로컬 결정 로그·회고·Markdown/HTML 보고memory/, reporting.py / report_html.py
CLI·배포Typer·Rich·Questionary, Docker, Python wheelcli/, Dockerfile, project.scripts

현재 필수 의존성에 Redis는 없습니다. 별도 웹 프런트엔드·운영 서버를 배포해야 쓰는 구조도 아닙니다. 모델 및 데이터 접근에 필요한 네트워크·인증·외부 비용은 선택한 provider와 vendor에 따릅니다.

4아키텍처 심화 분석

독립 분석 → 합류 → 토론 → 구조화 판정 → 기록
입력: 종목·분석일·설정
  ├─ Market / Sentiment / News / Fundamentals (선택된 분석가 병렬)
  │    각 분석가는 전용 메시지 이력 + ToolNode + 도구 라운드 상한
  └─ Memory Log: 이전 결정 결과 정산·과거 회고 준비
         ↓ 모든 첫 단계 합류
     Bull ↔ Bear → Research Manager → Trader
         ↓
     Aggressive / Conservative / Neutral 토론 → Portfolio Manager
         ↓
     판정·보고서·결정 로그 저장
         ↓ 이후 가격 구간이 충분해지면 결과와 회고 정산

분석가의 이력을 서로 섞지 않습니다

graph/setup.py의 _analyst_graph()는 분석가마다 별도 하위 그래프를 만들고 보고 필드 하나만 반환합니다. 도구 호출은 다른 분석가의 대화에 들어가지 않습니다. 도구 라운드 상한에 도달하면 보고서 작성을 요청하고 그 턴을 끝냅니다. 도구만 반복 호출하다 전체 재귀 한도를 소진하는 경우를 줄이는 장치입니다.

합류와 판정의 구조

선택 분석가와 Memory Log를 START에서 분기하고 workflow.add_edge(first_steps, "Bull Researcher")로 합류합니다. 이후 연구·리스크 토론은 조건부 라우터가 관리합니다. schemas.py는 Research Manager·Trader·Portfolio Manager의 결과를 Pydantic 구조로 정의하고 다시 읽을 수 있는 보고 형식으로 렌더링합니다. 최종 평가는 Buy·Overweight·Hold·Underweight·Sell의 다섯 단계입니다.

BM25 대신 지속 결정 로그

현재 TradingMemoryLog는 종목·분석일별 결정을 중복 저장하지 않는 Markdown 로그입니다. 미정산 항목은 pending으로 남고, 충분한 가격 구간을 확보한 뒤 수익 변화·벤치마크 대비 차이·회고를 기록합니다. get_past_context(as_of=...)는 해당 분석일 이전에 결과가 알려진 항목만 포함합니다. 이는 모델 가중치를 재학습하는 과정이 아닙니다.

# memory/log.py의 실제 시점 제한
if as_of is not None:
    entries = [e for e in entries
               if e.get("resolved") and e["resolved"] <= as_of]

백테스트의 진입 시점과 한계

memory/settlement.py는 분석일 당일 종가 뒤에 나온 뉴스가 판단에 포함될 수 있으므로 분석일 이후 첫 종가부터 결과를 평가합니다. backtest.py는 종목×날짜 셀을 독립 평가하고 평점별 방향 적중과 평균 alpha를 요약합니다. 주문 수량·체결가·현금 장부가 없으므로 투자 포트폴리오의 실제 손익 시뮬레이션으로 해석하면 안 됩니다. 셀당 모델 샘플 한 번과 비보관 텍스트 피드 때문에 결과는 완전 재현 가능한 측정도 아닙니다.

v0.7.0 README에는 사용자의 ChatGPT 구독을 쓰는 provider도 추가됐다고 안내합니다. 이는 upstream의 기능 설명이며, 이번 분석에서 로그인·모델 호출·금융 데이터 호출은 하지 않았습니다.

5디렉토리 구조 해부

TradingAgents/
├── cli/                       대화형·비대화형 실행, 보고 표시
├── tradingagents/
│   ├── default_config.py      환경변수·기본 설정
│   ├── agents/
│   │   ├── analysts/          market/news/fundamentals/sentiment
│   │   ├── researchers/       Bull/Bear
│   │   ├── managers/          연구 종합·최종 판정
│   │   ├── risk_mgmt/         3관점 토론
│   │   └── schemas.py         구조화 판정
│   ├── graph/                 하위 분석 그래프·합류·조건부 토론
│   ├── dataflows/vendors/     Yahoo/Alpha Vantage/SEC 등 데이터 경로
│   ├── memory/                결정 로그·결과 정산·회고
│   ├── reporting.py / report_html.py  Markdown/HTML 보고
│   ├── backtest.py            종목×날짜 판단 평가
│   └── llm_clients/           provider 추상화
├── tests/                     시점·날짜·도구·평점·provider 회귀
└── pyproject.toml / Dockerfile

3월 문서에 있던 social_media_analyst.py는 현재 sentiment_analyst.py이고, 데이터 vendor들은 하위 패키지로 나뉘었습니다. 옛 import 경로를 그대로 실습에 쓰기 전에 현재 tree를 확인합니다.

6학습 포인트 (기술별)

학습 주제실제 읽을 위치확인할 질문
병렬 그래프의 상태 격리graph/setup.py동시에 실행하는 분석가가 같은 메시지 키를 덮지 않게 어떻게 출력 스키마를 제한하나?
도구 루프 종료_analyst_graph(), wrap_up반복 호출이 상한에 닿았을 때 보고서 작성 턴은 어떻게 끝나나?
시점 무결성memory/log.py, settlement.py결정 시각·결과가 알려진 시각·평가 시작 가격을 왜 구분하나?
결과 검증agents/schemas.py숫자 자리의 범위·비율·빈 값이 어떻게 처리되고 다섯 등급과 연결되나?
평가 범위backtest.py독립 셀의 판단 평가에 없는 주문·현금 장부를 결과 해석에 끼워 넣지 않았나?

7하드웨어 / 시스템 요구사항

단계조건
소스 읽기텍스트 편집기·Git. 키나 실행 환경 없이 구조를 분석할 수 있습니다.
패키지 실행Python 3.11+, pyproject.toml 의존성. README는 conda 또는 uv의 3.13 환경 예를 제공합니다.
모델·데이터선택 provider/vendor에 맞는 인증·접근 권한이 필요합니다. 호스팅 모델 호출은 비용이 발생할 수 있습니다.
저장보고·캐시·결정 로그·checkpoint를 저장할 로컬 경로. Docker는 tradingagents_data volume을 안내합니다.
하드웨어현재 원본은 RAM 4GB/8GB 같은 최소치를 제시하지 않습니다. 호스팅 API와 로컬 모델의 요구는 서로 다릅니다.

현재 필수 의존성에 Redis나 backtrader는 없으며 이를 설치 전제로 안내하지 않습니다. 분석가 수·토론 깊이·정산할 결정 수에 따라 호출량이 바뀝니다. 이 문서는 비용이나 처리 시간을 직접 측정하지 않았습니다.

8직접 해볼 수 있는 실습 과제

1. 설치 조건 대조 · 기초

README의 Python 환경 예와 pyproject.toml의 requires-python을 대조합니다. 산출물은 필수·선택 extra·문서 예시를 나눈 표입니다. 설치 스크립트를 실행할 필요는 없습니다.

2. 분석가 합류 경로 그리기 · 중급

setup.py에서 START 분기와 first_steps 합류, 보고 전용 출력 스키마를 찾습니다. 두 분석가의 도구 메시지가 서로 섞이지 않는 이유와 루프 상한을 도식화합니다.

3. 과거 회고의 시점 표 만들기 · 중급

가상의 결정일·결과 확정일·분석일을 세 열로 놓고 어떤 회고가 포함될지 예상합니다. get_past_context의 as_of 조건과 대조해 미래 결과가 들어갈 사례를 찾습니다.

4. 평가와 체결 시뮬레이션 구분 · 심화

backtest.py의 모듈 설명과 BacktestSummary.render()를 읽고 지표가 뜻하는 범위를 정리합니다. 수량·체결가·현금 장부가 없다는 점과 분석일 이후 첫 종가 기준을 설명하는 것이 완료 조건입니다.

5. 구조화 숫자 입력 검사 · 심화

schemas.py의 _coerce_optional_float()를 읽어 빈 문자열·비율·통화 표기·범위가 각각 어떻게 정규화되는지 표로 만듭니다. 투자 판단을 생성하지 않고 데이터 계약을 검토하는 과제입니다.

9관련 기술 심화 학습 로드맵

6주 커리큘럼

1주차: LangGraph 기초

LangGraph 공식 문서 정독, StateGraph·노드·엣지·조건부 라우팅 이해, 간단한 2-노드 워크플로우 만들어보기. 참고: LangGraph 공식 튜토리얼 (langchain-ai.github.io/langgraph/)

2주차: 멀티에이전트 시스템 패턴

Agent 역할 분리 패턴(Analyst, Researcher, Manager), 토론(Debate) 메커니즘 구현, 메모리 + Reflection 패턴. 참고: TradingAgents의 graph/setup.py 소스코드 정독.

3주차: 금융 데이터 엔지니어링

yfinance API로 주가/재무 데이터 수집, 기술지표(MACD, RSI, 볼린저밴드) 이해 및 구현, pandas로 시계열 데이터 처리. 실습: 관심 종목 3개의 기술지표 대시보드 만들기.

4주차: LLM 프로바이더 추상화

Factory 패턴으로 멀티 프로바이더 지원, 프로바이더별 특수 기능 활용, 비용 최적화: Deep/Quick Think 모델 분리 전략. 실습: 3개 프로바이더를 지원하는 LLM 클라이언트 라이브러리 만들기.

5주차: CLI/TUI 개발

Typer로 CLI 프레임워크 구축, Rich로 실시간 터미널 대시보드 개발, Questionary로 대화형 입력 처리. 실습: 나만의 AI 도구 CLI 대시보드 만들기.

6주차: 통합 프로젝트

4주차까지 배운 기술을 조합하여 미니 TradingAgents 구현. 2명의 에이전트 + 1명의 판정자로 간소화된 토론 시스템, yfinance 데이터 기반 간단한 매매 시그널 생성.

10핵심 키워드 사전

용어이 저장소에서의 의미
StateGraph / ToolNode상태를 전달하는 워크플로우 / 분석가의 도구 호출 실행 노드
DebateBull·Bear 또는 리스크 관점별 논거를 순서와 조건으로 연결하는 과정
구조화 판정Pydantic 스키마의 등급·근거를 검증한 뒤 보고 형식으로 렌더링하는 결과
Memory Log결정·미정산 상태·결과·회고를 저장하는 지속 로그. 모델 학습 가중치가 아닙니다.
Point-in-time분석일 당시 알 수 있었던 데이터·결과만 사용하는 시점 제약
Alpha선택한 벤치마크 대비 결과 차이. 주문 체결 손익과 같지 않습니다.
Checkpoint중간 그래프 상태를 저장하고 재개하는 기록
Deep / Quick tier종합 판단과 빠른 분석에 서로 다른 모델·provider를 연결하는 계층

11참고 링크

2026-10-27 고정 커밋 e8f5503e9b86d5c2710b0c76b1f686703968c9df을 읽어 3월 문서를 개정했습니다. upstream 패키지 설치·테스트·모델 호출·금융 데이터 수집은 하지 않았습니다.