앱
분석 기준: d01ea7625d3c45b18bc88702e83a6b69eed2ea6e. 공식 소스와 기존 문서를 비교했습니다. 아래 설치·실습 명령은 독자용 예시이며 이번 분석에서 upstream 설치·스크립트·모델·계정 연결을 실행하지 않았습니다.
Vibe-Trading은 자연어 금융 질문을 시장 데이터·전략 코드·백테스트·보고서에 연결하는 Python 에이전트와 웹 앱입니다. CLI·FastAPI·MCP 입구가 공통 분석 기능을 사용합니다. 현재 pyproject의 버전은 0.1.18이며, main에는 그 릴리스 이후의 변경도 있습니다.
6월 문서의 “실제 매매는 하지 않는다”는 설명은 현재 제품 전체에 적용할 수 없습니다. 연구·백테스트 경로, 브로커에 주문을 보내지 않는 로컬 모의계좌, 일부 브로커의 제한된 실거래 기능을 구분해야 합니다. 브로커별 읽기·모의·실거래 지원은 서로 다릅니다.
이번 재검토는 6월 문서의 기능·조건·권한 설명이 현재 소스에도 맞는지 확인한 것입니다. 과거 트렌딩 순위를 현재의 관심도나 성능 근거로 쓰지 않습니다. 주목할 설계는 모델의 설명을 데이터 출처·실행 산출물·주문 권한과 함께 관리하는 방식입니다.
| 경로 | 하는 일 | 경계 |
|---|---|---|
| 리서치·백테스트 | 과거 데이터로 전략·지표를 계산하고 보고서를 생성 | 실거래 경로와 분리. 데이터·모델 비용과 계산의 타당성 확인 필요 |
| 로컬 모의계좌 | SQLite 원장에 일봉 체결·현금·포지션·NAV 기록 | 브로커 주문 없음. 총수익·장중 체결을 완전 재현하지 않음 |
| 브로커 연결 | 계좌·시세 조회, 지원 브로커의 모의·제한 실거래 | 계정 구분과 사용자 mandate·만료·한도·중단 상태를 확인 |
예를 들어 README는 IBKR을 읽기 전용, KIS를 읽기·모의투자, Trading 212·Toss를 주문 불가로 설명합니다. 이를 모든 브로커에서 같은 주문 기능을 제공한다는 뜻으로 넓히지 않습니다.
| 영역 | 고정 소스의 구성 | 역할 |
|---|---|---|
| 패키지·CLI | Python 3.11+, pyproject.toml, agent/cli/ | vibe-trading·vibe-trading-mcp 진입점 |
| 모델·도구 | LangChain 1.x, LangGraph, 자체 AgentLoop·ToolRegistry | 도구 스키마·컨텍스트·공급자 호출·작업 추적 |
| 데이터·계산 | pandas·NumPy·SciPy·DuckDB, backtest/loaders/ | 시장별 소스 선택·폴백·전략 실행·통계 |
| 웹 | FastAPI·SSE, React 19·TypeScript·Vite·Zustand·ECharts | 긴 분석의 진행·세션·계좌·결과 화면 |
| 모의·실거래 | paper_trade/의 SQLite 원장, live/의 mandate·gate | 연구용 체결과 외부 주문의 서로 다른 상태 관리 |
| 배포 | Docker Compose, 선택 브로커·채널 extras | localhost 바인딩·지속 볼륨·선택 의존성 |
도구 수는 의존성·설정·공개 표면에 따라 달라집니다. 기존 22개/36개 고정 수치를 최신 총수로 재사용하지 않습니다. 기본 패키지는 MIT지만 데이터 공급자의 계정·요금·이용 조건까지 대신하지 않습니다.
CLI / FastAPI / MCP
→ AgentLoop → ToolRegistry / 필요 시 도구 정의 적재
├─ 데이터 로더 → 전략·백테스트 → 실행 산출물
├─ GroundingLedger → 최종 답변 근거 확인·수정
└─ 별도 거래 도구 → 브로커별 권한 경계
로컬 모의계좌 → 일봉 매칭 → SQLite revision 원장
제한 실거래 → mandate·만료·halt·가격·계좌·한도 → 브로커
loop.py는 오래된 도구 결과 정리, 모델 호출 없는 텍스트 접기, 구조화 요약 등의 컨텍스트 단계를 조율합니다. loop_grounding.py는 최종 답변을 근거 원장으로 확인하고 출처 보정·재검토 결정을 루프에 돌려줍니다. 이 장치가 모든 금융 수치나 미래 성과의 정확성을 보장하지는 않습니다.
sdk_order_gate.py의 execute_live_order()는 유효한 mandate, 만료, 중단 플래그, 주문 금액의 산정, 포지션·잔액, 주문·노출·일일 한도를 확인합니다. 가격을 산정할 수 없거나 잠금을 얻지 못하면 거부합니다. mandate의 frozen dataclass는 허용 자산군·제외 종목·계좌 참조·동의 만료를 표현합니다. 취소 등 위험을 줄이는 동작은 별도 경로이므로 모든 쓰기가 같은 검사를 거친다고 단정하지 않습니다.
PaperAccounts는 예상 revision과 날짜를 확인해 성공한 일봉 단계를 원자적으로 기록하며, 실패하면 원장을 유지합니다. 현재 일봉 매칭은 전량 체결 또는 거부입니다. 새 order_lifecycle.py의 new/open/filled/canceled/rejected/held/pending_cancel, Decimal·안정 ID·부분 체결 코드는 별도의 1단계 상태 머신입니다. 파일 주석은 엔진에 아직 연결하지 않았고 5분봉 엔진·거래량 정책은 후속 작업이라고 명시합니다.
Vibe-Trading/
├─ pyproject.toml Python·extras·CLI 배포 계약
├─ agent/
│ ├─ cli/ CLI 명령
│ ├─ api_server.py FastAPI 조립·미들웨어·라우터 등록
│ ├─ mcp_server.py 연구·읽기 중심 MCP 표면
│ ├─ backtest/loaders/ 시장별 데이터 소스·폴백
│ └─ src/
│ ├─ agent/ 루프·도구 적재·컨텍스트·grounding
│ ├─ api/ 보안·모델·상태·영역별 라우트
│ ├─ tools/paper_trade/ 일봉 모의계좌·매칭·상태 머신
│ ├─ live/ mandate·주문 gate·중단·감사
│ ├─ skills/ · swarm/ 분석 지침·팀 구성
│ └─ session/ · providers/ 세션·모델 공급자
├─ frontend/ React 웹 앱
└─ docker-compose.yml 볼륨·localhost·자원 제한
기존 문서처럼 API 전체를 api_server.py 한 파일로 읽기보다 조립 지점에서 src/api/의 책임을 따라갑니다. MCP에는 모의 연구 도구가 있지만 trading_place_order·trading_cancel_order는 노출하지 않는다고 소스에 명시돼 있습니다.
| 목적 | 요구·확인 사항 |
|---|---|
| 정적 소스 학습 | Git·편집기. 모델·브로커 키 불필요 |
| Python 실행 | Python 3.11+. pyproject의 과학 계산·PDF·네트워크 의존성 설치 필요 |
| 프론트엔드 개발 | frontend/package.json의 Node >=22.22.0 |
| 모델·시세 | 선택 공급자의 인증·요금·지원 기능 확인. 로컬 모델은 별도 하드웨어 조건 |
| 브로커 연동 | 브로커별 SDK·계정·sandbox·지원 시장 확인. 일부 extras는 플랫폼 제한 |
| Docker | 기본 API 127.0.0.1:8899, 읽기 전용 rootfs·지속 볼륨. 4GB/2CPU는 Compose 설정값이며 측정한 최소 사양이 아님 |
PyPI 0.1.18과 분석한 main은 동일한 소스 상태가 아닙니다. 모의계좌는 원시 가격이 필요하며 A주는 완전한 ClickHouse 달력이 필요합니다. 현금 배당과 기업행사 자동 조정은 구현되지 않았고 NAV를 배당 포함 총수익으로 해석하면 안 됩니다. 외부 API를 열 때는 인증·허용 출처를 별도로 설정합니다.
PIN=d01ea7625d3c45b18bc88702e83a6b69eed2ea6e
git show "$PIN:pyproject.toml"
git show "$PIN:frontend/package.json"
git show "$PIN:agent/api_server.py"
완료 기준: Python·Node 조건과 CLI 두 진입점을 적고, API 조립과 실제 라우트를 나눕니다. 파일 읽기만으로 수행할 수 있습니다.
자신의 별도 가상환경에서 공식 PyPI 패키지를 설치하고 공급자 비용·키를 확인한 뒤 선택할 수 있는 README 예시입니다. 이 분석에서는 실행하지 않았습니다.
python -m pip install vibe-trading-ai
vibe-trading init
vibe-trading run -p "Backtest a BTC-USDT 20/50 moving-average strategy for 2024 and summarize return and drawdown"
브로커 계정을 연결할 필요가 없는 연구 과제입니다. 완료 기준은 생성된 데이터 출처·기간·수수료·실행 구성·실패 경고를 사람이 확인하는 것입니다. 자연어 결과만으로 성공을 판정하지 않습니다.
paper_trade/accounts.py와 README를 읽어 revision 불일치, 미완료 일봉, 데이터 누락, 네트워크 응답 유실을 나눕니다. 완료 기준: 재시도 전에 현재 원장을 다시 읽어야 하는 상황과 기록되지 않은 실패를 설명합니다.
git show "$PIN:agent/src/tools/paper_trade/order_lifecycle.py"
git show "$PIN:agent/src/live/sdk_order_gate.py"동일 ID 재생·종료 주문 취소·일말 정리의 상태 전이를 그립니다. 별도로 실거래 gate가 어떤 근거 없음을 거부하는지 찾습니다. 실제 주문이나 개인 계좌를 사용하지 않습니다.
| 주차 | 읽기와 산출물 |
|---|---|
| 1주 | ToolRegistry·AgentLoop의 정의 적재와 컨텍스트 수명 지도 |
| 2주 | 데이터 로더·가격 기준·실행 산출물에서 재현 조건 체크표 |
| 3주 | SQLite 모의계좌·revision·주문 상태 전이와 실패 복구 표 |
| 4주 | 브로커별 모의/실거래 경계·mandate·API 인증을 소스와 연결한 권한 지도 |
| 용어 | 이 코드에서의 뜻 |
|---|---|
| Grounding | 답변 수치·출처를 관측한 근거와 대조하는 단계 |
| Mandate | 사용자가 동의한 자산군·한도·계좌·만료의 거래 계약 |
| Paper account | 실제 브로커 주문 없이 현금·포지션을 기록하는 모의 원장 |
| Revision | 동시 요청의 중복 기록을 막는 원장 버전 |
| Raw / adjusted price | 실제 체결 가격 기준 / 분할 등으로 조정한 분석 가격 기준 |
| Fail closed | 필요한 가격·권한·계좌 근거가 없으면 진행하지 않는 처리 |
현재 본문의 근거는 아래 고정 커밋입니다. 릴리스와 이후 main 변경을 구분해 읽습니다.