개요
Vibe-Trading은 LLM으로 구동되는 개인 트레이딩 에이전트로, 멀티 에이전트 오케스트레이션과 브로커 커넥터를 통합하여 백테스트, 실시간 시세 및 리스크 관리를 지원합니다. CLI, REST API, MCP 및 웹 인터페이스를 제공하며, 단 하나의 명령으로 트레이딩 전략을 배포할 수 있습니다.
README 미리보기
\n English | 中文 | 日本語 | 한국어 | العربية\n\n\n\n \n\n\nVibe-Trading: Your Personal Trading Agent\n\n\n One Command to Empower Your Agent with Comprehensive Trading Capabilities\n\n\n\n \n\n\n\n \n \n \n \n \n \n \n \n \n\n\n\n Website · \n Docs · \n News · \n Features · \n Shadow Account · \n Demo · \n Quick Start · \n Examples · \n API / MCP · \n Roadmap · \n Contributing\n\n\n\n \n\n\n---\n\n## 📰 News\n\n- **2026-06-03** 🧹 **Community triage + trace correlation**: Tool-call trace entries now carry the originating `call_id`, so a `tool_result` can be matched back to its `tool_call` when replaying a run trace — arg previews stay truncated to keep trace files small ([#168](https://github.com/HKUDS/Vibe-Trading/pull/168), thanks @zwrong). Source comments no longer point at an internal-only docs path that external contributors couldn't find ([#166](https://github.com/HKUDS/Vibe-Trading/issues/166), thanks @jaleelpersonal). Also clarified that the `langchain-community` resolver warning on install is a harmless leftover-package notice, not a failure ([#167](https://github.com/HKUDS/Vibe-Trading/issues/167)), and scoped Gemini 2.5/3.0 `thoughtSignature` round-tripping for function calls as a `help wanted` task with a full fix plan ([#170](https://github.com/HKUDS/Vibe-Trading/issues/170), thanks @jliu6789).\n- **2026-06-02** 🔌 **Six new broker connectors (Tiger / Longbridge / Alpaca / OKX / Binance / Futu)**: The connector-first trading layer gains a direct-SDK transport alongside IBKR (local) and Robinhood (MCP). Each connector exposes read-only account / positions / orders / quote / history **plus paper-account order placement** — test your strategies across these broker paper accounts. Five of them (Tiger, Alpaca, OKX, Binance, Futu) also support **bounded, mandate-ga
FAQ (5)
문제 해결vibe-trading에서 DeepSeek v4 pro API 키를 사용할 때 401 오류가 반환되는 이유는 무엇인가요?
401 오류는 LLM 제공자가 올바르게 구성되지 않았음을 의미합니다. .env 파일(가급적 ~/.vibe-trading/.env)에 다음이 포함되어 있는지 확인하세요:
LANGCHAIN_PROVIDER=deepseek
LANGCHAIN_MODEL_NAME=deepseek-v4-pro
DEEPSEEK_API_KEY=sk-your-deepseek-official-api-key
DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
TIMEOUT_SECONDS=2400
중요:
- LANGCHAIN_PROVIDER는 반드시 deepseek여야 하며, openrouter가 아니어야 합니다.
- OpenRouter 키와 DeepSeek 키를 혼용하지 마세요.
- Vibe-trading은 먼저 ~/.vibe-trading/.env를 읽습니다. 해당 파일이 존재하면 agent/.env 대신 그 파일을 업데이트하세요.
문제 해결Vibe-Trading CLI swarm이 '429 billing_not_active' 오류와 함께 실패하는 이유는 무엇인가요?
스웜 워커는 Codex나 단일 태스크 실행에서 사용하는 것과 별도로 자체 LLM 프로바이더 구성을 사용합니다. CLI swarm 명령어는 워크플로우를 시작하지만, 환경 변수(예: agent/.env 파일 또는 셸의 LANGCHAIN_PROVIDER, LANGCHAIN_MODEL_NAME, DEEPSEEK_API_KEY)를 통해 설정된 프로바이더 계정이 활성화되지 않았거나 결제 설정이 되어 있지 않으면 내부 워커가 실패합니다. 해결하려면 agent/.env 파일을 확인하고 올바른 API 키가 설정되어 있는지, 프로바이더 계정이 활성화되어 있고 결제가 활성화되어 있는지 확인하세요. 그런 다음 swarm 명령어를 다시 실행하세요.
문제 해결alpha-bench 심볼릭 링크 테스트에서 "AttributeError: 'object' object has no attribute 'meta'" 오류를 해결하는 방법
agent/tests/test_mcp_alpha_zoo_contract.py의 _BenchRegistry 테스트 스텁을 업데이트하여, 반환되는 레지스트리 항목에 이제 _validate_bench_data_requirements()가 요구하는 meta 속성이 포함되도록 하세요. 단순한 object() 반환 값을 SimpleNamespace(meta=None)으로 교체하세요(필요한 경우 types에서 SimpleNamespace를 임포트하세요). 검증기는 meta=None을 필수 컬럼이 없는 것으로 처리하므로 테스트가 symlink 단언으로 진행될 수 있습니다. 프로덕션 except 절을 AttributeError까지 잡도록 넓히지 마세요. 그렇게 하면 실제 레지스트리 계약 버그가 숨겨질 수 있기 때문입니다.
문제 해결max_drawdown이 초기 자금의 첫 번째 바 손실을 무시하거나 0.0으로 보고하는 옵션 백테스트 문제를 어떻게 해결하나요?
PR fix(options): seed the max-drawdown peak with initial cash가 포함된 릴리스로 업그레이드하세요. agent/backtest/engines/options_portfolio.py를 수동으로 패치하는 경우 _calc_options_metrics에서 관측된 equity 기반의 peak를:
peak = equity_vals.cummax()
유효한 초기 현금으로 시드된 peak로 교체하세요:
import numpy as np
if initial_cash is not None and np.isfinite(initial_cash) and initial_cash > 0:
peak = equity_vals.cummax().clip(lower=float(initial_cash))
else:
peak = equity_vals.cummax() # preserve previous fallback/warning
이는 agent/backtest/metrics.py와 동일한 방식이며, 여기서 initial_cash는 첫 번째 기록된 bar 이전의 계좌 최초 고점(high-water mark)입니다. 수정 후 initial_cash=100에서 equity [95, 90, 99]는 max_drawdown=-0.10을 보고하고, 단일 관측값 [90]은 0.0 대신 -0.10을 보고합니다. 첫 bar 손실, 단일 bar 손실, 전 구간 상승 equity 곡선, 유효하지 않은 초기 현금에 대한 회귀 테스트를 추가하세요.
문제 해결BTC-USDT-PERP perpetual 심볼을 백테스팅할 때 왜 모든 주문이 zero_size (trade_count: 0)로 거부되나요?
근본 원인: backtest/engines/_market_hooks.py의 _detect_market()에는 -PERP 접미사에 대한 정규식이 없기 때문에, BTC-USDT-PERP 같은 심볼이 _MARKET_PATTERNS에서 어떤 패턴에도 매칭되지 않고 통과하여 a_share 기본값으로 처리됩니다. 그러면 백테스트는 CryptoEngine 대신 중국 A주의 100주 단위 보드 랏 반올림을 적용하여 계산된 모든 포지션 크기를 0으로 내림하게 되고, 그 결과 unfilled_plan_rejections_by_symbol: {"BTC-USDT-PERP": {"zero_size": N}}가 발생하며 데이터는 정상적으로 로드됨에도 불구하고 자산 곡선이 평탄해집니다. 수정 방법: _MARKET_PATTERNS의 crypto 섹션에 다음 항목을 추가하세요: (re.compile(r"^[A-Z0-9]+-USDT-PERP$", re.I), "crypto"). 즉시 적용 가능한 우회 방법 — runner.main()을 호출하기 전에 메모리 내에서 몽키 패치를 적용하는 것입니다: import re; from backtest.engines import _market_hooks; _market_hooks._MARKET_PATTERNS.insert(0, (re.compile(r"^[A-Z0-9]+-USDT-PERP$", re.I), "crypto")). 이 패치를 적용하면 동일한 설정이 CryptoEngine으로 라우팅되고, 레버리지/마진/펀딩 설정이 적용되며, 주문 크기 계산과 체결이 정상적으로 이루어집니다. 동일한 근본 원인이 OKX 스타일의 perp 심볼(source: "okx")에도 영향을 미칩니다.