본문으로 건너뛰기
5분 AI.
2026-10-28 고정 소스 재검토 · HKUDS/Vibe-Trading

Vibe-Trading: 리서치·모의계좌·거래 권한의 경계

앱

빠른 판단

무엇
자연어 금융 질문을 데이터·전략·백테스트·보고서로 연결하고, 로컬 모의계좌와 브로커별 제한 거래 기능도 제공하는 에이전트 앱
이럴 때
전략 아이디어를 재현 가능한 분석으로 검토하거나, 모델의 근거 확인·모의 원장·브로커 권한 경계를 구현한 Python 코드를 공부할 때
입력
금융 질문·시장 데이터·전략 코드와 선택한 공급자 설정
결과
분석 보고서·백테스트 산출물·로컬 모의계좌 기록
도입 전 확인
Python 3.11+이며 모델·데이터 조건이 별도다. 일부 브로커는 제한 실거래를 지원한다. 모의계좌는 일봉 매칭이며 배당·기업행사 자동 조정은 미구현이다.
금융 분석 에이전트의 실행 근거와, 연구·모의 체결·제한 실거래가 나뉘는 구조를 읽습니다.

분석 기준: d01ea7625d3c45b18bc88702e83a6b69eed2ea6e. 공식 소스와 기존 문서를 비교했습니다. 아래 설치·실습 명령은 독자용 예시이며 이번 분석에서 upstream 설치·스크립트·모델·계정 연결을 실행하지 않았습니다.

1프로젝트 한줄 요약

Vibe-Trading은 자연어 금융 질문을 시장 데이터·전략 코드·백테스트·보고서에 연결하는 Python 에이전트와 웹 앱입니다. CLI·FastAPI·MCP 입구가 공통 분석 기능을 사용합니다. 현재 pyproject의 버전은 0.1.18이며, main에는 그 릴리스 이후의 변경도 있습니다.

6월 문서의 “실제 매매는 하지 않는다”는 설명은 현재 제품 전체에 적용할 수 없습니다. 연구·백테스트 경로, 브로커에 주문을 보내지 않는 로컬 모의계좌, 일부 브로커의 제한된 실거래 기능을 구분해야 합니다. 브로커별 읽기·모의·실거래 지원은 서로 다릅니다.

2왜 주목받는가

이번 재검토는 6월 문서의 기능·조건·권한 설명이 현재 소스에도 맞는지 확인한 것입니다. 과거 트렌딩 순위를 현재의 관심도나 성능 근거로 쓰지 않습니다. 주목할 설계는 모델의 설명을 데이터 출처·실행 산출물·주문 권한과 함께 관리하는 방식입니다.

경로하는 일경계
리서치·백테스트과거 데이터로 전략·지표를 계산하고 보고서를 생성실거래 경로와 분리. 데이터·모델 비용과 계산의 타당성 확인 필요
로컬 모의계좌SQLite 원장에 일봉 체결·현금·포지션·NAV 기록브로커 주문 없음. 총수익·장중 체결을 완전 재현하지 않음
브로커 연결계좌·시세 조회, 지원 브로커의 모의·제한 실거래계정 구분과 사용자 mandate·만료·한도·중단 상태를 확인

예를 들어 README는 IBKR을 읽기 전용, KIS를 읽기·모의투자, Trading 212·Toss를 주문 불가로 설명합니다. 이를 모든 브로커에서 같은 주문 기능을 제공한다는 뜻으로 넓히지 않습니다.

3기술 스택 전체 지도

영역고정 소스의 구성역할
패키지·CLIPython 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, 선택 브로커·채널 extraslocalhost 바인딩·지속 볼륨·선택 의존성

도구 수는 의존성·설정·공개 표면에 따라 달라집니다. 기존 22개/36개 고정 수치를 최신 총수로 재사용하지 않습니다. 기본 패키지는 MIT지만 데이터 공급자의 계정·요금·이용 조건까지 대신하지 않습니다.

4아키텍처 심화 분석

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분봉 엔진·거래량 정책은 후속 작업이라고 명시합니다.

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는 노출하지 않는다고 소스에 명시돼 있습니다.

6학습 포인트

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

목적요구·확인 사항
정적 소스 학습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를 열 때는 인증·허용 출처를 별도로 설정합니다.

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

1. 버전·입구 확인 · 기초

PIN=d01ea7625d3c45b18bc88702e83a6b69eed2ea6e
git show "$PIN:pyproject.toml"
git show "$PIN:frontend/package.json"
git show "$PIN:agent/api_server.py"

완료 기준: Python·Node 조건과 CLI 두 진입점을 적고, API 조립과 실제 라우트를 나눕니다. 파일 읽기만으로 수행할 수 있습니다.

2. 첫 리서치 실행 준비 · 중급

자신의 별도 가상환경에서 공식 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"

브로커 계정을 연결할 필요가 없는 연구 과제입니다. 완료 기준은 생성된 데이터 출처·기간·수수료·실행 구성·실패 경고를 사람이 확인하는 것입니다. 자연어 결과만으로 성공을 판정하지 않습니다.

3. 원장 충돌과 실패 표 · 중급

paper_trade/accounts.py와 README를 읽어 revision 불일치, 미완료 일봉, 데이터 누락, 네트워크 응답 유실을 나눕니다. 완료 기준: 재시도 전에 현재 원장을 다시 읽어야 하는 상황과 기록되지 않은 실패를 설명합니다.

4. 독립 상태 머신 읽기 · 심화

git show "$PIN:agent/src/tools/paper_trade/order_lifecycle.py"
git show "$PIN:agent/src/live/sdk_order_gate.py"

동일 ID 재생·종료 주문 취소·일말 정리의 상태 전이를 그립니다. 별도로 실거래 gate가 어떤 근거 없음을 거부하는지 찾습니다. 실제 주문이나 개인 계좌를 사용하지 않습니다.

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

주차읽기와 산출물
1주ToolRegistry·AgentLoop의 정의 적재와 컨텍스트 수명 지도
2주데이터 로더·가격 기준·실행 산출물에서 재현 조건 체크표
3주SQLite 모의계좌·revision·주문 상태 전이와 실패 복구 표
4주브로커별 모의/실거래 경계·mandate·API 인증을 소스와 연결한 권한 지도

10핵심 키워드 사전

용어이 코드에서의 뜻
Grounding답변 수치·출처를 관측한 근거와 대조하는 단계
Mandate사용자가 동의한 자산군·한도·계좌·만료의 거래 계약
Paper account실제 브로커 주문 없이 현금·포지션을 기록하는 모의 원장
Revision동시 요청의 중복 기록을 막는 원장 버전
Raw / adjusted price실제 체결 가격 기준 / 분할 등으로 조정한 분석 가격 기준
Fail closed필요한 가격·권한·계좌 근거가 없으면 진행하지 않는 처리

11참고 링크

현재 본문의 근거는 아래 고정 커밋입니다. 릴리스와 이후 main 변경을 구분해 읽습니다.